Domácí síť

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).

Podrobněji: Mezi vnější sítí (internetem) a naší domácí sítí (pro určitost 192.168.1.0/255.255.255.0) sedí linuxový router, který zajišťuje překlad IP adres (NAT). Tento stroj je do vnější sítě připojen přes eth1 s IP adresou od providera, do vnitřní sítě přes eth0, mající adresu řekněme 192.168.1.1.

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.

Maškaráda (iptables)

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).

Konfigurace DHCP

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.

!