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

Pace

Neuer User
Mitglied seit
29 Sep 2005
Beiträge
28
Punkte für Reaktionen
0
Punkte
0
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
 
Zuletzt bearbeitet:
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
 
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 :/
 
.... 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....
 
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
 
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'
 
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...
 
... behebt das denn dein ursprüngliches Problem, wenn tap1 mit dabei ist??
 
... 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
 
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
 
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?
 
Das war aber nicht per "sh -x" gestartet ;)
 
... 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
 
Zuletzt bearbeitet:
... beim zweiten mal wird halt versucht, beide tap's hinzuzufügen, das erste wird fehlschlagen, das zweite sollte aber klappen, hatte ich dabei gehofft.
Ok, hatte nicht ganz kapiert wie das script arbeitet. Du hast recht.

Geht denn das Stoppen, tap's entfernen und wieder starten? Also sind dann beide drin?
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.
 
Zuletzt bearbeitet:
... 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??
 
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
 
Noch einfacher sollte sein:
Code:
for i in `ifconfig | grep -o tap[0-9]`; do
  echo "**$i##"
done
 
Zuletzt bearbeitet:
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 :)
 
Versuchst du mal das

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

Das wäre doch noch einfacher...
 
[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 ;)
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.