<<[[:TableOfContents|TableOfContents]]>> ====== Konfiguration unserer Public IP Gateways ====== :!: 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|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|CategoryDocumentation]]