(Stand ≤2009)
Im Spezial-Netz liegen die Maschinen-IP-Adressen (Backnet 10.42.0.0/22) und Dienstadressen (Frontnet 10.23.0.0/21) auf verschiedenen Netzwerkschnittstellen und VLANs.
Die Maschinenadresse muss via Firewall (10.42.0.1) im Backnet mit den Hausnetzen kommunizieren.
Dienste müssen primär mit dem Loadbalancer (10.23.0.1) im Frontnet und via Loadbalancer mit dem Internet kommunizieren. Nur aussen auf dem Loadbalancer liegen "richtige" Internet-IP-Adresse die dann auf mehrere Frontnet-Dienste verteilt werden. Da das Frontnet einen privaten IP-Adressraum hat, können diese Dienste nicht direkt aus dem Internet einzeln abgerufen werden)
(Bis hierher auch mit herkömmlichen Routing umsetzbar)
Um die einzelnen Dienste aus dem Haus-Netz zu testen, muss man aber deren Frontnet-Adresse ansprechen. Hier funktioniert herkömmliches Routing nicht mehr, denn jetzt muss der Rechner wissen, ob die Rückroute aus Frontnet- oder Backnet-Interface erfolgen soll - das geht nur bei Source-Based Routing.
(Beispiel nachtigall, ein Gentoo-Rechner)
# Das init-Skript soll die Netz-Konfiguration mittels ifconfig und nicht # mittels iproute2 (ip) vornehmen, damit wir die Netzaliase auch per ifconfig sehen. modules=( "ifconfig" ) # Die Domain, in der der Rechner steckt. dns_domain_lo="i.rz.example.com" # eth0 - Backnet config_eth0=( "10.42.1.11/22" ) # eth1 - Frontnet config_eth1=( "10.23.0.35/21" ) # Default Route routes_eth0=( "default via 10.42.0.1" ) # Der DNS-Server dns_servers_eth0=("10.42.1.2 10.42.55.9") # Die Domain dns_domain_eth0="i.rz.example.com" # Fuer die /etc/resolv.conf der Searchpath dns_search_eth0="rz.example.com i.rz.example.com e.rz.example.com example.com"
Sollte auf allen Maschinen gleich anwendbar sein
Voraussetzung: eth1 hängt am Frontnet
# This is a good place to load any misc programs # on startup (use &>/dev/null to hide output) ##### Policy Routing ## default route via backnet-adresse der firewall ## (wird in /etc/conf.d/net eingestellt) #ip route add default via 10.42.0.1 ## spezielle routing-table vlan23 fuer die frontnet-adresse ## dieser maschine konfigurieren # Um die routing-tabelle mit Namen vlan23 ansprechen zu # koennen, muss vorher in der Datei eine Zeile # /etc/iproute2/rt_tables eingetragen werden: # 23 vlan23 # ueber welche schnittstelle sind andere rechner (vor allem # der LB) im frontnet erreichbar? ip route add 10.23.0.0/21 dev eth1 table vlan23 # im frontnet gibts ein anderes default-gateway (den Loadbalancer) ip route add table vlan23 default via 10.23.0.1 # aber: alle privaten Netze (also Hausnetz & Co) # sollen ueber die Frontnet-Adresse der Firewall geroutet # werden - da dass alles private Adressen sind, kann man das # in 3 Zeilen abhandeln: ip route add 10.0.0.0/8 table vlan23 via 10.23.0.3 ip route add 172.16.0.0/12 table vlan23 via 10.23.0.3 ip route add 192.168.0.0/16 table vlan23 via 10.23.0.3 # ip rule, mit der alle pakete von frontnet-adressen dieser # maschine in die spezielle routing-tabelle gesteckt werden: ip rule add from 10.23.0.0/21 lookup vlan23 ##### End of Policy Routing
Grund-Kommando: ip
Hilfe und Info: ip help
, ip rule help
, ip route help
, man-Page, http://www.policyrouting.org/iproute2.doc.html
Welche Routing-Tabellen werden angesprochen?
nachtigall:/etc/conf.d # ip rule 0: from all lookup local 32765: from 10.23.0.0/21 lookup vlan23 32766: from all lookup main 32767: from all lookup default
hier zeigt sich: neben der Hauptroutingtabelle (main) und sonstigen typischen Tabellen (local und default) gibt es hier auch eine Tabelle namens "vlan23"
kurz: ip route
, lang: ip route ls table main
nachtigall:/etc/conf.d # ip route ls table main 10.42.0.0/22 dev eth0 proto kernel scope link src 10.42.1.11 10.23.0.0/21 dev eth1 proto kernel scope link src 10.23.0.35 127.0.0.0/8 dev lo scope link default via 10.42.0.1 dev eth0
nachtigall:/etc/conf.d # ip route ls table vlan23 10.23.0.0/21 dev eth1 scope link 192.168.0.0/16 via 10.23.0.3 dev eth1 172.16.0.0/12 via 10.23.0.3 dev eth1 10.0.0.0/8 via 10.23.0.3 dev eth1 default via 10.23.0.1 dev eth1
bei den BSDs kennt der Kenner1) den Befehl route get
… das gibts auch für linux:
Wohin würde an das Ziel 8.8.8.8 geroutet werden, wenn die Quelladress 172.18.96.55 verwendet wird?
ip route get 8.8.8.8 from 172.18.96.55
gilt für alle Tipps, Tricks & Spickzettel:
dies sind einfache, teils banale Notizen für meinen persönlichen Gebrauch,
die hier eher zufällig auch öffentlich lesbar sind
(vielleicht hilft es ja jemandem weiter). Verwendung auf eigene Gefahr
Fehler-Hinweise, Dankesschreiben , etc. bitte an: web.21@unixwitch.de
weitere Tools / Spickzettel