Następujący problem: host z systemem Linux potrzebuje dwóch interfejsów w tej samej podsieci, dodatkowo ruch do wskazanych sieci zewnętrznych ma odbywać się przez konkretny interfejs z jego adresem jako adres źródłowy.
Adresacja IP:
10.10.10/24 – sieć w której znajduje się host.
10.10.10.1 – gateway dla sieci
10.10.10.100 – adres interfejsu eth0
10.10.10.101 – adres interfejsu eth1
1.1.1/24 – sieć do której ruch ma wychodzić przez eth0
2.2.2/24 – sieć do której ruch ma wychodzić przez eth1
Po pierwsze ustawiamy parametr jądra net.ipv4.conf.default.arp_filter=1.
Dzięki temu system będzie odpowiadał odpowiednim adresem MAC na otrzymane zapytania ARP o każdy z użytych na interfejsach (eth0,eth1) adresów IP.
# sysctl -w net.ipv4.conf.default.arp_filter=1 net.ipv4.conf.default.arp_filter = 1
Ustawiamy parametr na stałe
# echo "net.ipv4.conf.all.arp_filter = 1" >> /etc/sysctl.conf
Tworzymy osobną tablicę rutingu dla każdego z interfejsów dopisując na koniec pliku /etc/iproute2/rt_tables 2 linie:
# cat /etc/iproute2/rt_tables # # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep 1 eth0_RT 2 eth1_RT
Ustawiamy trasy
1. Dla ruchu wychodzącego przez eth0:
ip route add 10.10.10.0/24 dev eth0 src 10.10.10.100 table eth0_RT ip route add default via 10.10.10.1 dev eth0 table eth0_RT #siec 1.1.1/24 przez eth0 ip route add 1.1.1.0/24 via 10.10.10.1 dev eth0 src 10.10.10.100 ip route add 10.10.10.0/24 dev eth0 src 10.10.10.100 #domyslnie ruch bedzie wychodzil przez interfejs eth0 ip route add default via 10.10.10.1 ip rule add from 10.10.10.100 table eth0_RT
2. Dla ruchu wychodzącego przez eth1
ip route add 10.10.10.0/24 dev eth1 src 10.10.10.101 table eth1_RT ip route add default via 10.10.10.1 dev eth1 table eth1_RT #siec 2.2.2/24 przez eth1 ip route add 2.2.2.0/24 via 10.10.10.1 dev eth1 src 10.10.10.101 ip rule add from 10.10.10.101 table eth1_RT
Trasy na stałe możemy zapisać w plikach /etc/sysconfig/network dla Centos/RH lub w /etc/network/interfaces w Debianie.