Další nastavení sítě pomocí nástroje ip

Správa linuxového serveru: Další nastavení sítě pomocí nástroje ip

Dnešní díl téma nastavení sítě pomocí nástroje ip uzavře. Představí vám směrovací pravidla, dotkne se protokolu IPv6 a možnosti zřídit si IPv6 tunel přes IPv4 protokol a řekne vám, jakým způsobem změny provedené v minulých dílech nastavit tak, aby přečkaly restart počítače.

Připomínám dva předchozí díly, a sice první díl, který představil nástroj ip a základy práce s ním, zatímco druhý díl zmínil protokol ARP, základní nastavení směrování a doplnil vše, co nezbytně potřebujete k ručnímu vytvoření připojení k internetu (výchozí bránu, nastavení resolveru a přidání alespoň jedné IP adresy síťovému rozhraní).

Směrovací pravidla

Nástroj ip (a potažmo linuxové jádro) toho umí mnohem více. Řekněme, že máte k dispozici dvě brány a chcete nějakou komunikaci směrovat přes jednu a jinou komunikaci přes druhou bránu. Něco takového je také možné, a to pomocí směrovacích pravidel (ip rule).

V minulém díle jste viděli příklady směrování. To, co jsem vám zamlčel, je skutečnost, že směrovacích tabulek může být více. Nemusíte tedy mít všechna směrovací pravidla pohromadě, ale můžete je rozdělit. Pomocí ip rule pak můžete definovat, kdy se použije jaká tabulka.

Příkladem může být následující situace. Máte směrovač, který má čtyři síťová rozhraní, přičemž dvě vedou do dvou místních sítí (192.168.0.0/24 a 192.168.1.0/24) a druhá dvě vedou ke dvěma poskytovatelům připojení. Vy chcete pakety z jedné sítě směrovat přes jednoho ISP a pakety z druhé sítě přes druhého ISP. Pro představu doplňuji malý ASCII „obrázek“:

síť 192.168.0.0/24 \      / brána 10.0.0.1 --- ISP1
                    router 
síť 192.168.1.0/24 /      \ brána 10.0.2.1 --- ISP2

Specifikace IP adres na routeru by vypadala takto:

ip addr add 10.0.0.254/24 dev eth0
ip addr add 10.0.2.254/24 dev eth1
ip addr add 192.168.0.254/24 dev eth2
ip addr add 192.168.1.254/24 dev eth3

Následuje specifikace výchozích bran do dvou oddělených tabulek, tabulky 101 a tabulky 102:

ip route add default via 10.0.0.1 dev eth0 table 101
ip route add default via 10.0.2.1 dev eth1 table 102

Na závěr je potřeba specifikovat pravidla, která budou posílat pakety do jednotlivých tabulek na základě příslušnosti k určité síti:

ip rule add from 192.168.0.0/24 table 101
ip rule add from 192.168.1.0/24 table 102

Přirozeně může nastat mnoho jiných situací. Kupříkladu, místo druhého ISP můžete mít VPN (to by se konfigurovalo velmi podobně), nebo místo dvou sítí budete chtít přes jedno připojení směrovat komunikaci, která směřuje na konkrétní počítač, např.:

ip rule add to 1.2.3.4 table 101

Ve spolupráci s příkladem výše by tento řádek směroval spojení s počítačem 1.2.3.4 přes tabulku 101, tedy ISP1.

Pokud chcete zobrazit obsah konkrétní směrovací tabulky, můžete použít ip route v následující syntaxi:

ip route show table 101
ip route show table 102

Mohu vám jen doporučit podívat se na kompletní syntax ip rule do manuálových stránek, nebo si alespoň rychle zobrazit nápovědu:

ip rule help

Zjistíte, že můžete směrovat pakety i podle značek firewallu, dle TOS apod. Zjistíte také, že určité pakety můžete odmítat, a to jak na úrovni směrovacích tabulek (ip route), tak na úrovni směrovacích pravidel (ip route).

Maškaráda

V příkladu se dvěma ISP výše by nastal jeden „drobný“ problém – žádný z počítačů ve vnitřních sítích by se nedostal na internet. Důvodem je použití privátních rozsahů. Počítače ve vnitřní síti totiž nejsou díky nim přímo adresovatelné. V této situaci by bylo třeba zařídit, aby router prováděl SNAT, tedy překlad zdrojové adresy (opakem je DNAT, což je překlad cílové adresy). Konkrétně vám ukážu jeho variantu zvanou maškarádu. Ta spočívá v tom, že jádro nastaví zdrojovou adresu automaticky podle toho, jakou adresu počítač na daném rozhraní má. To má tu výhodu, že pro vytvoření tohoto pravidla nemusíte předem znát IP adresu, kterou bude mít router k dispozici (např. v situaci, kdy ISP přiděluje adresu routeru z DHCP serveru).

Maškaráda (stejně jako SNAT a DNAT) se dají nastavit přes Netfilter, tedy pomocí nástroje iptables:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

Snad nemusím dodávat, že všechno výše uvedené bude fungovat, pouze pokud bude v jádře povoleno předávání paketů (pokud nevíte, jak na to, mrkněte na poslední dva díly, kde je to popsáno). Pokud povoleno nebude, router nebude fungovat jako router a nebude pakety předávat.

Protokol IPv6 a nástroj ip

Víceméně všechny operace s nástrojem ip, které jste zde viděli, můžete provádět i v rámci IPv6 protokolu. Nástroj ip IPv6 adresy pozná a přizpůsobí se. Někdy se však hodí vědět, jak nástroji ip explicitně říci, že má brát v úvahu konkrétní protokol, buď IPv4 nebo IPv6. K tomuto účelu slouží přepínače -4 a -6:

