OpenVPN Client-zu-Client

15

Bei Verwendung eines TUN (Layer 3) OpenVPN-Servers mit client-to-clientdeaktivierter Funktion können meine Clients weiterhin miteinander kommunizieren.

Die Client-zu-Client-Konfiguration sollte dies laut Dokumentation verhindern:

Kommentieren Sie die Client-zu-Client-Direktive aus, wenn Sie möchten, dass sich Clients über das VPN gegenseitig erreichen können. Standardmäßig können Clients nur den Server erreichen.

Warum können die Clients weiterhin miteinander kommunizieren, wenn diese Option deaktiviert ist?

Hier ist mein Server conf:

port 443
proto tcp
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh4096.pem
topology subnet
server 10.10.201.0 255.255.255.128
ifconfig-pool-persist ipp.txt
crl-verify /etc/openvpn/keys/crl.pem
push "route [omitted]"
push "dhcp-option DNS [omitted]"
keepalive 10 120
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
plugin /usr/lib64/openvpn/plugins/openvpn-plugin-auth-pam.so login
cipher AES-256-CBC
tls-auth /etc/openvpn/keys/pfs.key 0
verb 4
lobi
quelle

Antworten:

53

Wenn client-to-clientwird aktiviert , der VPN - Server leitet die Client-zu-Client - Pakete intern ohne sie auf die IP - Ebene des Host (dh an den Kernel) sendet. Der Host-Netzwerkstapel sieht diese Pakete überhaupt nicht.

           .-------------------.
           | IP Layer          |
           '-------------------'


           .-------------------.
           | TUN device (tun0) |
           '-------------------'


           .-------------------.
           | OpenVPN server    |
           '-------------------'
             ^           |
          1  |           |  2   
             |           v
 .----------------.  .----------------.
 | Client a       |  | Client b       |
 '----------------'  '----------------'

Wenn client-to-clientist deaktiviert , gehen die Pakete von einem Client an einem anderen Kunden über die Host - IP - Schicht (iptables, Routing - Tabelle, etc.) der Maschine des VPN - Server - Hosting: wenn IP - Weiterleitung aktiviert ist , kann die Host das Paket weiterleiten (mit seinem Routing-Tabelle) erneut an die TUN-Schnittstelle und der VPN-Dämon leitet das Paket an den richtigen Client innerhalb des Tunnels weiter.

           .-------------------.
           | IP Layer          |  (4) routing, firewall, NAT, etc.
           '-------------------'      (iptables, nftables, conntrack, tc, etc.)
              ^          |
          3   |          |  5
              |          v
           .-------------------.
           | TUN device (tun0) |
           '-------------------'
             ^           |
          2  |           |  6  
             |           v
           .-------------------.
           | OpenVPN server    |
           '-------------------'
             ^           |
          1  |           |  7  
             |           v
 .----------------.  .----------------.
 | Client a       |  | Client b       |
 '----------------'  '----------------'

In diesem Fall ( client-to-clientdeaktiviert) können Sie die Client-zu-Client-Pakete mit iptables blockieren:

 iptables -A FORWARD -i tun0 -o tun0 -j DROP

Wo tun0ist deine VPN-Schnittstelle?

ysdx
quelle
Markierte dies als die Antwort; prägnant und doch sehr informativ und liefert tatsächlich die iptables Firewall-Regel in der Antwort.
Lobi
1
Ich habe eine Frage zum Diagramm. Zeichnen Sie es Zeichen für Zeichen und Leerzeichen für Leerzeichen? Oder verwenden Sie eine App, um dies einfach und schnell zu erreichen?
Mohammed Noureldin
3
@MohammedNoureldin, ich habe das Originaldiagramm mit asciio ( search.cpan.org/dist/App-Asciio ) erstellt, einem WYSWYG-Point-and-Click-Editor für ASCII-Diagramme.
ysdx
Vielen Dank, haben Sie es geschafft, es unter Windows auszuführen? Es scheint eine App aus dem Mittelalter zu sein, und ich konnte sie nicht unter Windows ausführen. Ich habe versucht, sie mit dem Camelbox-Paket zu installieren, aber es wird immer ein 404-Fehler angezeigt.
Mohammed Noureldin
2
@ MohammedNoureldin, ich benutze kein Windows. Ich benutze Debian und es kann direkt aus den Paketen installiert werden.
ysdx
5

Der nächste Absatz der Manpage openvpnbeantwortet diese Frage, obwohl dies bei der ersten Lesung nicht unbedingt klar ist:

Da der OpenVPN-Servermodus mehrere Clients über eine einzige Tun- oder Tap-Schnittstelle verarbeitet, handelt es sich praktisch um einen Router. Das --client-to-client Flag weist OpenVPN an, den Client-zu-Client-Verkehr intern weiterzuleiten, anstatt den gesamten vom Client ausgehenden Verkehr an die TUN / TAP-Schnittstelle zu leiten.

Wenn diese Option verwendet wird, "sieht" jeder Client die anderen Clients, die gerade verbunden sind. Andernfalls sieht jeder Client nur den Server. Verwenden Sie diese Option nicht, wenn Sie den Tunnelverkehr mit benutzerdefinierten Regeln pro Client durch eine Firewall schützen möchten.

Die client-to-clientOption schließt die normalen Routingtabellen auf dem Server kurz. Durch das Entfernen werden die Clients nicht daran gehindert, die Routingtabellen des Servers zu verwenden. Wenn diese Routingtabellen - und die Firewall-Konfiguration des Servers - es Clients ermöglichen, sich gegenseitig zu sehen, können sie dies tun.

Roaima
quelle
5

Sie müssen mehr tun , als nur die Richtlinie zu kommentieren , wie sie sagt , hier :

Deaktivieren Sie diese Anweisung, damit verschiedene Clients sich gegenseitig "sehen" können. Standardmäßig sehen Clients nur den Server. Um zu erzwingen, dass Clients nur den Server sehen, müssen Sie auch die TUN / TAP-Schnittstelle des Servers ordnungsgemäß durch eine Firewall schützen.

Daher können Sie für jeden Client eine separate IP-Adressrichtlinie konfigurieren. Weitere Informationen finden Sie im Abschnitt Client-spezifische Regeln und Zugriffsrichtlinien konfigurieren unter : https://openvpn.net/index.php/open-source/documentation/howto.html . und hier: https://www.sbarjatiya.com/notes_wiki/index.php/Configuring_separate_IP_and_firewall_rule_for_each_openvpn_client .

Diamant
quelle
Dann bedeutet dies, was ich dachte: Der einzige Weg, dies zu erreichen, besteht darin, jeden Client in verschiedene Subnetze zu versetzen. Dies beantwortet meistens die Frage, und Sie haben eine Dokumentation dazu gegeben. Ich werde dies als Antwort vermerken. Vielen Dank.
Lobi