Hlavní navigace

Využití dvou internetových připojení (ve FreeBSD)

Petr Macek

V dnešní době poměrně levné konektivity se docela často řeší záložní konektivita nebo rozložení zátěže mezi více připojení. Tento článek vám ukáže jednu z několika možností, kterou lze rozdělit traffic do více nezávislých linek. Řešení je postavené na FreeBSD a využívá více routovacích tabulek.

Co potřebuji nakonfigurovat? Máme LAN, která má dvě (nebo více) internetové konektivity. Chceme rozdělit provoz klientů přes dvě konektivity, například podsíť 192.168.1.0/25 přes WAN2 a vše ostatní přes WAN1. Rozdělení podle podsítí není jediná možnost, provoz je možné dělit třeba podle služeb (smpt, www, …), záleží jen na nás.

LAN používá adresy 192.168.1.0/24, na WAN rozhraních běží naty. Více napoví obrázek.

                       ______________
                 fxp0 |              |  em0
LAN ------------------|  FreeBSD     |-------------- WAN1 (nat, gw 10.11.12.254)
      192.168.1.1/24  |______________| 10.11.12.1/24
                              |
                              | em1
                              --------------------- WAN2 (nat, gw 20.11.12.2)
                                20.11.12.1/252

Linuxáři se možná pozastaví nad značením síťových karet. Místo ethX jsou názvy emX,vrX, … FreeBSD značí karty dle ovladače. Možná to někomu přijde divné, ale zběhlý správce z ifconfigu rovnou pozná, s jakou kartou pracuje. Více třeba v man em, man vr, …

Pokud to někomu nevyhovuje, je možné si názvy změnit v  /etc/rc.conf:

ifconfig_em0="inet 10.11.12.1 netmask 255.255.255.0 name wan0"

nebo z ruky ifconfig em0 name wan1

Další možností je přidat si popis karty, opět v rc.conf:

ifconfig_em0="inet 10.11.12.1 netmask 255.255.255.0 descr WAN1"

nebo z ruky ifconfig em0 descr popis. Otázkou je, proč ale takové přejmenování dělat.

Jak tedy rozdělit zátěž? Použijeme více routovacích tabulek a utilitu setfib. Je to specialita FreeBSD, v systému od verze 7.1, používá se také u jailů. FreeBSD má více firewallů, my použijeme ipfw. Princip je v tom, že si vytvoříme další routovací tabulku (fib) a firewallovým ipfw pravidlem setfib označkujeme IP paket tak, že bude použit s námi definovanou routovací tabulkou. Takže v našem případě budeme mít běžnou routovací tabulku (fib0) a fib1. Pokud používáte firewall PF, místo setfib použijde rtable. Více v  man 5 pf.conf.

Pro zprovoznění je ale nutné zkompilovat kernel a oznámit mu, kolik routovacích tabulek máme, pomocí

options ROUTETABLES=2

Nejsme omezeni na dvě routovací tabulky, je možné si vytvořit až 16 tabulek (0 – 15). Kolik jich systém umožní v tomto okamžiku, můžeme zjistit pomocí sysctl:

root@kaktus ~ # sysctl net.fibs
net.fibs: 1

Doteď veškerý provoz odcházel přes WAN1, v rc.conf  tedy máme:
ifconfig_em0="inet 10.11.12.1 netmask 255.255.255.0"
defaultrouter="10.11.12.254"

Ve firewallu je nastaven nat a je do něj směrován provoz:
  ipfw nat 1 config ip 10.11.12.1 unreg_only
ipfw add 5000 nat 1 all from any to any via em0 // nat

Malá poznámka k poslednímu řádku – ipfw firewall umožňuje u každého pravidla napsat poznámku. Docela užitečná věc.

Pro druhou konektivitu přidáme druhý nat a pravidlo pro značení paketů. Celé to tedy bude vypadat takto.
První řádek je důležitý. Bez něj by paket označený pomocí setfib dále firewallem nepokračoval:
  ipfw disable one_pass

Konfigurace natů
ipfw nat 1 config ip 10.11.12.1 unreg_only
ipfw nat 2 config ip 20.11.12.1 unreg_only

Přesměrování poloviny sítě na druhou konektivitu
  ipfw add setfib 1 ip from 192.168.1.128/25 to any via fxp0 // znacka paketu

Zde by nemuselo ani přesně definované IP podsítě, důležité je
via interface. Routovací tabulkou už jsme řekli, že podsíť 192.168.1.12/25 odchází přes em1.
  ipfw add 5000 nat 1 all from 192.168.1.0/25 to any via em0 // nat 1
ipfw add nat 2 all from 192.168.1.128/25 to any via em1 // nat 2

Konkrétní výpis firewallu:
ipfw list
...
02100 setfib 1 ip from 192.168.1.128/25 to any via fxp0 // znacka
...
05000 nat 1 all from 192.168.1.0/25 to any via em0 // nat 1
05100 nat 2 all from 192.168.1.128/25 to any via em1 // nat 2
...

Vytvoření druhé routovací tabulky můžeme provést několika způsoby, snadno pomocí /etc/rc.local:
  #!/bin/sh
# mazani deafultni routy patrne neni nutne, ale jistota je jistota
setfib 1 route delete default
setfib 1 route add default 20.11.12.2

K testování slouží utilita setfib. Můžeme vypsat např. alternativní routovací tabulku pomocí

setfib 1 netstat -rn

Výchozí tabulka má číslo 0, takže lze vypsat pouze netstat -rn nebo i setfib 0 netstat -rn. Ale nejsme omezeni jen na výpis routovací tabulky, setfib jde použít téměř na cokoli. Můžete testovat třeba takto:

traceroute www.root.cz a potom setfib 1 www.root.cz.

Na větší testování je možné použít i:

setfib 5 sh (nebo bash)
// a tady pracuji s jinou rotovací tabulkou
exit
// než zde

Snadno lze udělat rovnoměrné zatížení WAN rozhraní. Stačí k tomu použít ipfw parametr prob (pravděpodobnost):
ipfw add prob 0.5 setfib 1 all from 192.168.1.0/24 to any keep state

Snadno takto lze vyrobit jednoduchý failover, třeba i jen shell skriptem, který bude modifikovat ipfw pravidlo setfib. Dnes ale máme i komfortnější nástroje a příště si ukážeme démona ifstated.

Našli jste v článku chybu?

29. 8. 2013 8:41

ted si nejsem jisty, uz je to dlouho, co jsem to psal. Mozna pomuze pouzit stavovost - setup, keep-state, established, ...

29. 8. 2013 0:28

remet (neregistrovaný)

Setfib funguje dobre a pokud se rozklada zatez dle IP nebo portu, tak je to ok.
Ale na konci zmineny "prob" udela velkou paseku kuprikladu v HTTPS.


Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Vitalia.cz: Poznáte poctivé suroviny na pečení cukroví?

Poznáte poctivé suroviny na pečení cukroví?

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Vitalia.cz: „Připluly“ z Německa a možná obsahují jed

„Připluly“ z Německa a možná obsahují jed

Podnikatel.cz: Zavře krám u #EET Malá pokladna a Teeta?

Zavře krám u #EET Malá pokladna a Teeta?

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

120na80.cz: Jmelí je více léčivé než jedovaté

Jmelí je více léčivé než jedovaté

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Vitalia.cz: Znáte „černý detox“? Ani to nezkoušejte

Znáte „černý detox“? Ani to nezkoušejte

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

DigiZone.cz: Rádio Šlágr má licenci pro digi vysílání

Rádio Šlágr má licenci pro digi vysílání

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy