Diesmal geht es etwas um:
– Policy-Based Routing (PBR)
– Equal-cost multi-path routing (ECMP)
– Forwarding Information Base (FIB)
– IPFW Layer2 Regeln
Policy-Based Routing ermöglicht zusätzlich zum klassischen Routing (anhand der Zieladresse per „Default, Routing Protocol oder statischer Route) auch ein elementbasiertes Routing z.B. anhand der „Source Address“, ToS (Type of Service), Protocol, Port, usw. …
Mitte 2013 hatte ich ein kurzes HowTo: OpenBSD Multipath NAT Routing erstellt, „Equal-cost multi-path routing“ ist unter FreeBSD um einiges einfacher
FreeBSD unterstützt bis zu 16 verschiedene Routingtabellen, FIBs eigenen sich gut bei JAIL Systemen ohne VIMAGE Kernelsupport
PBR, ECMP, FIB und IPFW Layer2 Filtering
Punkt 1 zu Policy-Based Routing
der Custom-Kernel kann z.B. folgende options zusätzlich besitzen:
$ options IPFIREWALL # enables IPFW options IPFIREWALL_VERBOSE # enables logging for rules with log keyword options IPFIREWALL_VERBOSE_LIMIT=256 # limits number of logged packets per-entry options IPFIREWALL_DEFAULT_TO_ACCEPT # sets default policy to pass what is not explicitly denied ### options IPDIVERT # enables NATd Support options IPFIREWALL_NAT # IPFW in-Kernel NAT support options LIBALIAS # required for in-Kernel NAT / replacement for NATd $
options IPFIRWALL_FORWARD ist deprecated. Der fwd Code ist mit in ipfw enthalten.
Punkt 1.1 PBR Beispiel:
$ /sbin/ipfw add fwd 172.31.254.254 tcp from any to any 80 $
Punkt 2 zu Equal-cost multi-path routing
der Custom-Kernel benötigt folgende option:
$ options RADIX_MPATH # Equal-cost multi-path routing (ECMP) $
Punkt 2.1 mehrere ECMP Routen definieren
$ route add -net 172.31.253.0/24 172.31.255.1 route add -net 172.31.253.0/24 172.31.255.2 $
Gewichtung ändern:
$ route change -weight 10 172.31.253.0/24 172.31.255.2 route show 172.31.253.0/24 172.31.255.2 $
Punkt 3 zu Forwarding Information Base
Wer mit der Stabilität von VIMAGE (Jail Host) Systemen unzufrieden ist und nur eine Handvoll Jails laufen hat, jedoch die IP Aliases unterschiedlichen Broadcastdomänen zuweisen möchte (mit diversen default gateways), der kann pro Applikation/Jail eine FIB zuweisen
der Custom-Kernel benötigt folgende option:
$ options ROUTETABLES=15 # max 16 FIB (0-15/Forward Information Base/multiple routing tables) support $
Punkt 3.1 FIB pro Application/JAIL
für Routingtabelle 2:
$ vi /etc/rc.conf # apache24_enable="YES" apache24_fib="1" # $
für Routingtabelle 3:
$ vi /usr/local/etc/ezjail/test1.domain.tld # export jail_test1_domain_tld_fib="2" # $
für Routingtabelle 4:
$ setfib 3 netstat -rn $
Hinweis: Eine Kombination aus ROUTETABLES und VIMAGE Kernel kann zu unverhofften Systemabstürzen führen!
Punkt 4 IPFW Layer2 Filter Beispiel für komplexe Bridge Zones
erlaubt nur validen Traffic für das gewünschte Interface mit Bindung an die IP und MAC Adresse:
$ # filter for vswitch26 (JAIL: test26.domain.tld) ### / ipv4 add 05001 allow ip4 from 148.XXX.XXX.XXX to any layer2 MAC any 02:FF:FF:FF:FF:FF via epair49b add 05002 allow ip4 from 148.XXX.XXX.XXX to any layer2 MAC any 02:FF:FF:FF:FF:FF via vswitch26 add 05003 allow ip4 from 148.XXX.XXX.XXX to any layer2 MAC any 02:FF:FF:FF:FF:FF via epair89b add 05011 allow ip4 from any to 148.XXX.XXX.XXX layer2 MAC 02:FF:FF:FF:FF:FF any via epair49b add 05012 allow ip4 from any to 148.XXX.XXX.XXX layer2 MAC 02:FF:FF:FF:FF:FF any via vswitch26 add 05013 allow ip4 from any to 148.XXX.XXX.XXX layer2 MAC 02:FF:FF:FF:FF:FF any via epair89b add 05097 deny ip4 from any to any layer2 MAC any any via epair49b add 05098 deny ip4 from any to any layer2 MAC any any via vswitch26 add 05099 deny ip4 from any to any layer2 MAC any any via epair89b ### / ipv6 add 05101 allow ip6 from 2a01:AAAA:AAAA:AAAA::26 to any layer2 MAC any 02:FF:FF:FF:FF:FF via epair49b add 05102 allow ip6 from 2a01:AAAA:AAAA:AAAA::26 to any layer2 MAC any 02:FF:FF:FF:FF:FF via vswitch26 add 05103 allow ip6 from 2a01:AAAA:AAAA:AAAA::26 to any layer2 MAC any 02:FF:FF:FF:FF:FF via epair89b add 05111 allow ip6 from any to 2a01:AAAA:AAAA:AAAA::26 layer2 MAC 02:FF:FF:FF:FF:FF any via epair49b add 05112 allow ip6 from any to 2a01:AAAA:AAAA:AAAA::26 layer2 MAC 02:FF:FF:FF:FF:FF any via vswitch26 add 05113 allow ip6 from any to 2a01:AAAA:AAAA:AAAA::26 layer2 MAC 02:FF:FF:FF:FF:FF any via epair89b add 05151 allow ip6 from fe80::EE:EE:EEEE:890a to any layer2 MAC any 02:FF:FF:FF:FF:FF via epair49b add 05152 allow ip6 from fe80::EE:EE:EEEE:890a to any layer2 MAC any 02:FF:FF:FF:FF:FF via vswitch26 add 05153 allow ip6 from fe80::EE:EE:EEEE:890a to any layer2 MAC any 02:FF:FF:FF:FF:FF via epair89b add 05161 allow ip6 from any to fe80::EE:EE:EEEE:890a layer2 MAC 02:FF:FF:FF:FF:FF any via epair49b add 05162 allow ip6 from any to fe80::EE:EE:EEEE:890a layer2 MAC 02:FF:FF:FF:FF:FF any via vswitch26 add 05163 allow ip6 from any to fe80::EE:EE:EEEE:890a layer2 MAC 02:FF:FF:FF:FF:FF any via epair89b add 05197 deny ip6 from any to any layer2 MAC any any via epair49b add 05198 deny ip6 from any to any layer2 MAC any any via vswitch26 add 05199 deny ip6 from any to any layer2 MAC any any via epair89b # $
That’s FreeBSD