Tráfego específico do túnel através do OpenVPN

4

Tenho o Ubuntu Server e gostaria de filtrar o tráfego e enviar apenas um tráfego específico de usuários ou grupos através da VPN, e o restante do tráfego enviado pela conexão padrão da Internet. Eu acho que isso seria bastante fácil de fazer, mas estou tendo muito trabalho para configurá-lo.

Eu consegui configurar com sucesso uma conexão VPN usando:

openvpn --config '/etc/openvpn/Sweden.ovpn' --auth-user-pass '/etc/openvpn/pia.txt' --persist-key --persist-tun --tls-client --remote-cert-tls server --user vpn &

O arquivo de configuração do OpenVPN contém o seguinte:

client
dev tun
proto udp
remote sweden.privateinternetaccess.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
tls-client
remote-cert-tls server
auth-user-pass
comp-lzo
verb 1
reneg-sec 0

Que cria uma nova interface chamada "tun0". Usar essa interface funciona perfeitamente:

curl -v --interface tun0 icanhazip.com

No entanto, quando tento usar a interface eth0, a conexão será interrompida:

curl -v --interface eth0 icanhazip.com

Se eu desabilitar a conexão do OpenVPN, minha chamada de curvatura pela eth0 funcionará corretamente.

Uma vez que consegui trabalhar com eth0 e tun0, planejei usar algo semelhante a esse comando para rotear um grupo específico através do túnel OpenVPN:

iptables -A OUTPUT -m owner --gid-owner vpn \! -o tun0 -j REJECT

Alguém sabe de uma maneira que eu poderia fazer com que eth0 e tun0 funcionem ao mesmo tempo, para que eu possa direcionar o tráfego de um usuário / grupo específico através dele e deixar todo o tráfego restante sozinho?

Postagens semelhantes: Como direcionar tráfego específico através do OpenVPN? - Eu tenho apenas uma rede cartão no meu solver, esta solução parece usar duas placas de rede.

    
por Alex 08.02.2014 / 03:21

1 resposta

1

Existe um problema com o curl -test, que eu sei resolver, e um problema com o seu esquema em geral, para o qual posso sugerir uma solução.

curl não pode funcionar dessa maneira: depois de iniciar a VPN, não há gateway definido nessa interface (eth0): a eth0 NIC tem um endereço IP e pode acessar sua LAN, mas não há não é um gateway a partir do qual a internet, e icanhazip.com em particular, pode ser alcançado. Para que curl funcione desta forma, você terá que instruir seu kernel que a rota específica para 216.69.252.101 (icanhazip.com) é através da interface eth0 :

   ip ro add 216.69.252.101 via your_home_routers_IP_address

Agora, a chamada curl funcionará como você deseja.

Se você quiser se comunicar através da VPN e fora dela de maneira estável e completa, a maneira correta de proceder é instalar uma segunda tabela de roteamento por meio de roteamento baseado em política . Você pode encontrar uma introdução boa e concisa para o tópico por David Schwartz em uma irmã- site, aqui. A razão pela qual você precisa dessa engenhoca é que você está imaginando um sistema com dois gateways distintos, que não são permitidos, a não ser, é claro, que haja duas tabelas de roteamento distintas.

Agora, para atingir sua meta, ou seja, , para rotear pacotes ao longo de rotas diferentes de acordo com a identidade do usuário, você precisará definir regras apropriadas que selecionem a tabela de roteamento relevante. Então vamos supor que agora você tem duas tabelas, chamadas vpn e novpn. Você terá primeiro que usar a tabela mangle de iptables para marcar os pacotes de acordo com a identidade do usuário e, em seguida, fornecer regras para roteamento baseado em política de acordo com a presença (ou ausência) ) da referida marca.

Poderia funcionar assim:

  iptables -t mangle -I OUTPUT -m owner --uid-owner some-user -j MARK --set-mark 100
  ip rule add fwmark 100 table vpn

para um usuário destinado a usar vpn e

  iptables -t mangle -I OUTPUT -m owner --uid-owner some-other-user -j MARK --set-mark 300
  ip rule add fwmark 300 table novpn

para aqueles que você deseja rotear fora da VPN. Além disso, é sempre melhor definir uma tabela de roteamento para qualquer outra coisa , ou seja, um padrão. Espero que isso ajude.

    
por 08.02.2014 / 08:03