Pár poznámek a konfiguračních tipů, jak rozchodit jednoduchou domácí síť a připojit ji do internetu skrz linuxový stroj se dvěma síťovkami. Klíčové slovo je maškaráda (NAT = network address translation = překlad adres).
Mnoho informací o stavbě vnitřní sítě je k nalezení na AbcLinuxu.cz v článcích Domácí síť (I, II a III) a Soukromá síť (I, II, III, IV a V). Zde se soustředím především na propojení ven.
Ze všeho nejdřív budeme potřebovat funkční síťová rozhraní. Drivery snad máme, tak už jenom zkonfigurujeme. Buď tak
ifconfig eth0 192.168.1.1 netmask 255.255.255.0 # vnitřní rozhraní ifconfig eth1 <IP od ISP> netmask <maska od ISP> # vnější rozhraní route add default gw <gateway od ISP> dev eth1 # implicitní gateway
nebo ruznými jinými cestami nabízenými danou linuxovou distribucí/instalací. Pro modem je to asi jinak, ale s tím nemám žádnou zkušenost.
Pro NAT budeme potřebovat zapnuté některé funkce jádra. Krom standardního síťování to jsou
CONFIG_NETFILTER # paketový filtr
CONFIG_IP_NF_CONNTRACK # sledování spojení (connection tracking)
CONFIG_IP_NF_IPTABLES # IP tables
CONFIG_IP_NF_FILTER # tabulka FILTER (INPUT, OUTPUT, FORWARD)
CONFIG_IP_NF_NAT # překlad adres (tabulka NAT)
CONFIG_IP_NF_NAT_NEEDED # ???
CONFIG_IP_NF_TARGET_MASQUERADE # maškaráda
CONFIG_IP_NF_MATCH_STATE # třídění paketů podle vztahu k předchozím,
# tato volba je volitelná (ale vhodná)
Nutností CONFIG_IP_NF_FILTER pro NAT si nejsem jistý, je ale tak jako tak
potřeba pro firewallování. Kdybych
snad něco podstatného vynechal, tak je tu k nahlédnutí i celý
.config, s nímž jsem přeložil jádro 2.4.26 s
fungujícím NAT. Máme-li hotové jádro obsahující všechnu potřebnou podporu,
můžeme maškarádu zapnout.
IPT=/sbin/iptables
INTIF=eth0 # vnitřní rozhraní
EXTIF=eth1 # vnější rozhraní
$IPT -t nat -F # vyčisti NAT tabulku
$IPT -P FORWARD DROP # pakety defaultně zahazuj
$IPT -I FORWARD -i $EXTIF -o $INTIF -m state \ # zvenku dovnitř nepustíme
--state ESTABLISHED,RELATED -j ACCEPT # žádné žádosti o spojení
$IPT -I FORWARD -i $INTIF -o $EXTIF -j ACCEPT # obráceně klidně ano
$IPT -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE # směrem ven překládej
echo "1" > /proc/sys/net/ipv4/ip_forward # zapni forwarding
Toto je relevantní kus delšího init.d skriptu, který krom překladu adres nastavuje také několik jednoduchých firewallových pravidel na vnějším síťovém rozhraní. V tuto chvíli už by to nejpodstatnější mělo fungovat. Stačí jen nakonfigurovat síťová rozhraní na klientech (pro ně je třeba nastavit gateway na IP 192.168.1.1, tedy na náš router).
Síťová konfigurace klientů může být věc otravná, zvláště když stanice je notebook cestující mezi několika sítěmi. Jako nejjednodušší řešení se mi jeví zprovoznit na routeru DHCP server. Pro jeho chod budeme v jádře potřebovat zapnuté
CONFIG_PACKET # paket protokol (packet socket) CONFIG_FILTER # socket filter
Základní konfigurace DHCP démona (dhcpd.conf) není nic složitého,
význam většiny položek v dhcpd.conf je zřejmý.
max-lease-time 604800;
default-lease-time 600; # doba platnostni přidělené adresy
subnet 192.168.1.0 netmask 255.255.255.0 {
authoritative; # jsme vládnoucí DHCP server v síti
option subnet-mask 255.255.255.0;
option routers 192.168.1.1;
option domain-name-servers <IP adresa>, <IP adresa>;
range 192.168.1.3 192.168.1.254; # rozsah dynamicky přidělovaných adres
}
Za IP adresy nameserverů doplníme buď DNS zvenku (provider jistě nějaké má),
nebo si na routeru spustíme vlastní. Na popis konfigurace DNS nemám
sílu ani důvod - viz Soukromá síť, část
II), uvedu jen primitivní příklad pro nedočkavé - bind:
named.conf,
db.kolej a
db.kolej.rev.
Při výše popsaném nastavení bude DHCP server rozdávat adresy dle
vlastního uvážení
z rozsahu 192.168.1.3 až 192.168.1.254. Chceme-li obsluhovat pouze
"zaregistrované" klienty, přidáme k začátku konfiguračního souboru direktivu
deny unknown-clients;
Na konec dhcpd.conf potom dopíšeme pro každého klienta,
kterého máme v úmyslu přes DHCP obsluhovat, záznam typu
host <jméno> {
hardware ethernet <MAC adresa>;
}
Preferujeme-li přidělování pevných IP adres, můžeme vyhodit direktivu
range a do každého záznamu host přidat
fixed-address <IP adresa>;
čímž vytvoříme fixní dvojice MAC + IP. Definice těchto dvojic můžeme
i kombinovat s dynamickým přidělováním adres (pro servery je jistě rozumné
mít statické adresy). Nakonec jeden celý dhcpd.conf jako příklad. Při
použití DHCP serveru verze 3 je možné dvojici DHCP + DNS
nakonfigurovat tak, že DHCP server posílá informace o dynamicky
přidělených adresách nameserveru, který si podle toho aktualizuje
tabulky (příklad dhcpd.conf
a named.conf). Toto se
mi ale moc neosvědčilo, protože při dual-bootu windows-linux
nameserver odmítal zapomínat předchozí záznamy v tabulce.