OpenVPN client-to-client


16

Quando utilizzo un server OpenVPN TUN (layer 3) con client-to-clientdisabilitato, i miei clienti possono ancora parlare tra loro.

La configurazione da client a client dovrebbe impedire ciò in base alla documentazione:

Scomponi la direttiva client-to-client se desideri che i client di connessione possano raggiungersi tramite la VPN. Per impostazione predefinita, i client saranno in grado di raggiungere solo il server.

Perché i client possono continuare a comunicare tra loro quando questa opzione è disabilitata?

Ecco il mio 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

Risposte:


54

Se client-to-clientviene attivata , i pacchetti il server VPN inoltra client-to-client internamente senza inviarli al livello IP dell'host (cioè al kernel). Lo stack di rete dell'host non vede affatto quei pacchetti.

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


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


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

Se client-to-clientè disabilitata , i pacchetti da un client a un altro client passano attraverso lo strato IP dell'host (iptables, tavolo, ecc instradamento) della macchina che ospita il server VPN: se l'inoltro IP è attivato , l'host potrebbe trasmettere il pacchetto (utilizzando il suo tabella di routing) di nuovo all'interfaccia TUN e il demone VPN inoltrerà il pacchetto al client corretto all'interno del tunnel.

           .-------------------.
           | 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 questo caso ( client-to-clientdisabilitato), è possibile bloccare i pacchetti client-client utilizzando iptables:

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

dov'è la tun0tua interfaccia VPN.


Contrassegnato come risposta; conciso ma molto istruttivo e in realtà fornisce la regola del firewall iptables nella risposta.
lobi,

1
Ho una domanda sul diagramma, lo disegni carattere per carattere e spazio per spazio? o usi qualche app per aiutarti a ottenerlo in modo semplice e rapido?
Mohammed Noureldin,

3
@MohammedNoureldin, ho realizzato il diagramma originale con asciio ( search.cpan.org/dist/App-Asciio ) che è un editor point-and-click WYSWYG per i diagrammi asciiart.
ysdx,

Grazie, sei riuscito a eseguirlo su Windows? sembra essere un'app del medioevo e non potevo eseguirla su Windows, ho provato a installarla con il pacchetto camelbox, ma ricevo sempre un errore 404.
Mohammed Noureldin,

2
@MohammedNoureldin, non sto usando Windows. Sto usando Debian ed è direttamente installabile dai pacchetti.
ysdx,

5

Il prossimo paragrafo della pagina di openvpnmanuale risponde a questa domanda, sebbene non sia necessariamente chiaro in prima lettura:

Poiché la modalità server OpenVPN gestisce più client attraverso una singola interfaccia tun o tap, è effettivamente un router. Il --client-to-client flag indica a OpenVPN di instradare internamente il traffico da client a client anziché inviare tutto il traffico di origine client all'interfaccia TUN / TAP.

Quando viene utilizzata questa opzione, ogni client "vedrà" gli altri client che sono attualmente connessi. Altrimenti, ogni client vedrà solo il server. Non utilizzare questa opzione se si desidera proteggere il traffico del tunnel mediante firewall mediante regole personalizzate per client.

L' client-to-clientopzione mette in corto circuito le normali tabelle di routing sul server. La sua rimozione non impedisce ai client di utilizzare le tabelle di routing del server. Se le tabelle di routing e la configurazione del firewall del server consentono ai client di vedersi, saranno in grado di farlo.


5

Devi fare molto di più che commentare la direttiva come dice qui :

Annulla il commento di questa direttiva per consentire a diversi client di potersi "vedere". Per impostazione predefinita, i client vedranno solo il server. Per forzare i client a vedere solo il server, dovrai anche proteggere adeguatamente l'interfaccia TUN / TAP del server.

Pertanto è possibile configurare criteri di indirizzo IP separati per ciascun client. Vedi la sezione Configurare regole specifiche del cliente e politiche di accesso qui: https://openvpn.net/index.php/open-source/documentation/howto.html . e qui: https://www.sbarjatiya.com/notes_wiki/index.php/Configuring_separate_IP_and_firewall_rule_for_each_openvpn_client .


Quindi questo significa quello che ho pensato: l'unico modo per raggiungere questo obiettivo è mettere ciascun client su sottoreti diverse. Questo risponde principalmente alla domanda, inoltre hai fornito una documentazione su come farlo. Lo segnerò come risposta. Grazie.
lobi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.