Linux jako router: Mam 3 dostawców Internetu, każdy z własnym modemem.
Dostawca1 , czyli adres bramy 192.168.1.1
Połączony z routerem linux eth1 /192.168.1.2
Dostawca2 , adres bramy 192.168.2.1
Połączony z routerem linux eth2 /192.168.2.2
Dostawca3 , adres bramy 192.168.3.1
Połączony z routerem linux eth3 /192.168.3.2
________
+------------+ /
| | |
+----------------------+ Provider 1 +--------|
__ |192.168.1.2 |192.168.1.1 | /
___/ \_ +------+-------+ +------------+ |
_/ \__ | eth1 | +------------+ /
/ \ eth0| |192.168.2.2 | | |
|Client network -----+ ROUTER eth2|--------------+ Provider 2 +------| Internet
\10.0.0.0/24 __/ | | |192.168.2.1 | |
\__ __/ | eth3 | +------------+ \
\___/ +------+-------+ +------------+ |
|192.168.3.2 | | \
+----------------------+ Provider 3 +-------|
|192.168.3.1 | |
+------------+ \________
Chciałbym skierować klientów w sieci 10.0.0.0/24 według źródłowego adresu IP do różnych bram.
Interfejs do sieci klienta to eth0 /10.0.0.1, która jest bramą domyślną dla wszystkich klientów.
Na przykład:
10.0.0.11 powinien zostać przekierowany do Provider1 @ eth1
10.0.0.12 powinien zostać przekierowany do Provider2 @ eth2
... i tak dalej ...
Myślę, że muszę użyć ip route
i iptables
do SNAT, ale nie wiem dokładnie, jak to zrobić.
Oto skrypt, który mam do tej pory.
Przekazywanie IPv4 jest włączone.
#!/bin/bash
# flush tables
ip route flush table connection1
ip route flush table connection2
ip route flush table connection3
# add the default gateways for each table
ip route add table connection1 default via 192.168.1.1
ip route add table connection2 default via 192.168.2.1
ip route add table connection3 default via 192.168.3.1
# add some IP addresses for marking
iptables -t mangle -A PREROUTING -s 10.0.0.11 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -s 10.0.0.12 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -s 10.0.0.13 -j MARK --set-mark 3
# add the source nat rules for each outgoing interface
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.1.2
iptables -t nat -A POSTROUTING -o eth2 -j SNAT --to-source 192.168.2.2
iptables -t nat -A POSTROUTING -o eth3 -j SNAT --to-source 192.168.3.2
# link routing tables to connections (?)
ip rule add fwmark 1 table connection1
ip rule add fwmark 2 table connection2
ip rule add fwmark 3 table connection3
#default route for anything not configured above should be eth2
Odpowiedzi:
Oto podobna konfiguracja z jednego z naszych routerów (z pominięciem niektórych nieistotnych rzeczy). Pamiętaj, że obsługuje to również połączenia przychodzące .
Zwróć uwagę na użycie zmiennych zamiast zakodowanych liczb znaczników. O wiele łatwiejsze w utrzymaniu! Są one przechowywane w osobnym skrypcie i pochodzą z. Nazwy tabel są skonfigurowane w
/etc/iproute2/rt_tables
. Nazwy interfejsów są ustawione w/etc/udev/rules.d/70-persistent-net.rules
.I zasady:
Tabele routingu są konfigurowane w
/etc/network/interfaces
taki sposób, że usunięcie interfejsu powoduje zmianę na inną:Uwaga: Jeśli robisz filtrowania oraz (czego zapewne są) będzie trzeba także dodać odpowiednie reguły
FORWARD
doACCEPT
ruchu. Specjalnie dla każdego ruchu przychodzącego.źródło
ip rule add from 10.0.0.0/24 pref 1400 lookup eth2
i tworząc wyjątki później.