Hi,
Erst mal das Vorweg: Deine Arbeit für den "supereinfachen" Einsatz des VPN mit der GUI ist und bleibt klasse. Es geht keinesfalls darum, dass dir hier jemand "an den Karren fahren" will, eher ein "Feature-Request".
Die Problematik entsteht nur dann, wenn der "mode server" aktiv ist. Dann ist der Server insofern "eigen", dass er ankommende Pakete nochmal auf "Plausibilität/Erlaubtheit" prüft. So kommt es dann, dass die "ursprüngliche" Konfig zwar funktioniert, aber nur, solange die Pakete nur vom Client selbst kommen. Sobald welche vom LAN hinter dem Client kommen, werden die Verworfen, weil der Server (im
mode server) hinter dem Tunnel nur die Tunnel-IP oder explizit bekanntgegebene Adressen/Netze zulässt.
Daher funktioniert die Konfig oben, da der
"mode server" und der
"ifconfig-pool" gelöscht wurden.
Hintergrund ist, wenn ich das richtig interpretiert habe, dass dieser Modus ein "Routing über das virtuelle Interface" einführt denn es können/sollen dann ja mehrere Clients hinter diesem einen Interface hängen. Dafür gibt es zu diesem "internen Routing" dann eben die "iroute" Einträge.
Diese müssen dann einem Client zuzuordnen sein, daher geht der Weg über die "normale" Konfig nicht, sondern über dieses muss mit den Clients verknüpft sein (
so verstehe ich das zumindest , und leider auch, dass das config-dir wohl nötig ist):
The reason why two routes are needed is that the --route directive routes the packet from the kernel to OpenVPN. Once in OpenVPN, the --iroute directive routes to the specific client.
This option must be specified either in a client instance config file using --client-config-dir or dynamically generated using a --client-connect script.
Das sieht in der Praxis dann so aus, dass in der Routingtable der FBF alle Netze bei irgendeinem Client auf das Tunnel-Interface herausgeroutet werden sollen (z.B. auf die 192.168.200.2, egal ob das Netz nun wirklich an dem Client mit der 192.168.200.2, oder an dem mit der 192.168.200.6, oder wo auch immer ist). Danach "schnappt" sich der OpenVPN-Prozess die Pakete und "schiebt" sie dem richtigen Client zu (dann stehen z.B. auch im /var/log/openvpn die Netze, die der Prozess bei einem bestimmten Client sieht)
Für die GUI würde das meiner Ansicht nach bedeuten, dass in der "Standard-Konfig" mit
tun nur ein Client möglich sein sollte, dann entfiele die Notwendigkeit für
mode server, bei mehreren Clients (das wäre jetzt meine Idee) gäbe es als "Experten-Konfig" ein Feld, was in etwa so sein könnte:
Code:
#Client #Tunnel-IP #Netz1 #Maske1 #Netz2 #Maske2
client1 192.168.200.6 192.168.1.0 255.255.255.0 192.168.2.0 255.255.255.0
client2 192.168.200.10 192.168.11.0 255.255.255.0 192.168.12.0 255.255.255.0
oder mit Kommata getrennt oder was auch immer.
Daraus wird dann ein (wie gesagt, ich bin ein mieser Skripter, aber ich hoffe, die Idee wird sichtbar):
Code:
echo "#Routen für OpenVPN-Server zu den Clients" > /tmp/ovpn_server_routes.tmp
[I]für alle Zeilen in dem Feld do[/I]
i=Anzahl_Argumente
echo i"fconfig-push $ARG_2 $OPENVPN_LZO_BOX_IP" > /tmp/ovpn/$ARG_1
x=3
while (x<i) do
echo "iroute $ARG_(i) $ARG_(i+1)" >> /tmp/ovpn/$ARG_1
echo "route $ARG_(i) $ARG_(i+1)" >> /tmp/ovpn_server_routes.tmp
x+= 2
od
cat /tmp/ovpn_server_routes.tmp >> /mod/etc/openvpn-lzo.conf
Alternativ (ich habe keine Ahnung vom möglichen Aufwand) eine "Unterseite", die in Abhängigkeit der "Anzahl Clients" funktioniert:
ein Dropdownfeld mit Einstellungen für <Nummer des Clients>
ein Feld mit <IP des Clients>
ein Feld mit <Netz1,Maske1> <Netz2,Maske2> ...
(oder es gehen maximal n Netze für die es je ein Feld gibt)
Jörg