Benutzer-Werkzeuge

Webseiten-Werkzeuge


de:sysadmin:tools:iproute2-linux-policy-routing

iproute2 - Linux Policy Routing

(Stand ≤2009)

Motivation

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.

/etc/conf.d/net

(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"

/etc/conf.d/local.start

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

Befehle, um Policy-Routing anzuzeigen

Grund-Kommando: ip

Hilfe und Info: ip help, ip rule help, ip route help, man-Page, http://www.policyrouting.org/iproute2.doc.html

ip rule

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"

ip route ls

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

ip route ls table vlan23

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

debugging - wohin würde geroutet werden? - ip route get

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
1)
danke Bernhard
de/sysadmin/tools/iproute2-linux-policy-routing.txt · Zuletzt geändert: 2019-09-26 13:42 von hella

Seiten-Werkzeuge