ausgang:
maschine
netz1 auf eth0:
ip 172.16.2.15
gw: 172.16.2.1
netz: 172.16.2.0/24 netzmaske 255.255.255.0
broadcast: 172.16.2.255
netz2 auf eth1:
ip: 172.28.0.199
gw: 172.29.0.3
netz: 172.28.0.0/16 netzmaske 255.255.0.0
broadcast 172.16.255.255
<---------------------- intern---------> <---- extern ----->
<--- maschine----->
+-----------------+
| 172.16.2.15 | nic 1 = eth1 ---- gwb nat auf -- 132.223.121.115
+-----------------+ 172.16.2.1
| 172.28.0.199 | nic 0 = eth0 ---- gwa nat auf -- 112.113.114.99
+-----------------+ 172.28.0.3
benoetigte routing table:
in Datei /etc/sysconfig/static-routes:
any net 172.16.2.0 netmask 255.255.255.0 gw 172.16.2.1 dev eth1
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
172.16.2.0 172.16.2.1 255.255.255.0 UG 0 0 0 eth1
172.16.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
172.28.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 172.28.0.3 0.0.0.0 UG 0 0 0 eth0
lt. der table wird 172.16.2.15 zwar nach 172.16.2.1 geschickt,
172.16.2.1 aber auf auf 0.0.0.0,
( default gw ) und das bei 172.28.0.3 raus. -> :(
die routing anweisung
$ route add default gw 172.16.2.1
hilft auch nichts.
das kannst du mit
$ tcpdump -ni eth0 80
$ tcpdump -ni eth1 80
beobachten.
daher muss mit iproute2 sichergestellt werden, dass packete, welche
auf eth1 hereinkommen auch aut eth1 rausgehen und gleiches gilt
fuer eth0.
vorab: im kernel muss aktiviert sein
CONFIG_IP_ADVANCED_ROUTER - IP: advanced router
CONFIG_IP_MULTIPLE_TABLES - IP: policy routing
bestehende rules sind :
$ ip rule ls
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
unser problemn besteht weil das ganuz routing in der main tabelle liegt.
jetzt werden mittels command "ip" - zwei weitere tables angelegt:
gwa fuer provider 1 auf eht0
gwb fuer provider 2 auf eth1
( ip = TCP/IP interface configuration and routing utility )
editiere /etc/iproute2/rt_tables
$ vi /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
# note: < 253!
#
#1 inr.ruhep
# scan added 200,201
200 gwa
201 gwb
# eof /etc/iproute2/rt_tables
die neuen tabellen werden mit regeln befuellt.
$ ip route add 172.16.2.0/24 dev eth1 src 172.16.2.15 table gwb
$ ip route add default via 172.16.2.1 table gwb
$ ip route add 172.16.2.0/24 dev eth1 src 172.16.2.15
$ ip rule add from 172.16.2.15 table gwb
$ ip route add 172.28.0.0/16 dev eth0 src 172.28.0.199 table gwa
$ ip route add default via 172.28.0.3 table gwa
$ ip route add 172.28.0.0/16 dev eth0 src 172.28.0.199
$ ip rule add from 172.28.0.199 table gwa
# und das set zum laufen gebracht:
$ ip route flush cache
ergibt:
$ ip rule ls
0: from all lookup local
32764: from 172.28.0.199 lookup gwa
32765: from 172.16.2.15 lookup gwb
32766: from all lookup main
32767: from all lookup default
$ ip route show
172.16.2.0/24 via 172.16.2.1 dev eth1
172.16.2.0/24 dev eth1 scope link
172.28.0.0/16 dev eth0 scope link
127.0.0.0/8 dev lo scope link
default via 172.28.0.3 dev eth0
$ ip route show table gwa
172.28.0.0/16 dev eth0 scope link src 172.28.0.199
default via 172.28.0.3 dev eth0
$ ip route show table gwb
172.16.2.0/24 dev eth1 scope link src 172.16.2.15
default via 172.16.2.1 dev eth1
womit sicher gestellt ist, dass packete, die bei eth1 hereinkommen, auch wieder bei eth1 hinausgehen und vice versa fuer eth0
wichtig:
$ cat /proc/sys/net/ipv4/ip_forward
0
stellt sicher, dass packete zwischen eth0 und eth1 NICHT forgewarded werden,
und somit keine direkte verbindung zwischen den zwei netzen
hergestellt werden kann.
weiterfuehrende lektuere:
Advanved Routing HOWTO
ip-cref.txt = ps2ascii /usr/share/doc/iproute-2.6.9/ip-cref.ps
mail me no spam please :)