[[: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]]