<> = Konfiguration unserer Public IP Gateways = {i} Diese Dokumentation beschreibt die Konfiguration unserer Public IP Gateways. Details zu unseren Public IPs können auf der Seite [[PublicIP]] gefunden werden. Informationen zu allen anderen Servern kann auf der Seite ServerDokumentation gefunden werden. == Allgemeines == Im großen und Ganzen erfüllen unsere Public IP Gateways 3 Aufgaben: * Announcement unseres Public IP Address Bereich per BGP im Internet * Announcement der Gateway Anycast Adresse (10.12.34.56) im Funkfeuer-Netz * Ein und Auspacken der Pakete in die intern verwendeten IP-IP Tunnel Für ersteres wird ''quagga'' verwendet. Der zweite Punkt wird von ''olsrd'' erledigt und letzeres ein Konstrukt aus Policy Routing und IP-IP Tunnel. == Quagga (BGP) == Auf unseren Gateways laufen 2 Daemons innerhalb von ''quagga'': ''zebra'' und ''bgpd''. Die konfigurationsdateien liegen in ''/etc/quagga''. Die empfohlene Art die Daemons zu steuern ist allerdings die ''vtysh''. Diese muss entweder als ''root'' gestartet werden oder von einem User der der Gruppe ''quaggavty'' angehört. Sollte das BGP Announcement aus irgendeinem Grund abgeschaltet werden sollte besser für die Dauer des Ausfalls ''olsrd'' entweder ganz beendet werden oder das Annoucement der Anycast Gateway Adresse deaktiviert werden. == olsrd == Die Konfigurationsdatei des Daemons ist unter ''/etc/olsrd/olsrd.conf'' zu finden. Auf ''gw-cc.ffgraz.net'' findet sich folgende Version: {{{ # # OLSR.org routing daemon config file # This file is shipped with Funkfeuer Graz Debian Packages # # Lines starting with a # are discarded # DebugLevel 0 IpVersion 4 Pollrate 0.025 FIBMetric "flat" RtTable 111 RtTableDefault 112 UseNiit no SmartGateway no Hna4 { # Anycast DNS 10.12.0.10 255.255.255.255 # Anycast Gateway 10.12.34.56 255.255.255.255 # Spektral/Housing Interconnect Subnet 10.12.208.0 255.255.255.224 # Loopback Address 193.33.150.1 255.255.255.255 } #Hna6 #{ #} UseHysteresis no TcRedundancy 2 MprCoverage 7 LinkQualityLevel 2 LinkQualityAlgorithm "etx_ff" LinkQualityAging 0.05 LinkQualityFishEye 1 LoadPlugin "olsrd_txtinfo.so.0.1" { PlParam "port" "2006" PlParam "Accept" "127.0.0.1" } LoadPlugin "olsrd_nameservice.so.0.3" { PlParam "name" "gw-cc.housing" PlParam "10.12.34.56" "Funkfeuer-Graz.gateway" PlParam "10.12.0.10" "dns.anycast" PlParam "hosts-file" "/var/run/olsrd.hosts" PlParam "resolv-file" "/var/run/olsrd.resolv" } InterfaceDefaults { HelloInterval 3.0 HelloValidityTime 125.0 TcInterval 2.0 TcValidityTime 500.0 MidInterval 25.0 MidValidityTime 500.0 HnaInterval 10.0 HnaValidityTime 125.0 } Interface "eth1" { Mode "ether" # LinkQualityMult 192.168.0.1 0.5 # LinkQualityMult default 0.8 } }}} Wichtig ist dabei das nebem dem Announcement der Anycast Gateway Adresse mittels ''!RtTable'' und ''!RtTableDefault'' die Policy Routing Fähigkeit von ''olsrd'' genutzt wird. Sollte aus irgendeinem Grund ''olsrd'' beendet werden oder das Anycast Announcement deaktiviert werden sollte besser auch das BGP Announcement abgeschaltet werden (zb durch stoppen von ''quagga''). == Firewall und Routing == Alle nötigen Konfigurationsscritte für ''iptables'' etc werden von dem Script ''/etc/init.d/routenfirewall'' erledigt. Damit dieses Script richtig arbeitet darf bei der Interface Konfiguration (''/etc/network/interfaces'') bei keinem Interface ein Gateway angegeben werden. Auf ''gw-cc.ffgraz.net'' findet sich folgende Version des Scriptes: {{{#!sh #! /bin/sh ### BEGIN INIT INFO # Provides: routenfirewall # Required-Start: $network $remote_fs $syslog # Required-Stop: $network $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: /etc/init.d/routenfirewall: configure advanced routing and firewall ### END INIT INFO # # Route and Firewall Script DEFAULT_GW=217.29.149.65 EXTERN_IFACE="eth0" OLSR_IFACES="eth1" PUBLIC_IFACE="public" PUBLIC_NET="193.33.150.0/23" ANYCAST_IP="10.12.34.56" UNREACHABLE_NETS="10.0.0.0/8 172.16.0.0/12 169.254.0.0/16 192.168.0.0/16 $PUBLIC_NET" OTHERGW_IP=193.33.151.1 case "$1" in start) ip route add default via $DEFAULT_GW table default ip rule add lookup main ip rule add lookup olsr ip rule add fwmark 2 lookup public-in ip rule del pref 32766 ip rule add pref 32766 fwmark 1 lookup olsr-default for i in $OLSR_IFACES; do iptables -t mangle -A PREROUTING -i $i -j MARK --set-mark 1 done iptables -t mangle -A PREROUTING -i $EXTERN_IFACE \! -d $OTHERGW_IP -j MARK --set-mark 2 for net in $UNREACHABLE_NETS; do ip route add unreachable $net done ip tunnel add $PUBLIC_IFACE mode ipip local $ANYCAST_IP ttl 255 ip link set up dev $PUBLIC_IFACE ip addr add dev $PUBLIC_IFACE $ANYCAST_IP/32 ip route add $PUBLIC_NET dev $PUBLIC_IFACE table public-in iptables -t mangle -A PREROUTING -i $PUBLIC_IFACE -j MARK --set-mark 0 ;; stop) ip rule del pref 32766 ip rule add pref 32766 lookup main ip rule del lookup main ip rule del lookup olsr ip rule del fwmark 2 lookup public-in ip route del default via $DEFAULT_GW table default ip route del $PUBLIC_NET dev $PUBLIC_IFACE table public-in for i in $OLSR_IFACES; do iptables -t mangle -D PREROUTING -i $i -j MARK --set-mark 1 done iptables -t mangle -D PREROUTING -i $EXTERN_IFACE -d \! 193.33.151.1 -j MARK --set-mark 2 for net in $UNREACHABLE_NETS; do ip route del unreachable $net done iptables -t mangle -D PREROUTING -i $PUBLIC_IFACE -j MARK --set-mark 0 ip tunnel del $PUBLIC_IFACE ;; *) echo "Usage: /etc/init.d/routenfirewall {start|stop}" exit 1 ;; esac exit 0 }}} und auf ''gw-mur.ffgraz.net'' folgende Version: {{{#!sh #! /bin/sh ### BEGIN INIT INFO # Provides: routenfirewall # Required-Start: $network $remote_fs $syslog # Required-Stop: $network $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: /etc/init.d/routenfirewall: configure advanced routing and firewall ### END INIT INFO # # Route and Firewall Script DEFAULT_GW="89.106.210.41" EXTERN_IFACE="eth0" OLSR_IFACES="eth1 eth2" PUBLIC_IFACE="public" PUBLIC_NET="193.33.150.0/23" ANYCAST_IP="10.12.34.56" UNREACHABLE_NETS="10.0.0.0/8 172.16.0.0/12 169.254.0.0/16 192.168.0.0/16 $PUBLIC_NET" MUR_NET="89.106.208.0/21" OTHERGW_IP="193.33.150.1" case "$1" in start) ip route add default via $DEFAULT_GW table default ip rule add lookup main ip rule add lookup olsr ip rule add fwmark 2 lookup public-in ip rule del pref 32766 ip rule add pref 32766 fwmark 1 lookup olsr-default for i in $OLSR_IFACES; do iptables -t mangle -A PREROUTING -i $i -j MARK --set-mark 1 done iptables -t mangle -A PREROUTING -i $EXTERN_IFACE \! -s $MUR_NET \! -d $OTHERGW_IP -j MARK --set-mark 2 for net in $UNREACHABLE_NETS; do ip route add unreachable $net done ip tunnel add $PUBLIC_IFACE mode ipip local $ANYCAST_IP ttl 255 ip link set up dev $PUBLIC_IFACE ip addr add dev $PUBLIC_IFACE $ANYCAST_IP/32 ip route add $PUBLIC_NET dev $PUBLIC_IFACE table public-in iptables -t mangle -A PREROUTING -i $PUBLIC_IFACE -j MARK --set-mark 0 ;; stop) ip rule del pref 32766 ip rule add pref 32766 lookup main ip rule del lookup main ip rule del lookup olsr ip rule del fwmark 2 lookup public-in ip route del default via $DEFAULT_GW table default ip route del $PUBLIC_NET dev $PUBLIC_IFACE table public-in for i in $OLSR_IFACES; do iptables -t mangle -D PREROUTING -i $i -j MARK --set-mark 1 done iptables -t mangle -D PREROUTING -i $EXTERN_IFACE \! -s 89.106.208.0/21 \! -d 193.33.150.1 -j MARK --set-mark 2 for net in $UNREACHABLE_NETS; do ip route del unreachable $net done iptables -t mangle -D PREROUTING -i $PUBLIC_IFACE -j MARK --set-mark 0 ip tunnel del $PUBLIC_IFACE ;; *) echo "Usage: /etc/init.d/routenfirewall {start|stop}" exit 1 ;; esac exit 0 }}} Damit diese Scripte funktionieren können müssen in der Datei ''/etc/iproute2/rt_tables'' die folgenden Einträge hinzugefügt werden: {{{ 100 public-in 111 olsr 112 olsr-default }}} ---- . CategoryDocumentation