web-dev-qa-db-fra.com

Client à client OpenVPN

Lors de l'utilisation d'un serveur OpenVPN TUN (couche 3) avec client-to-client désactivé, mes clients peuvent toujours se parler.

La configuration client-à-client devrait empêcher ceci selon la documentation:

Décommentez la directive client-à-client si vous souhaitez que les clients se connectant puissent se joindre via le VPN. Par défaut, les clients ne pourront accéder qu'au serveur.

Pourquoi les clients peuvent-ils continuer à communiquer entre eux lorsque cette option est désactivée?

Voici ma conf de serveur:

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
18
lobi

Si client-to-client est activé, le serveur VPN transfère les paquets client à client en interne sans les envoyer à la couche IP de l'hôte (c'est-à-dire au noyau). La pile de mise en réseau hôte ne voit pas du tout ces paquets.

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


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


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

Si client-to-client est désactivé, les paquets d'un client à un autre client passent par la couche IP hôte (iptables, table de routage, etc.) de la machine hébergeant le serveur VPN: si le transfert IP est activé, l'hôte peut retransmettre le paquet (en utilisant sa table de routage) à l'interface TUN et le démon VPN transmettra le paquet au client correct à l'intérieur du 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       |
 '----------------'  '----------------'

Dans ce cas (client-to-client désactivé), vous pouvez bloquer les paquets client à client à l'aide d'iptables:

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

tun0 est votre interface VPN.

59
ysdx

Vous devez faire plus que simplement commenter la directive comme elle le dit ici :

Décommentez cette directive pour permettre à différents clients de se "voir". Par défaut, les clients ne verront que le serveur. Pour forcer les clients à ne voir que le serveur, vous devrez également pare-feu de manière appropriée l'interface TUN/TAP du serveur.

Par conséquent, vous pouvez configurer une stratégie d'adresse IP distincte pour chaque client. Voir la section Configuration des règles spécifiques au client et des politiques d'accès ici: https://openvpn.net/index.php/open-source/documentation/howto.html . et ici: https://www.sbarjatiya.com/notes_wiki/index.php/Configuring_separate_IP_and_firewall_rule_for_each_openvpn_client .

7
Diamond

Le paragraphe suivant de la page de manuel de openvpn répond à cette question, bien qu'il ne soit pas nécessairement clair en première lecture:

Étant donné que le mode serveur OpenVPN gère plusieurs clients via une seule interface tun ou tap, il s'agit en fait d'un routeur. Le --client-to-client L'indicateur indique à OpenVPN d'acheminer en interne le trafic client à client plutôt que de pousser tout le trafic provenant du client vers l'interface TUN/TAP.

Lorsque cette option est utilisée, chaque client "verra" les autres clients actuellement connectés. Sinon, chaque client ne verra que le serveur. N'utilisez pas cette option si vous souhaitez filtrer le trafic du tunnel à l'aide de règles personnalisées par client.

Le client-to-client l'option court-circuite les tables de routage normales sur le serveur. Sa suppression n'empêche pas les clients d'utiliser les tables de routage du serveur. Si ces tables de routage - et la configuration du pare-feu du serveur - permettent aux clients de se voir, ils pourront le faire.

6
roaima