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

Z Milan Kerslager
Verze z 4. 6. 2009, 09:20, kterou vytvořil Milan.Kerslager (diskuse | příspěvky) (Stránka Maškaráda přemístěna na stránku Routování a maškaráda)
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ázdnit, 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í implicitní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í.

Verzi jádra zjistíte příkazem uname -r.

Jádro 2.6.x

V jádrech 2.6.x jsou potřeba tři moduly: ip_conntrack (zavádí se automaticky při nastavení maškarády příkazem iptables), ip_conntrack_ftp a ip_nat_ftp. Zkontrolujeme přítomnost modulu ip_conntrack (příkaz lsmod vypisuje moduly zavedené v jádře a příkaz grep omezí výstup jen na řádek, který obsahuje jméno modulu):

lsmod | grep ip_conntrack

Zbývající moduly můžeme zavést ručně příkazem modprobe:

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ě další dva potřebné moduly pro podporu FTP. Vložte tedy do souboru /etc/modprobe.conf následující dvojřádek (záznam je rozdělený na dva řádky znakem zpětného lomítka):

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

Jádro 2.4.x a starší

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

above ip_conntrack ip_conntrack_ftp ip_nat_ftp

Testování funkčnosti

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.

Nemáte-li z nějakého důvodu možnost moduly použít (například v případě, že se k FTP serveru připojujete pomocí šifrovaného spojení, které modul nemůže sledovat), 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ě).