Übersicht: ---------- Am 31.08.2010 09:54, schrieb Harald Oehlmann:
Ziel ist auf einem SuSE 11.3, der nur als Router und Maskerading Firewall fungiert (im folgenden *Router* genannt), mit 2 DSL-Verbindungen via pppoe und einer Netzwerkverbindung zu einem Server (im folgenden *Server* genannt) mit einem OpenVPN Server, die VPN-Pakete über die eine dsl- und die restlichen Pakete über die andere dsl-Verbindung zu routen.
Auf dem Router ist: - dsl0 (via eth1): T-COM SDSL mit fester IP 8.8.8.8 - dsl1 (via eth2): T-COM ADSL mit fester IP 9.9.9.9 (beide haben kein Gateway, da pppoe) - eth0: zum Server mit IP 192.168.201.2
Das dsl0 soll nur für VPN genutzt werden. Hier sollen sich unsere Home-Offices Verbinden. dsl1 soll all unseren Internetverkehr abwickeln.
vpn nutzt udp Port 443.
Da ich auf dem Router-PC es nicht hin bekommen habe, Pakete für udp port 443 eine andere Route zu geben (siehe Post vom 31.8.2010 9:54) (ich hätte dafür die SuSEFirewall analysieren müssen), habe ich jetzt folgende Lösung implementiert: Auf dem Server wird auf das Ethernetinterface eine zweite IP-Adresse gelegt. Dieses wird nur vom OpenVPN Service genutzt. Der Router schickt via Port Forward alle VPN-Pakete zu der zweiten IP-Adresse. Alle Daten von der zweiten IP-Adresse werden via dsl0 geroutet. Die erste wird via dsl1 geroutet. Vorgehensweise: --------------- 1) Servereinrichtung 1.1) Server IP alias YaST->Netzwerkgeräte->Netzwerkeinstellungen-> <Schnittstelle zum Router>[Bearbeiten] (hat bei mir IP: 192.168.201.147) ->Zusätzliche Adressen [Hinzufügen] Aliasname: 1 (wird hinterher hinter denn Gerätenamen gehängt) IP-Adresse: 192.168.201.148 (wird in diesem Text *zweite IP-Adresse* genannt) Netzmaske:/24 (die selbe wie die primäre Adresse) 1.2) OpenVPN auf zweites Interface In Datei "/etc/openvpn/server.conf" die zweite IP-Adresse als Server-Adresse hinzufügen: "local 192.168.201.148" (ohne diese Zeile sendet der Server Pakete, die via 192.168.201.148 empfangen wurden munter über die erste IP-Adresse (192.168.201.147) zurück) (Wenn man möchte, daß OpenVPN auf beiden Schnittstellen antwortet, könnte man einen zweiten Server einrichten) 2) Routereinrichtung 2.1) Den Default route via dsl1 setzen: YaST->Netzwerkgeräte->DSL->dsl0/1[Ändern]->3 Seiten weiter->[IP-Details]: für dsl0: Option "Standardroute" aus, für dsl1 an 2.2) In Firewall Weiterleitung aktivieren: YaST->Sicherheit->Firewall->Masquerading->Anfrage an Masqueraded IP umleiten[Hinzufügen] Quell-Netzwerk: 0/0 (von jedem im Internet) Benötigte IP: 8.8.8.8 (feste IP von dsl0 im Internet) Protokoll: UDP Benötigter Port: 443 An Masquerading IP umleiten: 192.168.201.148 (die zweite IP-Adresse) An Port umleiten: 443 2.3) Eine neue Routing-Tabelle mit dem Namen "dsl0" aufsetzen und diese für Pakete *von* der zweiten IP-Adresse nutzen. Die neue Tabelle ist identisch zur Standardtabelle, bis auf die Default Route, die auf dsl0 zeigt. 2.3.1) Routing-Tabellennamen anlegen An Datei /etc/iproute2/rt_tables anhängen: (<tab> ist der Tabulator) 1<tab>dsl0 2.3.2) Script einbinden, das beim dsl-connect das routing konfiguriert. Dafür zu den Dateien /etc/sysconfig/networt/ifcfg-dsl0 und /etc/sysconfig/networt/ifcfg-dsl0 hinzufügen: POST_UP_SCRIPT='postup-dsl01' (bei solchen Sachen immer darauf achten, daß jede Zeile (und auch die letzte) mit "<lf>" abgeschlossen ist). 2.3.3) Script schreiben und ausführbar machen Folgende Datei in /etc/sysconfig/networt/scripts/postup-dsl01 ablegen: #! /bin/bash PATH="/sbin:/bin:/usr/sbin:/usr/bin" set -x INTERFACE=$2 DSL0_IP="8.8.8.8" ALIAS_IP="192.168.201.148" # Aufbau: table dsl0 # Kopiere die main Tabelle ausser der default-route ip route show table main | grep -vE "^default" \ | while read ROUTE ; do ip route replace table dsl0 $ROUTE done # Setze default route auf dsl0 # (einziger Unterschied zu table main) if [ "${INTERFACE}" = "dsl0" ] ; then ip route replace default dev dsl0 table dsl0 src $DSL0_IP fi IP_RULE_SHOW=$( ip rule show) echo ${IP_RULE_SHOW} | grep -q "2000:" || \ ip rule add from $ALIAS_IP table dsl0 prio 2000 ip route flush cache -EOF- und ausführbar machen: chmod a+x /etc/sysconfig/networt/scripts/postup-dsl01 Bemerkungen: ------------ Erstmal einen großen dank an Lars Müller für sein Beispielskript, was hier schamlos abgewandelt wurde. Sein Wunsch nach einem generischen Script ist hier leider nicht in Erfüllung gegangen. Es bleibt also spannend. Einiges zum Skript: - Man das "set -x" löschen, sobald man genug von Debug-Ausgaben hat. - Meine Main Routing Table sieht so aus (Mit Buchstaben zum späteren referenzieren): # ip route list table main (a)9.9.9.23 dev dsl1 proto kernel scope link src 9.9.9.9 (b)8.8.8.44 dev dsl0 proto kernel scope link src 8.8.8.8 (c)192.168.201.0/24 dev eth0 proto kernel scope link src 192.168.201.2 (d)127.0.0.0/8 dev lo scope link (e)default dev dsl1 scope link - wird ein dsl device geschlossen, so werden ja alle Referenzen aus den Routing-Tabellen gelöscht. Man kann auch nur Sachen anlegen, wo die Devices wirklich existieren. Deshalb lasse ich das Skript bei den Connects von beiden Schnittstellen laufen. Wenn dsl1 Connected, so erscheinen eben erst die dsl1-spezifischen Sätze in der Main-Tabelle (a,e). - Ich kopiere die Main Routing Tabelle, da sich die Ziele der pppoe-Tunnels (9.9.9.23 in (a) und 8.8.8.44 in (b)) pro Verbindung ändern. Ich nutze "ip route replace" (und nicht add), damit es keine Fehlermeldungen gibt und ein Existenztest mit grep mir zu schwierig war. (Trick von http://linux-ip.net/html/adv-multi-internet.html Ex1.1) - Der Default route wird in die Tabelle dsl0 nur gesetzt, wenn gerade dsl0 connected. - Damit die Regel verwendet wird ist nötig: ip rule add from 192.168.201.148 table dsl0 pri 2000 Hier wird also gesagt: Pakete *von* dieser IP werden (zuerst) mit der Routingtabelle dsl0 geroutet. Falls Device dsl0 nicht up ist, existiert kein Default route und es wird an main weiter gegeben, womit sie dann via dsl1 geroutet werden. Falls dsl0 up ist steht dort ein default route auf dsl0 und alles purzelt da raus. Die Priorität muß zwischen 2 und 65534 liegen. Diesen Befehl könnte man schon ausführen, während das Routing beim Systemstart eingerichtet würde. Er darf eben nicht zweimal ausgeführt werden. Deshalb wird vorher geprüft, ob schon eine Regel mit der Priorität 2000 existiert (also der String "2000:" von "ip rule show" zurück gegeben wird. Danke an alle, Harald -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org