ip -6 addr  # IPv6 adresy všech rozhraní
ip -6 route # IPv6 směrovací tabulka
ip -4 addr  # IPv4 adresy všech rozhraní
ip -4 route # IPv4 směrovací tabulka

IPv6 přes IPv4

V datacentrech byste se neměli setkat s tím, že IPv6 připojení není k dispozici, i když raději onen podmiňovací způsob zdůrazňuji, jelikož do nedávna to ještě stále někde problém byl. Většinou se ale s absencí IPv6 konektivity setkáte spíše v domácích podmínkách než v datacentrech. Ideální je samozřejmě tlačit na ISP, aby vám poskytl nativní IPv6 konektivitu, to v každém případě. Ale do té doby, než se tak stane, můžete využít tunelování IPv6 protokolu přes IPv4 protokol.

K tomu samozřejmě potřebujete někoho, kdo IPv6 konektivitu poskytuje a kdo vám poskytne druhý konec tunelu, vaše IPv6 pakety vybalí z IPv4 paketů a pošle je přes IPv6 síť tam, kam mají odejít. Těchto subjektů je k dispozici celá řada, ideální je samozřejmě vybírat ten subjekt, který je vám fyzicky co nejblíže. Odkážu vás v této souvislosti na seznam na Wikipedii.

Pokud naleznete schopného „brokera“, dá vám k dispozici nejenom potřebné údaje k nastavení sítě, ale i sadu příkazů podle operačního systému a vy můžete použít oblíbenou metodu copy & paste do terminálu či do editoru. Konfigurace pomocí nástroje ip může vypadat nějak takto:

ip tunnel add sestkovy-tunel mode sit remote 1.2.3.4 local 4.3.2.1 ttl 255
ip link set sestkovy-tunel up
ip addr add 2001:db8::/32 dev sestkovy-tunel
ip route add ::/0 dev sestkovy-tunel

První příkaz vytvoří tunel s názvem sestkovy-tunel v módu sit (což je IPv6-přes-IPv4 tunel). Zde je třeba zmínit dvě IP adresy, a sice adresu remote, tedy adresu koncového bodu tunelu (to je IP adresa vašeho brokera), a adresu local, tedy místní adresu vašeho počítače (tam tunel začíná). Druhý příkaz pak tunel „nahodí“, třetí tunel přidá vámi poskytnutý IPv6 rozsah a následuje nastavení cesty (routy).

Zpřístupnění IPv6 konektivity místní síti

Pokud chcete celé své domácí síti zpřístupnit IPv6 konektivitu, mělo by vám stačit nastavit router avdertisement démona, který bude ohlašovat potřebné údaje počítačům v síti, aby mohli provést autokonfiguraci.

Takovým démonem je například radvd, jehož název může některé mírně zmást. Ne, ono DVD v názvu nemá s dévédéčky nic společného. Je to jen zkrácenina od router advertisement daemon.

Ale zpět k radvd. Konfiguruje se v souboru /etc/radvd.conf a příklad konfigurace může vypadat nějak takto:

interface eth1 {
    AdvSendAdvert on;
    prefix 2001:db8::/32 {
        AdvOnLink on;
    };
};

Je to skutečně velmi jednoduchý příklad, nejprve se specifikuje síťové rozhraní, na kterém se mají oznámení posílat, v tomto případě eth1. Následuje blok s nastavením pro dané rozhraní. První volba v něm zapíná posílání samotných oznámení (tudíž musí být „on“), následuje specifikace prefixu pro danou síť a daný prefix je pak třeba také „povolit“ volbou AdvOnLink. Následně démona nastartujte:

/etc/init.d/radvd start

Pokud se vše povedlo, měly by počítače v místní síti automaticky získat IPv6 adresu i routy.

Více informací o nastavení radvd naleznete v manuálových stránkách:

man radvd.conf

Uložení nastavení pro přežití restartu

Pokud budete provádět nastavení sítě pomocí nástroje ip, asi je vám jasné, že tato nastavení nepřečkají restart, jelikož se nikam neukládají. Totéž platí pro nastavení iptables. Aby vaše nastavení přečkalo restart, je třeba ho někam uložit.

Jedním z míst pro ukládání různých procedur a nastavení, jež se mají vykonat po spuštění počítače, je skript /etc/rc.local, který bude spuštěn na konci bootování. Pro nastavení sítě to ale není nejvhodnější umístění, jelikož konec bootování obvykle nastává dávno po aktivaci sítě a síťových rozhraní. Ideální by tedy bylo navázat nastavení sítě na „nahození“ příslušného síťového rozhraní. Toho je možné docílit pomocí direktivy upv konfiguračním souboru /etc/network/interfaces:

iface eth0 inet static
    address 1.2.3.4
    netmask 255.255.255.0
    gateway 4.3.2.1
    up ip addr add 1.2.3.5/24 dev eth0
    up ip addr add 1.2.3.6/24 dev eth0
    up ip route add 5.6.7.8 via 8.7.6.5
    up iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

Můžete své nastavení vložit do skriptu a na něj se potom odkázat, nebo všechno napsat do /etc/network/interfaces. Toto řešení je lepší, ale není úplně čisté – ideální by bylo přidat direktivy down, které toto nastavení odčiní, aby se při shození a opětovném nahození rozhraní zbytečně nemnožily záznamy v tabulkách.

Závěr

Nástroj ip a nastavení sítě by se dalo probírat ještě dlouho, nicméně tímto dílem bych toto téma, alespoň prozatím, ukončil.