Směrování a maškaráda

Z Milan Kerslager
Verze z 28. 9. 2007, 20:05, kterou vytvořil Milan.Kerslager (diskuse | příspěvky) (Založení článku)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)
Přejít na: navigace, hledání

Maškaráda zprostředkovává přístup do Internetu počítačům, které ve vnitřní síti používají privátní IP adresy (tj. neveřejné, obvykle 10.x.x.x, 192.168.x.x atp).

Princip funkce

Maškaráda funguje tak, že při průchodu prvního datagramu z privátní sítě směrem do Internetu přepíše odesílající port a IP adresu (z privátního rozsahu) na veřejnou IP adresu, kterou router disponuje (zde rozhraní eth0). Zároveň zavede do maškarádovací tabulky /proc/net/ip_conntrack záznam, podle kterého bude proveden překlad zpět (při příchodu datagramu s odpovědí). Vzhledem k tomu, že tato tabulka vzniká dynamicky na popud z vnitřní stanice (stanice zahájí komunikaci s někým v Internetu), nelze z Internetu zahájit komunikaci směrem k vnitřní stanici (protože z Internetu můžete odeslat datagram jen na rozhraní eth0 s veřejnou IP adresou). To může být v některých případech nepříjemné (např. různé peer-to-peer sítě, kde je pak potřeba použít portforwarding), ale může to být i výhoda (ochrana vnitřních stanic před nezvanými hosty z Internetu).

Nastavení maškarády

Maškarádu pro počítače ve vnitřní síti zapnete příkazem (10.0.0.0/24 je vnitřní síť, eth0 je venkovní síťové rozhraní):

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE

Všechna nastavení iptables lze uložit. Při každém startu je můžeme obnovovat tak, že povolíme start služby iptables pomocí programu ntsysv nebo příkazem chkconfig, jak je uvedeno níže. Uložení aktuálních pravidel a povolení jejich obnovení při startu pak zajistíme těmito dvěma příkazy:

/etc/init.d/iptables save
chkconfig iptables on

Výpis nastavení

Pravidla v iptables si můžete vypsat příkazem:

iptables -L -n -t nat     # výpis nat tabulky (musí být vidět pravidlo
                          # uložené příkazem výše)
iptables -L -n            # výpis klasické tabulky (zde může být prázdná)
iptables -L -n -t mangle  # výpis mangle tabulky (zde také nepoužita)

Pokud byste chtěli iptables vypráznit, lze použít příkazy:

/etc/init.d/iptables stop  # použití skriptu

iptables -F                # ruční vyprázdnění
iptables -X
iptables -F -t nat
iptables -X -t nat
iptables -F -t mangle
iptables -X -t mangle
iptables -P INPUT   ACCEPT   # nastavení iplicitních politik
iptables -P FORWARD ACCEPT
iptables -P OUTPUT  ACCEPT

Podpora pro FTP a spol.

Problémem při použití maškarády jsou složitější protokoly, mezi něž patří například FTP. FTP používá dvě spojení - jedno řídící a druhé datové. V případě, že stanice naváže z vnitřní sítě řídící spojení se serverem v Internetu, je vše v pořádku. Problém nastane ve chvíli, kdy klient požádá o soubor a server se pokusí navázat datové spojení se stanicí (v klasickém aktivním režimu). Maškarádující stroj totiž nemá ve své tabulce žádný záznam, který by umožnil toto spojení přesměrovat ke stanici.

Řešením je použít na maškarádujícím stroji speciální modul, který bude sledovat všechna řídící spojení a bude v případě potřeby zanášet do maškarádující tabulky takové záznamy, které navázání datového spojení ze serveru ke stanici umožní. Moduly můžete zavést ručně příkazy:

modprobe ip_conntrack_ftp
modprobe ip_nat_ftp

Pokud chcete zavedení těchto modulů automatizovat, využijte toho, že v okamžiku aktivace maškarády je automaticky zaváděn do jádra modul ip_conntrack. Pomocí záznamu do souboru zajistíme, že v okamžiku jeho zavedení budou následně zavedeny ještě naše další dva moduly pro podporu FTP. Vložte tedy do souboru /etc/modprobe.conf následující řádek:

install ip_conntrack /sbin/modprobe --ignore-install ip_conntrack && \
  /sbin/modprobe ip_conntrack_ftp && /sbin/modprobe ip_nat_ftp || :

Pro jádra 2.4.x a starší použijeme v souboru /etc/modules.conf:

above ip_conntrack ip_conntrack_ftp ip_nat_ftp

Pokud bude vše dobře fungovat, půjde se z vnitřní stanice spojit s FTP serverem a zahájit FTP přenos (např. ve Windows Commanderu) i v aktivním režimu, kdy datové spojení navazuje server. Zavedené moduly lze vypsat příkazem lsmod.

Nemáte-li z nějakého důvodu možnost moduly použít, budete muset FTP přenosy nastavit do tzv. pasivního režimu, kdy je datové spojení navazováno od klienta směrem k serveru (lze nastavit v programu, který pro FTP přenosy používáte, WWW prohlížeč používá pasivní režim implicitně).