Vyhledávání na webu

Jak přeměnit linuxový server na směrovač, který zvládne provoz staticky a dynamicky – část 10


Jak jsme očekávali v předchozích výukových programech této série LFCE (Linux Foundation Certified Engineer), v tomto článku probereme směrování IP provozu staticky a dynamicky s konkrétními aplikacemi.

Představujeme certifikační program Linux Foundation

Nejprve si ujasněme některé definice:

  1. Jednoduše řečeno, paket je základní jednotka, která se používá k přenosu informací v rámci sítě. Sítě, které používají TCP/IP jako síťový protokol, se řídí stejnými pravidly pro přenos dat: skutečné informace jsou rozděleny do paketů, které jsou tvořeny jak daty, tak adresou, kam mají být odeslány.
  2. Směrování je proces „vedení“ dat ze zdroje do cíle v rámci sítě.
  3. Statické směrování vyžaduje ručně nakonfigurovanou sadu pravidel definovaných ve směrovací tabulce. Tato pravidla jsou pevná a používají se k definování způsobu, jakým musí paket projít, když cestuje z jednoho počítače do druhého.
  4. Dynamické směrování nebo inteligentní směrování (pokud si přejete) znamená, že systém může podle potřeby automaticky změnit cestu, kterou paket sleduje.

Pokročilá konfigurace IP a síťových zařízení

Balíček iproute poskytuje sadu nástrojů pro správu sítí a řízení provozu, které budeme používat v tomto článku, protože představují náhradu starších nástrojů, jako jsou ifconfig a route.

Centrální nástroj v sadě iproute se nazývá jednoduše ip. Jeho základní syntaxe je následující:

ip object command

Kde objekt může být pouze jeden z následujících (jsou zobrazeny pouze nejfrekventovanější objekty – úplný seznam najdete v man ip):

  1. link: síťové zařízení.
  2. addr: adresa protokolu (IP nebo IPv6) na zařízení.
  3. route: záznam směrovací tabulky.
  4. pravidlo: pravidlo v databázi zásad směrování.

Zatímco příkaz představuje konkrétní akci, kterou lze s objektem provést. Chcete-li zobrazit úplný seznam příkazů, které lze použít na konkrétní objekt, můžete spustit následující příkaz:

ip object help

Například,

ip link help

Výše uvedený obrázek například ukazuje, že můžete změnit stav síťového rozhraní pomocí následujícího příkazu:

ip link set interface {up | down}

Pro takové další příklady příkazu „ip“ si přečtěte 10 užitečných příkazů „ip“ pro konfiguraci IP adresy

Příklad 1: Zakázání a povolení síťového rozhraní

V tomto příkladu zakážeme a povolíme eth1:

ip link show
ip link set eth1 down
ip link show

Pokud chcete znovu povolit eth1,

ip link set eth1 up

Místo zobrazení všech síťových rozhraní můžeme zadat jedno z nich:

ip link show eth1

Což vrátí všechny informace pro eth1.

Příklad 2: Zobrazení hlavní směrovací tabulky

Aktuální hlavní směrovací tabulku můžete zobrazit některým z následujících 3 příkazů:

ip route show
route -n
netstat -rn

První sloupec ve výstupu tří příkazů označuje cílovou síť. Výstup ip route show (za klíčovým slovem dev) také představuje síťová zařízení, která slouží jako fyzická brána do těchto sítí.

I když je dnes příkaz ip upřednostňován před route, stále se můžete podívat na man ip-route a man route, kde najdete podrobné vysvětlení zbytku sloupců.

Příklad 3: Použití linuxového serveru pro směrování paketů mezi dvěma privátními sítěmi

Chceme směrovat pakety icmp (ping) z dev2 do dev4 a také naopak (všimněte si, že oba klientské počítače jsou v různých sítích). Název každé síťové karty spolu s odpovídající adresou IPv4 je uveden v hranatých závorkách.

Naše testovací prostředí je následující:

Client 1: CentOS 7 [enp0s3: 192.168.0.17/24] - dev1
Router: Debian Wheezy 7.7 [eth0: 192.168.0.15/24, eth1: 10.0.0.15/24] - dev2
Client 2: openSUSE 13.2 [enp0s3: 10.0.0.18/24] - dev4

Podívejme se na směrovací tabulku v dev1 (box CentOS):

ip route show

a poté jej upravte tak, aby používal jeho NIC enp0s3 a připojení k 192.168.0.15 pro přístup k hostitelům v síti 10.0.0.0/24:

ip route add 10.0.0.0/24 via 192.168.0.15 dev enp0s3

Což v podstatě zní: „Přidejte trasu do sítě 10.0.0.0/24 přes síťové rozhraní enp0s3 pomocí 192.168.0.15 jako brány “.

Podobně v dev4 (box openSUSE) pro ping hostitelům v síti 192.168.0.0/24:

ip route add 192.168.0.0/24 via 10.0.0.15 dev enp0s3

Nakonec musíme povolit předávání v našem směrovači Debian:

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

Nyní pingneme:

a,

Chcete-li, aby tato nastavení trvala i při spouštění, upravte na routeru /etc/sysctl.conf a ujistěte se, že proměnná net.ipv4.ip_forward je nastavena na hodnotu true následovně:

net.ipv4.ip_forward = 1

Kromě toho nakonfigurujte NIC na obou klientech (hledejte konfigurační soubor v /etc/sysconfig/network na openSUSE a /etc/sysconfig/network-scripts na CentOS – v obou případech se nazývá ifcfg-enp0s3).

Zde je konfigurační soubor z krabice openSUSE:

BOOTPROTO=static
BROADCAST=10.0.0.255
IPADDR=10.0.0.18
NETMASK=255.255.255.0
GATEWAY=10.0.0.15
NAME=enp0s3
NETWORK=10.0.0.0
ONBOOT=yes
Příklad 4: Použití linuxového serveru pro směrování balíčků mezi privátními sítěmi a Internetem

Dalším scénářem, kdy lze počítač se systémem Linux použít jako router, je situace, kdy potřebujete sdílet své internetové připojení se soukromou sítí LAN.

Router: Debian Wheezy 7.7 [eth0: Public IP, eth1: 10.0.0.15/24] - dev2
Client: openSUSE 13.2 [enp0s3: 10.0.0.18/24] - dev4

Kromě nastavení předávání paketů a statické tabulky směrování v klientovi jako v předchozím příkladu musíme do směrovače přidat několik pravidel iptables:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

První příkaz přidá pravidlo do řetězce POSTROUTING v tabulce nat (Překlad síťových adres), což značí, že eth0 NIC by měla být použita pro odchozí balíčky.

MASQUERADE znamená, že tato síťová karta má dynamickou IP a že před odesláním balíčku do „divokého světa“ na internetu musí být soukromá zdrojová adresa paketu změněna na veřejnou IP adresu routeru.

V LAN s mnoha hostiteli router sleduje navázaná spojení v /proc/net/ip_conntrack, takže ví, kam má vrátit odpověď z internetu.

Pouze část výstupu:

cat /proc/net/ip_conntrack

je zobrazen na následujícím snímku obrazovky.

Kde je zvýrazněn původ (soukromá IP boxu openSUSE) a cíl (Google DNS) paketů. Toto byl výsledek běhu:

curl linux-console.net

na krabici openSUSE.

Jak jsem si jistý, už tušíte, router používá jako jmenný server 8.8.8.8 společnosti Google, což vysvětluje, proč cíl odchozích paketů ukazuje na tuto adresu.

