Crie uma ponte entre um túnel e um dispositivo ethernet

2

Eu tenho um Raspberry pi com Debian wheezy. Existem três conexões:

eth0: native usb ethernet, connected to the router.
eth1: plug-in usb ethernet adapter
tun0: tunnel created by openconnect vpn client

Agora, desejo criar uma ponte entre eth1 e tun0 , para que todo o tráfego de eth1 seja roteado para a VPN. Não há aplicativos em execução no sistema operacional precisa da conexão VPN.

  ------------------------
  |  OS Local --> eth0 --|--> router
  |                      |
  |   Debian Wheezy      |
  |                      |
--|--> eth1 --> tun0 ----|--> vpn server
  ------------------------

Eu fiz algumas pesquisas e acontece que tun0 é um dispositivo de camada 3, enquanto eth1 é um dispositivo de camada 2. Eles não podem falar um com o outro diretamente. A primeira coisa que me vem à mente é se posso criar um tun1 de eth1 e conectar tun1 e tun0 . Mas isso é possível? Como posso fazer isso?

Alguma ideia? Obrigado.

ATUALIZAÇÃO: Tabela de roteamento atual após o vpn conectado:

default dev tun0  scope link 
default via 192.168.0.1 dev eth0  metric 202 
44.33.22.11 via 192.168.0.1 dev eth0  src 192.168.0.14 
172.18.2.0/24 dev tun0  scope link 
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.14  metric 202 
    
por De Gao 27.06.2015 / 23:24

1 resposta

2

Você precisa implementar o roteamento de política , o que significa ter duas tabelas de roteamento. Não tocaremos na tabela de roteamento main , que já está configurada corretamente. Se você ativou o encaminhamento IPv4, ele enviará automaticamente os pacotes da eth1 para o OpenVPN.

Primeiramente, precisamos aprender como o OpenVP configura a tabela de roteamento. Para isso, finalize o cliente OpenVPN a partir da linha de comando:

    sudo openvpn --config YourConfigFile.conf

(ou YourConfigFile.ovpn , o que você usa). As últimas linhas vão te dizer como ele configura a nova tabela de roteamento, por exemplo no meu caso diz:

Tue Jul 14 18:58:07 2015 /sbin/ip route add My.Server.Public.IPaddress/32 via 192.168.105.1

Tue Jul 14 18:58:07 2015 /sbin/ip route add 0.0.0.0/1 via 10.8.73.5

Tue Jul 14 18:58:07 2015 /sbin/ip route add 128.0.0.0/1 via 10.8.73.5

Tue Jul 14 18:58:07 2015 /sbin/ip route add 192.168.73.0/24 via 10.8.73.5

Tue Jul 14 18:58:07 2015 /sbin/ip route add 10.8.73.0/24 via 10.8.73.5

Tue Jul 14 18:58:07 2015 Initialization Sequence Completed

As rotas acima devem ser introduzidas em um arquivo executável, exceto que alguns desses números são peculiares a essa instância específica da VPN. No entanto, o OpenVPN fornece variáveis ambientais úteis que irão manter os valores das interfaces usadas acima, e que são muito úteis: neste caso específico, eles são

      route_net_gateway -> 192.168.105.1
      route_vpn_gateway -> 10.8.73.5 

Assim, as linhas que você precisa adicionar a um arquivo (vamos chamá-lo de /etc/openvpn/route_up.sh ) são:

 /sbin/ip route add Your.OpenVPN.Server.IPAddress/32 via $route_net_gateway table vpn
 /sbin/ip route add 0.0.0.0/1 via $route_vpn_gateway table vpn
 /sbin/ip route add 128.0.0.0/1 via $route_vpn_gateway table vpn
 /sbin/ip route add Remote.LAN.Net/24 via $route_vpn_gateway table vpn
 /sbin/ip route add 172.18.2.0/24 via $route_vpn_gateway table vpn

Lembre-se de substituir, acima, o endereço IP do seu servidor remoto e de sua LAN local se você usá-lo ; Se você está usando apenas o OpenVPN para obter um IP do seu servidor, então você não precisa do próximo da última declaração. Lembre-se de tornar o arquivo executável, chmod 700 route_up.sh .

Além disso, você também terá que criar um novo arquivo, /etc/openvpn/route_down.sh , também executável, que derruba exatamente as mesmas rotas (basta alterar add para del ).

Agora precisamos informar ao seu OpenVPN para evitar a implementação das rotas, porque faremos isso manualmente: no seu arquivo YourConfigFile.conf, adicione as seguintes linhas:

        route-nopull
        up /etc/openvpn/route_up.sh
        down /etc/openvpn/route_down.sh

Por último, precisamos configurar a tabela de roteamento diferente para a VPN. Adicione uma nova tabela de roteamento, vamos chamá-la vpn :

       echo 200 vpn >> /etc/iproute2/rt_tables 

Agora, introduzimos uma regra:

     ip rule add from 10.0.0.0/24 table vpn

onde assumi que a rede por trás de eth1 é 10.0.0.0/24 , se não for, por favor mude de acordo.

Por último, você terá que introduzir uma regra de iptables MASQUERADE:

      iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

É isso.

    
por 09.07.2015 / 06:11