.titleBar { margin-bottom: 5px!important; }

[Gelöst] Problem bei 2 openvpn configs im bridge-mode (tap)

Dieses Thema im Forum "Freetz" wurde erstellt von Pace, 19 Feb. 2009.

  1. Pace

    Pace Neuer User

    Registriert seit:
    29 Sep. 2005
    Beiträge:
    28
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    #1 Pace, 19 Feb. 2009
    Zuletzt bearbeitet: 19 Feb. 2009
    Ich habe ein Problem wenn ich 2 openvpn-services (also 2 configs) über das freetz-openvpn-webIF einrichten möchte.

    Nur eine der beiden Konfigurationen (nennen wir sie c1 und c2) funktioniert hierbei.

    Hintergrund: Ich möchte ein Einwah-Profil, bei dem ich nur in das private Netz gebridged werde (c1) und ein Profil bei auch die default route (0.0.0.0), also das Internet, über die VPN-Fritzbox geroutet wird (c2).

    c1 und c2 arbeiten im tap modus.
    Ich kann mich zu beiden verbinden und erhalte eine IP.
    Bei einem von beiden klappt auch der Datenverkehr (ping an fritzbox usw), beim anderen nicht.

    Ich habe festgestellt, wenn ich die openvpn-services über das web-IF starte und stoppe, immer nur die Konfiguration geht, die VOR der anderen gestatet wurde.
    Sprich starte ich erst c2, dann c1, dann geht de Datenverkehr bei c2, nicht aber bei c1.

    Ich schätze mal das könnte am bridging liegen.
    Wie funktioniert das im hintergrungd? Leg freetz für jede config im tap-modus einen eigenen tap-adapter an und bridged diesen mit dem lan-interface ?

    Hat jemand das gleiche problem oder vllt sogar eine lösung für mich (patch, script) ?

    Ich würde mich sehr freuen :)
    Viele Grüße,
    Patrick
     
  2. MaxMuster

    MaxMuster IPPF-Promi

    Registriert seit:
    1 Feb. 2005
    Beiträge:
    6,923
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Schreibst du noch kurz, welche Box und Freetz Version du nutzt?
    Hast du das Bridging von Hand in die ar7.cfg eingetragen?

    Seit Freetz R2393 gibt es einen Part in dem Startscript, welcher im Falle einer "TAP-Config" und vorhandenem "brctl" die vorhandenen Tap-Interfaces zum Interface "LAN" hinzufügt. Das könnte hier vielleicht ein Problem sein??

    Code:
    	if [ -n "`grep "dev tap" /mod/etc/${DAEMON}.conf`" -a -x "`which brctl`" ]; then
    		for i in "`ifconfig | sed -n 's/\(tap[0-9]\).*/\1/p'`"; do
    			 brctl addif lan $i
    		done
    	fi
    


    Jörg
     
  3. Pace

    Pace Neuer User

    Registriert seit:
    29 Sep. 2005
    Beiträge:
    28
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Hab ich ganz vergessen:

    Fritzbox 7270, freetz-devel-3086

    Das bridging hab ich nicht selbst eingetragen, das macht doch freetz für mich, oder?

    EDIT:
    ok, dann sollte dieser code wohl auch in meiner version drin sein.
    was dann das problem ist weiss ich nicht :/
     
  4. MaxMuster

    MaxMuster IPPF-Promi

    Registriert seit:
    1 Feb. 2005
    Beiträge:
    6,923
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    .... wie geschrieben, das ist prinzipiell zwar möglich, aber ein "relativ neues" Feature und das geht auch nur dann, wenn in deiner Firmware das Programm "brctl" drin ist...

    Könntest du mal die Ausgabe von "brctl show lan" posten?

    Sollen die den gebrückt sein? Nutzen die das gleiche Netz? Auch das gleiche, wie dein LAN?

    Der "normale" (ältere) Weg, tap Interfaces zur internen Bridge hinzuzufügen geht über das Editieren der ar7.cfg (steht in Wiki beschrieben).

    Jörg

    EDIT: Link zum Wiki-Eintrag
    EDIT 2: Du müsstest natürlich auch noch tap1 (und bei belieben noch bis zu tap<n> ) hinzufügen....
     
  5. Pace

    Pace Neuer User

    Registriert seit:
    29 Sep. 2005
    Beiträge:
    28
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Danke für den Hinweis!
    Am liebsten ist es mir jedoch, wenn ich nicht extra die ar7.cfg anfassen muss.

    brctl sagt, dass unter lan folgende interfaces gebridged werden:
    eth0, ath0, tap0

    tap1 existiert zwar (wird unter ifconfig aufgeführt), ist aber nicht in gebridged.
    Auch bei einem neustart der box wird es nicht zur lan-bridge hinzugefügt, obwohl beide openvpn-configs auf autostart sind.

    Im syslog finde ich keinen hinweis auf einen fehler...

    Nachtrag:
    Ja, die sollen alle gebrückt sein: eth0, ath0, tap0 und tap1
     
  6. MaxMuster

    MaxMuster IPPF-Promi

    Registriert seit:
    1 Feb. 2005
    Beiträge:
    6,923
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    o.k., dann versuch doch zunächst mal, ob ein
    Code:
    brctl addif lan tap1
    
    in dem Fall, dass nur tap0 in der Brücke ist, weiterhilft...

    Jörg

    EDIT: Ach so: Was ergibt denn
    Code:
    ifconfig | sed -n 's/\(tap[0-9]\).*/\1/p'
    
     
  7. Pace

    Pace Neuer User

    Registriert seit:
    29 Sep. 2005
    Beiträge:
    28
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Code:
    brctl addif lan tap1
    
    Über diesen Befehl füge ich tap1 erfolgreich zu lan hinzu, ein aufruf von
    Code:
    brctl show lan
    
    bestätigt dies.

    Code:
    ifconfig | sed -n 's/\(tap[0-9]\).*/\1/p'
    
    ergibt:
    Code:
    tap0
    tap1
    
    Eigentlich sollte doch dann tap1 von anfang an der brücke angehören, oder?

    Ich könnte mir jetzt natürlich helfen, indem ich "brctl addif lan tap1" zu einem startscript hinzufüge.
    Viel wichtiger wäre doch aber das der nächste der das versucht nicht vor dem gleichen problem steht...
     
  8. MaxMuster

    MaxMuster IPPF-Promi

    Registriert seit:
    1 Feb. 2005
    Beiträge:
    6,923
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    ... behebt das denn dein ursprüngliches Problem, wenn tap1 mit dabei ist??
     
  9. Pace

    Pace Neuer User

    Registriert seit:
    29 Sep. 2005
    Beiträge:
    28
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    ... kann ich leider grade nicht testen, da ich dazu das wlan der box ausschalten müsste (anderes problem, siehe http://www.ip-phone-forum.de/showthread.php?p=1277839#post1277839) und dieses aber grade benötigt wird.

    Aber da bin ich mir fast sicher dass es das problem beheben würde, immerhin passt das fehlen der brücke genau zur symptomatik
     
  10. MaxMuster

    MaxMuster IPPF-Promi

    Registriert seit:
    1 Feb. 2005
    Beiträge:
    6,923
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Könntest du dann mal die beiden Openvpn's stoppen, per "brctl delif lan tap0" und "brctl delif lan tap1" die Brücken bereinigen und dann neu starten?
    Sind dann denn beide Interfaces in der Brücke?
    Ansonsten: Nochmal beides Stoppen und tap's entfernen und dir beiden Configs von Hand Starten mit
    Code:
    sh -x /mod/etc/init.d/rc.openvpn_c1 start
    sh -x /mod/etc/init.d/rc.openvpn_c2 start
    
    Gibt zwar viel output und eigentlich interessiert nur der oben schon genannte Part mit brctl

    Wie du schon sagtest, eigentlich sollte es gehen....


    Jörg
     
  11. Pace

    Pace Neuer User

    Registriert seit:
    29 Sep. 2005
    Beiträge:
    28
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Habe grade noch was anderes gesehen.

    In /var/log/mod.log steht folgendes:
    Code:
    Starting openvpn ... done.
    Starting openvpn_tunnel ... done.
    device tap0 is already a member of a bridge; can't enslave it to bridge lan.
    
    "openvpn_tunnel" ist in dem fall meine zweite openvpn-config. Hier sollte wohl eigentlich tap1 zur brücke hinzugefügt werden, es wird aber versucht tap0 ein zweites mal zu adden.

    Stimmt da was mit dem script von oben nicht?
    Hilft dir das schon weiter oder soll ich das o.g. noch durchführen?
     
  12. Silent-Tears

    Silent-Tears IPPF-Promi

    Registriert seit:
    3 Aug. 2007
    Beiträge:
    7,456
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ort:
    BI
    Das war aber nicht per "sh -x" gestartet ;)
     
  13. MaxMuster

    MaxMuster IPPF-Promi

    Registriert seit:
    1 Feb. 2005
    Beiträge:
    6,923
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    #13 MaxMuster, 19 Feb. 2009
    Zuletzt bearbeitet: 19 Feb. 2009
    ... beim zweiten mal wird halt versucht, beide tap's hinzuzufügen, das erste wird fehlschlagen, das zweite sollte aber klappen, hatte ich dabei gehofft.


    Geht denn das Stoppen, tap's entfernen und wieder starten? Also sind dann beide drin?

    Ansonsten versuche doch bitte mal, die rc-Datei so zu verändern:
    Code:
    	if [ -n "`grep "dev tap" /mod/etc/${DAEMON}.conf`" -a -x "`which brctl`" ]; then
    		for i in "`ifconfig | sed -n 's/\(tap[0-9]\).*/\1/p'`"; do
    			 [B]brctl show lan | grep -q $i || [/B]brctl addif lan $i
    		done
    	fi
    
    (das könnte so gehen)
    Code:
    cp  /etc/init.d/rc.openvpn /var/tmp
    sed -i 's/brctl addif/brctl show lan | grep -q $1 || brctl addif ' /var/tmp/rc.openvpn
    mount -o bind /var/tmp/rc.openvpn /etc/init.d/rc.openvpn
    
    und versuche es dann nochmal (stoppen, tap's entfernen und wieder starten)


    Jörg
     
  14. Pace

    Pace Neuer User

    Registriert seit:
    29 Sep. 2005
    Beiträge:
    28
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    #14 Pace, 19 Feb. 2009
    Zuletzt bearbeitet: 19 Feb. 2009
    Ok, hatte nicht ganz kapiert wie das script arbeitet. Du hast recht.

    nein, auch dann ist nur tap0 drin

    Wenn ich den folgenden code von hand in der console eingebe...
    (du hattet da $1 stehen, das habe ich durch $i ersetzt)
    Code:
    	for i in "`ifconfig | sed -n 's/\(tap[0-9]\).*/\1/p'`"; do
    		 [B]brctl show lan | grep -q $i || [/B]brctl addif lan $i
    	done
    
    ...kommt folgendes raus:
    Code:
    grep: tap1: No such file or directory
    device tap0 is already a member of a bridge; can't enslave it to bridge lan.
    
    Warum er da das tap1-argument in grep nicht korrekt verarbeitet weiss ich nicht.
    Aber fakt ist, an diesem Teil im Skript hängts... tap1 wird da nicht hinzugefügt, auch nicht mi dem unveränderten code.
    Deine Idee zuerst zu püfen ob das tapXY schon hinzugefügt wurde ist denke ich der richtige Ansatz. Nur die Syntax scheint noch nicht ganz zu passen...

    Nachtrag
    Ich denke das Problem liegt an diesem Befehl: ifconfig | sed -n 's/\(tap[0-9]\).*/\1/p'
    Dessen output ist nicht im richtigen Format für den for-befehl.
     
  15. MaxMuster

    MaxMuster IPPF-Promi

    Registriert seit:
    1 Feb. 2005
    Beiträge:
    6,923
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    ... sorry, $i ist natürlich richtig...

    wie ist es mit "" um das $i, also
    Code:
    grep -q [B]"[/B]$i[B]"[/B]
    stattdessen ?

    Jörg

    EDIT
    Versuche doch mal
    Code:
    for i in $(echo "`ifconfig | sed -n 's/\(tap[0-9]\).*/\1/p'`"); do
    stattdessen??
     
  16. Pace

    Pace Neuer User

    Registriert seit:
    29 Sep. 2005
    Beiträge:
    28
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Sieh dir mal die Ausgabe dieses Tests an, dann weisst du was ich meine ;)
    Code:
    > for i in "`ifconfig | sed -n 's/\(tap[0-9]\).*/\1/p'`"; do
    > echo "$i"
    > echo test
    > done
    tap0
    tap1
    test
    
    Eigentlich sollte die Ausgabe ja folgendermaßen aussehen:
    Code:
    tap0
    test
    tap1
    test
    
     
  17. MaxMuster

    MaxMuster IPPF-Promi

    Registriert seit:
    1 Feb. 2005
    Beiträge:
    6,923
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    #17 MaxMuster, 19 Feb. 2009
    Zuletzt bearbeitet: 19 Feb. 2009
    Noch einfacher sollte sein:
    Code:
    for i in `ifconfig | grep -o tap[0-9]`; do
      echo "**$i##"
    done
    
     
  18. Pace

    Pace Neuer User

    Registriert seit:
    29 Sep. 2005
    Beiträge:
    28
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    Ok, dein letzter Tip hat zur Lösung geführt !

    Fogendes funktioniert:
    Code:
    for i in $(echo "`ifconfig | sed -n 's/\(tap[0-9]\).*/\1/p'`"); do
         brctl addif lan "$i"
    done
    
    Danach sind beide taps in der lan-bridge !

    Kannst du das vllt in den aktuellen trunk einbauen ?

    Vielen Dank auch für deine schnelle und kompetente Hilfe :)
     
  19. MaxMuster

    MaxMuster IPPF-Promi

    Registriert seit:
    1 Feb. 2005
    Beiträge:
    6,923
    Zustimmungen:
    0
    Punkte für Erfolge:
    36
    Versuchst du mal das

    for i in `ifconfig | grep -o tap[0-9]`; do

    Das wäre doch noch einfacher...
     
  20. Pace

    Pace Neuer User

    Registriert seit:
    29 Sep. 2005
    Beiträge:
    28
    Zustimmungen:
    0
    Punkte für Erfolge:
    0
    [Edit frank_m24: Sinnfreies Vollzitat vom Beitrag direkt darüber gelöscht. Lies noch mal die Forumregeln.]


    Jepp, damit gehts genauso !
    Sehr viel einfacher, hast recht ;)