Mam dwa połączenia internetowe od dwóch różnych dostawców usług internetowych i muszę zrównoważyć ruch przychodzący do i z mojej sieci między tymi dwoma dostawcami usług internetowych. Używam Debian GNU / Linux.
Moja konfiguracja jest taka -
eth0
(192.168.0.0/24) - Sieć lokalna
eth1
(192.168.1.0/24) - ISP nr 1
eth2
(192.168.2.0/24) - ISP nr 2
Moja sieć lokalna jest podłączona do tego serwera przez eth0, a skrzynka to serwer DHCP cum Gateway dla wszystkich komputerów w sieci LAN.
Serwer musi wykonać równoważenie obciążenia między dwoma dostawcami usług internetowych, a także musi wykonać NAT.
Postępowałem zgodnie z instrukcjami routingu na lartc.org, ale nadal potrzebuję instrukcji, aby poprawnie wykonać NAT.
Każda pomoc będzie mile widziana.
PS - Wiem o pFsense, ale muszę używać Linuksa.
źródło
Odpowiedzi:
Przeprowadziłem równoważenie obciążenia przy użyciu metod lartc.org i iptables , i stwierdziłem, że metoda iptables jest łatwiejsza do zrozumienia i implementacji. Jedynym minusem jest to, że potrzebujesz dość nowej wersji iptables, aby móc korzystać z modułu statystycznego
Załóżmy kilka rzeczy:
LAN: eth0: 192.168.0.1/24
ISP1: eth1: 192.168.1.1/24, brama: 192.168.1.2/24
ISP2: eth2: 192.168.2.1/24, brama: 192.168.2.2/24
Oto, jak bym to zrobił za pomocą metody iptables:
Tabele tras
Najpierw edytuj / etc / iproute2 / rt_tables, aby dodać mapę między numerami tabel tras i nazwami dostawców usług internetowych
Tak więc tabela 10 i 20 dotyczą odpowiednio ISP1 i ISP2. Muszę wypełnić te tabele trasami z tabeli głównej tym fragmentem kodu (który wziąłem z hxxp: //linux-ip.net/html/adv-multi-internet.html)
I dodaj domyślną bramę do ISP1 poprzez bramę tego ISP1:
Zrób to samo dla ISP2
Więc teraz mam 2 tabele tras, po 1 dla każdego dostawcy usług internetowych.
Iptables
OK, teraz używam iptables do równomiernej dystrybucji pakietów do każdej tabeli tras. Więcej informacji o tym, jak tę pracę można znaleźć tutaj ( http://www.diegolima.org/wordpress/?p=36 ) i tutaj ( http://home.regit.org/?page_id=7 )
NAT
Cóż, NAT jest łatwy:
źródło
Odpowiedź mefata bardzo mi pomogła, ale zamiast jednorazowej kopii wszystkich reguł tabeli głównej do dwóch tabel ISP lepszym rozwiązaniem może być użycie reguły prio do dodania domyślnych reguł po tabeli głównej.
Skonfiguruj / etc / iproute2 / rt_tables w normalny sposób:
Zauważ, że
Pokazuje reguły 0-> lokalne, 32766-> główne i 32767-> domyślne. Zobacz
man ip
po więcej szczegółów.Zasadniczo proces routingu będzie działał od reguł niskich do wysokich prio ... ale 32767 nie jest najwyższą regułą #. Więc jeśli główna tabela routingu nie ma domyślnej trasy (ale może zawierać wszystkie rodzaje dynamicznie zmieniających się tras dla VPN itp.), To jeśli dopasowanie nie zostanie wykonane, przechodzi do domyślnej (zwykle pustej), a następnie szuka wyższych reguł prio.
Zobacz sekcję „rzut” tutaj: http://linux-ip.net/html/routing-tables.html
Więc teraz skonfiguruj
i aby upewnić się, że są oglądane po głównym stole:
Posługiwać się
jeszcze raz, aby sprawdzić, czy te zasady są wyższe niż prio
Następnie użyj mangowania CONNMARK, jak mefat powiedział:
Warto zwrócić uwagę: pppd potrzebuje
nodefaultroute
inaczej konfiguruje się w main; kiedy urządzenie uruchomi się ponownie, tabele ISP1 / ISP2 są czyszczone, więc należy je przywrócić za pomocą skryptu.Używam skryptu w /etc/ppp/ip-{up,down}.d/dual-routing
Jest to równoważenie obciążenia oparte na połączeniu, więc zamierzam rozważyć użycie obciążenia do monitorowania i zastąpienia reguły statystyk:
iptables -t mangle -R PREROUTING <n>
z przestrzeni użytkownika. Więc jeśli na jednym połączeniu istnieje długotrwałe pobieranie, a drugie połączenie jest lekko obciążone, powinniśmy preferować lekko obciążone połączenie.źródło