Poznámka: Příchozí balíčky z internetu jsou přijímány pouze v případě, že jsou součástí již vytvořeného připojení (příkaz #2), zatímco odchozí balíčky jsou povoleny „volný konec “ (příkaz #3).

Nezapomeňte, aby vaše pravidla iptables trvala podle kroků uvedených v části 8 – Konfigurace brány Iptables Firewall této série.

Dynamické směrování s Quagga

V současné době je nejpoužívanějším nástrojem pro dynamické směrování v Linuxu quagga. Umožňuje správcům systému implementovat s relativně levným linuxovým serverem stejnou funkcionalitu, jakou poskytují výkonné (a nákladné) směrovače Cisco.

Samotný nástroj nezpracovává směrování, ale spíše upravuje směrovací tabulku jádra, protože se učí nové nejlepší cesty pro zpracování paketů.

Jelikož je to fork of zebra, program, jehož vývoj se před chvílí zastavil, zachovává z historických důvodů stejné příkazy a strukturu jako zebra. To je důvod, proč od této chvíle uvidíte mnoho odkazů na zebru.

Vezměte prosím na vědomí, že není možné pokrýt dynamické směrování a všechny související protokoly v jediném článku, ale jsem si jistý, že zde prezentovaný obsah vám poslouží jako výchozí bod, na kterém můžete stavět.

Instalace Quagga v Linuxu

Chcete-li nainstalovat quagga na vámi vybranou distribuci:

aptitude update && aptitude install quagga 				[On Ubuntu]
yum update && yum install quagga 					[CentOS/RHEL]
zypper refresh && zypper install quagga 				[openSUSE]

Použijeme stejné prostředí jako v příkladu č. 3, jen s tím rozdílem, že eth0 je připojen k routeru hlavní brány s IP 192.168.0.1.

Dále upravte /etc/quagga/daemons pomocí,

zebra=1
ripd=1

Nyní vytvořte následující konfigurační soubory.

/etc/quagga/zebra.conf
/etc/quagga/ripd.conf

a přidejte tyto řádky (nahraďte hostitelským jménem a heslem dle vašeho výběru):

service quagga restart
hostname    	dev2
password    	quagga
service quagga restart

Poznámka: ripd.conf je konfigurační soubor pro protokol Routing Information Protocol, který poskytuje routeru informace o tom, které sítě mohou být dosáhli a jak daleko (z hlediska množství chmele) jsou.

Všimněte si, že toto je pouze jeden z protokolů, které lze použít spolu s quagga, a vybral jsem jej pro tento tutoriál kvůli snadnému použití a protože jej podporuje většina síťových zařízení, ačkoli má nevýhodu předávání přihlašovacích údajů v prostém textu. Z tohoto důvodu musíte konfiguračnímu souboru přiřadit správná oprávnění:

chown quagga:quaggavty /etc/quagga/*.conf
chmod 640 /etc/quagga/*.conf 
Příklad 5: Nastavení quagga pro dynamické směrování IP provozu

V tomto příkladu použijeme následující nastavení se dvěma routery (nezapomeňte vytvořit konfigurační soubory pro router #2, jak bylo vysvětleno výše):

Důležité: Nezapomeňte zopakovat následující nastavení pro oba routery.

Připojte se k zebře (naslouchejte na portu 2601), což je logický prostředník mezi routerem a jádrem:

telnet localhost 2601

Zadejte heslo, které bylo nastaveno v souboru /etc/quagga/zebra.conf, a poté povolte konfiguraci:

enable
configure terminal

Zadejte IP adresu a síťovou masku každé NIC:

inter eth0
ip addr 192.168.0.15
inter eth1
ip addr 10.0.0.15
exit
exit
write

Nyní se potřebujeme připojit k terminálu démona RIP (port 2602):

telnet localhost 2602

Zadejte uživatelské jméno a heslo podle konfigurace v souboru /etc/quagga/ripd.conf a poté zadejte následující příkazy tučně (komentáře jsou přidány pro vysvětlení):

enable turns on privileged mode command.
configure terminal changes to configuration mode. This command is the first step to configuration
router rip enables RIP.
network 10.0.0.0/24 sets the RIP enable interface for the 10.0.0.0/24 network. 
exit
exit
write writes current configuration to configuration file.

Poznámka: V obou případech je konfigurace připojena k řádkům, které jsme přidali dříve (/etc/quagga/zebra.conf a < b>/etc/quagga/ripd.conf).

Nakonec se znovu připojte ke službě zebra na obou směrovačích a všimněte si, jak se každý z nich „naučil“ cestu k síti, která je za tím druhým, a která je dalším skokem, jak se k ní dostat. síť spuštěním příkazu show ip route:

show ip route

Pokud chcete vyzkoušet různé protokoly nebo nastavení, můžete se podívat na stránku projektu Quagga, kde najdete další dokumentaci.

Závěr

V tomto článku jsme vysvětlili, jak nastavit statické a dynamické směrování pomocí linuxových krabicových routerů. Neváhejte přidat tolik routerů, kolik chcete, a experimentujte, kolik chcete. Neváhejte nás kontaktovat pomocí níže uvedeného kontaktního formuláře, pokud máte nějaké připomínky nebo dotazy.