OpenVPN client-to-client

7

Quando usar um servidor OpenVPN TUN (camada 3) com client-to-client desativado, meus clientes ainda poderão conversar entre si.

A configuração do cliente para o cliente deve evitar isso de acordo com a documentação:

Uncomment out the client-to-client directive if you would like connecting clients to be able to reach each other over the VPN. By default, clients will only be able to reach the server.

Por que os clientes podem continuar se comunicando quando essa opção está desativada?

Aqui está o meu servidor 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
    
por lobi 13.11.2015 / 23:56

3 respostas

28

Se client-to-client for ativado , o servidor VPN encaminha pacotes internamente de cliente para cliente sem enviá-los à camada IP do host (ou seja, ao kernel). A pilha de rede do host não vê esses pacotes.

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


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


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

Se client-to-client for desativado , os pacotes de um cliente para outro cliente passarão pela camada IP do host (iptables, tabela de roteamento etc.) da máquina que hospeda o servidor VPN: se o encaminhamento de IP estiver ativado , o host pode encaminhar o pacote (usando sua tabela de roteamento) novamente para a interface TUN e o daemon da VPN encaminhará o pacote para o cliente correto dentro do túnel.

           .-------------------.
           | 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       |
 '----------------'  '----------------'

Neste caso ( client-to-client desativado), você pode bloquear os pacotes cliente-cliente usando o iptables:

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

onde tun0 é sua interface VPN.

    
por 24.11.2015 / 09:14
4

Você precisa fazer mais do que apenas comentar a diretiva como ela diz aqui :

Uncomment this directive to allow different clients to be able to "see" each other. By default, clients will only see the server. To force clients to only see the server, you will also need to appropriately firewall the server's TUN/TAP interface.

Portanto, você pode configurar uma política de endereço IP separada para cada cliente. Veja a seção Como configurar regras e políticas de acesso específicas do cliente aqui: link . e aqui: link .

    
por 14.11.2015 / 01:35
3

O próximo parágrafo da man page de openvpn responde a esta pergunta, embora não seja necessariamente claro na primeira leitura:

Because the OpenVPN server mode handles multiple clients through a single tun or tap interface, it is effectively a router. The --client-to-client flag tells OpenVPN to internally route client-to-client traffic rather than pushing all client-originating traffic to the TUN/TAP interface.

When this option is used, each client will "see" the other clients which are currently connected. Otherwise, each client will only see the server. Don't use this option if you want to firewall tunnel traffic using custom, per-client rules.

A opção client-to-client entra em curto-circuito com as tabelas de roteamento normais no servidor. A remoção não impede que os clientes usem as tabelas de roteamento do servidor. Se essas tabelas de roteamento - e a configuração de firewall do servidor - permitirem que os clientes se vejam, eles poderão fazê-lo.

    
por 14.11.2015 / 01:26