Poniższy artykuł pisany jest w oparciu o serwer (udostępniający) z systemem
Linux Slackware 12.1 z kernelem 2.6.28.4.
Potrzebne rzeczy.
– Serwer lub inny komputer dysponujący dwoma interfejsami sieciowymi i systemem Linux
– Drugi komputer z kartą sieciową na który udostępniamy internet.
– Kabel UTP (skrętka) skrosowany w standardzie T568B na T568A.
– Zainstalowane pakiety (iptables i DHCP)
(W moim przykładzie posługuję się interfejsami sieciowymi:
eth0 – połączenie internetowe, eth1 – udostępnia)
Na początek spinamy serwer z komputerem skrętką ,następnie tworzymy skrypt i wpisujemy do niego poniższe (a jeżeli mamy już skrypt firewalla oparty na iptables to modyfikujemy go wg podanego przykładu)
#!/bin/sh
# lokalizacja sysctl
SYSCTL=”/sbin/sysctl -w”
# lokalizacja iptables
IPTABLES=”/usr/sbin/iptables”
IPTABLESS=”/usr/sbin/iptables-save”
IPTABLESR=”/usr/sbin/iptables-restore”
# interfejs internetowy
INET_IFACE=”eth0″
INET_ADDRESS=”78.88.20.128″
# lan
LAN_IFACE=”eth1″
LAN_IP=”192.168.0.1″
# network
NET_ADDRESS=”192.168.0.0″
NET_MASK=”255.255.255.0″
# hosts
HOST_ADDRESS=”192.168.0.2″
# interfejs lokalny
LO_IFACE=”lo”
LO_IP=”127.0.0.1″
# przywracanie i zapisywanie argumentow
if [ „$1” = „save” ]
then
$IPTABLESS > /etc/sysconfig/iptables
exit 0
elif [ „$1” = „restore” ]
then
$IPTABLESR < /etc/sysconfig/iptables
exit 0
fi
# ip forward
if [ „$SYSCTL” = „” ]
then
echo 1 > /proc/sys/net/ipv4/ip_forward
else
$SYSCTL net.ipv4.ip_forward=”1″
fi
# ignorowanie pakietów ICMP
if [ „$SYSCTL” = „” ]
then
echo „1” > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
else
$SYSCTL net.ipv4.icmp_echo_ignore_broadcasts=”1″
fi
# przeladowanie wszystkich tabel
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t filter -F
$IPTABLES -t mangle -F
# czyszczenie wszystkich lancuchow
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t filter -X
$IPTABLES -t mangle -X
$IPTABLES -A INPUT -p UDP -i $LAN_IFACE –source-port 68 –destination-port 67 -j ACCEPT
$IPTABLES -t filter -P FORWARD DROP
$IPTABLES -t filter -A FORWARD -s $NET_ADDRESS/$NET_MASK -d 0/0 -j ACCEPT
$IPTABLES -t filter -A FORWARD -s 0/0 -d $NET_ADDRESS/$NET_MASK -j ACCEPT
$IPTABLES -t nat -A POSTROUTING -s $NET_ADDRES -d 0/0 -j MASQUERADE
Konfiguracja DHCP (Dynamic Host Configuration Protocol)
do pliku /etc/rc.d/rc.local dopisujemy następujące linie:
ifconfig eth1 192.168.0.1 up
route add -host dhcp dev eth1
/usr/sbin/dhcpd eth1
Następnie edytujemy plik /etc/dhcpd.conf wg poniższego przykładu:
# domena
option domain-name „ns1.klodzko.linux.pl”;
# Adresy DNS (w moim przypadku vectranetu, mogą być inne wolne DNSy np z opendns.com)
option domain-name-servers 88.156.96.61, 82.139.8.7, 88.156.63.9;
# dynamicznie uaktualniane adresy DNS
ddns-update-style none;
# domyślny czas dzierżawy adresu
default-lease-time 8640000;
# maksymalny czas dzierżawy adresu
max-lease-time 8640000;
# adres podsieci DHCP
subnet 192.168.0.0 netmask 255.255.255.0 {
# zakres adresów przydzielanych przez DHCP
range 192.168.0.10 192.168.0.200;
option broadcast-address 192.168.0.255;
# adres bramy
option routers 192.168.0.1;
option netbios-name-servers 192.168.0.1;
}
### adresy statyczne ### (opcjonalnie)
host laptop {
# adres mac klienta
hardware ethernet 00:1b:38:0c:10:cf;
# przydzielony adres IP
fixed-address 192.168.0.2;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;
option netbios-name-servers 192.168.0.1;
}
Na koniec można jeszcze do pliku /etc/hosts dopisać:
255.255.255.255 dhcp
Teraz pozostaje tylko restart serwera i wszystko powinno działać. Dla pewności po restarcie można sprawdzić polecenie route które powinno zwrócić mniej więcej coś takiego:
Destination Gateway Genmask Flags Metric Ref Use Iface
dhcp * 255.255.255.255 UH 0 0 0 eth1
192.168.0.0 * 255.255.255.0 U 0 0 0 eth1
Autor: Krzysztof Wnuk