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

Z Milan Kerslager
(přesměrováno z Routování a maškaráda)
Přejít na: navigace, hledání

Routování je činnost, kdy zařízení přeposílá IP datagramy mezi více síťovými rozhraními. Router je tedy počítač, který je připojen do více podsítí a jeho úkolem je zajistit dosažitelnost počítačů z jedné sítě do druhé. 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) pomocí jedné veřejné IP adresy (případně více veřejných adres pomocí SNAT). Maškaráda nebude fungovat, pokud není povoleno routování (viz dále).

Routování

Pokud má počítač pracovat jako router (tj. bude používat více síťových karet a zajišťovat pomocí nich přeposílání IP datagramů), musí být povoleno předávání datagramů z jednoho síťového rozhraní na druhé. Při startu jsou tyto údaje čteny ze souboru /etc/sysctl.conf, kde by měl být řádek:

net.ipv4.ip_forward = 1

Nastavení, které je uvedeno v souboru /etc/sysctl.conf, se aktivuje automaticky při startu počítače spuštěním příkazu sysctl -p, který však můžete spustit i ručně a aktuální nastavení tak aktivovat:

sysctl -p

Výše zmíněné nastavení změní chování jádra tak, že zapíše do speciálního souboru jedničku, což můžete udělat i ručně:

echo 1 > /proc/sys/net/ipv4/ip_forward

Kontrola nastavení

Povolení forwardování IP datagramů mezi síťovými rozhraními lze zkontrolovat příkazem (příkaz musí vypsat číslo 1):

cat /proc/sys/net/ipv4/ip_forward

Routování podsítí

Do seznamu podsítí, které mají být routovány, není potřeba zařazovat podsítě, které jsou k routeru připojeny přímo, protože je příslušný řádek do routovací tabulky přidán automaticky při nastavení síťového rozhraní.

V případě, že podsíť je schována za dalším routerem, je možné ručně přidat záznam do routovací tabulky:

route add -net 10.1.0.0 netmask 255.255.0.0 gw 10.0.0.254

V tomto případě budou IP datagramy určené pro podsíť 10.1.0.0/255.255.0.0 předávány routeru na IP adrese 10.0.0.254. Aby byl záznam zaveden do routovací tabulky automaticky při startu počítače, zapiště ho do souboru /etc/sysconfig/static-routes tímto způsobem:

any net 10.1.0.0 netmask 255.255.0.0 gw 10.0.0.254

Kontrola routovací tabulky

Routovací tabulku lze vypsat příkazem:

 route -n

Maškaráda

Maškaráda umožňuje počítačům, které mají ve vnitřní síti přiděleny privátní IP adresy, zpřístupnit služby v Internetu (například přístup na WWW servery a podobně). Používá se v případě, že nemáme dostatek veřejných IP adres pro všechny vnitřní stanice v lokální síti. Stanice v takovém případě mají přidělenu privátní IP adresu, ale s pomocí maškarády používají pro přístup do Internetu veřejnou IP adresu, která je přidělena maškarádujícímu stroji. Maškarádující stroj tedy přepisuje zpáteční IP adresu na svoji vnější IP adresu a při příchodu odpovědi přepíše cílovou IP adresu zpět na původní stroj z lokální sítě.

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ř. v peer-to-peer sítích, kde je pak potřeba použít portforwarding (viz odkaz), 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 -o eth0 -s 10.0.0.0/24 -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

Použití SNAT

Maškaráda (viz výše cíl MASQUERADE v příkazu iptables) používá automaticky vnější IP adresu počítače, který maškarádu používá, což zjednodušuje její nastavení. Nevýhodou je, že při reinicializaci rozhraní dojde k zahození maškarádovací tabulky a tím pádem se všechna navázaná spojení rozpadnou (nemohou pokračovat). Tento jev je nevýhodný zejména v případě, že chceme manipulovat s nastavením firewallu nebo je občas potřeba shodit a opět nahodit síťové rozhraní (např WiFi).

Použití SNAT dovoluje nejen vybrat IP adresu, kterou chceme pro maškarádu použít, ale dokáže zachovat i maškarádující tabulku. Nevýhodou je, že je nutné uvést IP adresu, která bude použita, což trochu komplikuje nastavení:

iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -j SNAT --to-source 123.123.123.1

IP adresa 123.123.123.1 je zde veřejná IP adresa, která je použita pro maškarádování.

Kontrola 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í hlavních tabulek
iptables -X
iptables -F -t nat           # ruční vyprázdnění nat tabulek
iptables -X -t nat
iptables -F -t mangle        # ruční vyprázdnění mangle tabulek
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ě).