Rota para a sub-rede LAN via cliente OpenVPN

4

Estou tentando rotear para uma sub-rede da LAN conectada por meio de um cliente OpenVPN.

Estou tendo problemas com o comando route - não consigo entender. O link OpenVPN é estabelecido e eu posso ping o cliente.

Quando tento adicionar uma rota à sub-rede da LAN no servidor VPN, recebo este erro:

# route add -net 192.168.0.0 netmask 255.255.255.0 gw 10.9.0.6 dev tun0
SIOCADDRT: No such process

A tabela de roteamento para o servidor OpenVPN tem 10.9.0.0/24 , por isso não sei qual é o problema.

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         ve108.csr2.lga1 0.0.0.0         UG    0      0        0 eth0
10.9.0.0        10.9.0.2        255.255.255.0   UG    0      0        0 tun0
10.9.0.2        *               255.255.255.255 UH    0      0        0 tun0
204.145.81.0    *               255.255.255.0   U     0      0        0 eth0

Mais informações:

# ip ad sh
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0e:cf:20:c1:24 brd ff:ff:ff:ff:ff:ff
    inet 204.145.81.11/24 brd 204.145.81.255 scope global eth0
    inet6 fe80::20e:cfff:fe20:c124/64 scope link 
       valid_lft forever preferred_lft forever
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
    link/none 
    inet 10.9.0.1 peer 10.9.0.2/32 scope global tun0

Considerando que posso ping do cliente VPN para o qual estou tentando rotear, não entendo por que estou tendo esse problema. Tanto quanto eu sei, eu deveria ser capaz de adicionar a rota.

# ping -c 1 10.9.0.6
PING 10.9.0.6 (10.9.0.6) 56(84) bytes of data.
64 bytes from 10.9.0.6: icmp_req=1 ttl=64 time=24.0 ms

--- 10.9.0.6 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 24.008/24.008/24.008/0.000 ms

Aqui estão os detalhes do cliente OpenVPN , que está conectado ao servidor VPN. A rede para a qual estou tentando rotear está neste cliente.

# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         greece-gw.secus 0.0.0.0         UG    2      0        0 eth0
10.9.0.1        10.9.0.5        255.255.255.255 UGH   0      0        0 tun0
10.9.0.5        *               255.255.255.255 UH    0      0        0 tun0
loopback        localhost       255.0.0.0       UG    0      0        0 lo
192.168.0.0     *               255.255.255.0   U     0      0        0 eth1
198.50.241.0    *               255.255.255.0   U     0      0        0 eth0

Ele pode alcançar o servidor VPN bem:

# ping -c 1 10.9.0.1
PING 10.9.0.1 (10.9.0.1) 56(84) bytes of data.
64 bytes from 10.9.0.1: icmp_seq=1 ttl=64 time=24.0 ms

--- 10.9.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 24.017/24.017/24.017/0.000 ms

Tem o encaminhamento de IP ativado:

# sysctl -a | grep forwarding
net.ipv4.conf.all.forwarding = 1

Eu configurei iptables para permitir o encaminhamento:

# iptables -nvL FORWARD
Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  tun0   eth1    0.0.0.0/0            0.0.0.0/0

Aqui está a configuração das interfaces no cliente:

# ip ad sh
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:5f:f2:1e brd ff:ff:ff:ff:ff:ff
    inet 198.50.241.113/24 brd 198.50.241.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe5f:f21e/64 scope link 
       valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:c6:b8:fd brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.2/24 brd 192.168.0.255 scope global eth1
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fec6:b8fd/64 scope link 
       valid_lft forever preferred_lft forever
4: sit0: <NOARP> mtu 1480 qdisc noop state DOWN 
    link/sit 0.0.0.0 brd 0.0.0.0
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
    link/none 
    inet 10.9.0.6 peer 10.9.0.5/32 scope global tun0
       valid_lft forever preferred_lft forever
    
por John Tate 10.07.2014 / 10:57

2 respostas

0

Tropeçando nesta questão enquanto conduz outra pesquisa, parece que o OP está tentando acessar uma subnet que está conectada a um servidor OpenVPN remoto.

Minha resposta assume o modo túnel , não o modo em ponte . (O OpenVPN está agindo como um roteador , não um switch .)

Se o meu entendimento estiver correto, então um --client-config-dir ("CCD") deve ser usado neste caso. Deve haver uma diretiva route cobrindo o intervalo de endereços da sub-rede na configuração principal, e um iroute (observe o "i") em um arquivo CCD que será corretamente identificado como pertencente a isso remoto. (Você verá se é ou não reconhecido observando os logs do OpenVPN e confirmando que agora existe uma rota em sua máquina.)

Se você está acessando a sub-rede de outra sub-rede (ou seja, não da máquina que está executando o cliente OpenVPN, deve também ser uma rota estática dentro de sua sub-rede local) envia tráfego para sua máquina OpenVPN "como um gateway". Isso pode ser definido em cada máquina cliente ou, mais convenientemente, no roteador local.

E aqui está como o tráfego vai fluir:

  • Você faz ping na sub-rede remota.
  • Sua máquina ou seu roteador encaminha o tráfego para sua caixa OpenVPN como um gateway. (porque, funcionalmente, um túnel OpenVPN atua como um roteador).
  • A diretiva route nessa máquina faz com que o tráfego seja enviado para o dispositivo tunX para que o OpenVPN realmente receba o mesmo.
  • A diretiva iroute (e o CCD no qual ela ocorre) informa ao OpenVPN que existe uma sub-rede remota e para qual controle remoto ela deve ser enviada. (mesmo que haja apenas um controle remoto).
  • O tráfego é encaminhado para o destino no lado remoto.
  • E agora, tudo tem que acontecer ao contrário! O controle remoto envia a resposta de ping usando seu endereço IP na sub-rede remota, e ele tem que fazer o seu caminho todo o caminho de volta casa.

Se você pingar de uma máquina que esteja diretamente conectada ao OpenVPN (ele está executando o cliente) , seu endereço provavelmente será 10.8.0.x e este endereço- O intervalo também deve ser roteado com sucesso, "lá e de volta", em todos os dispositivos envolvidos.

Estes são "problemas básicos de roteamento TCP / IP", o que seria o caso se "o roteador em questão" fosse OpenVPN ou não. Depois que você conseguir que os hosts conversem com sucesso (yay!) , "para a rede, eles são apenas roteadores".

tcpdump (ou WireShark) e traceroute são seus melhores amigos aqui. Primeiro, você deve garantir que o tráfego criptografado esteja sendo entregue como deveria estar entre os hosts do OpenVPN. (Embora, é claro, você não consiga ler o conteúdo deles, você pode vê-los sendo roteados ou não.) Em seguida, faça as mesmas coisas dentro do túnel. Veja que os pacotes são entregues para e através do túnel, e que eles fazem todo o caminho de volta e . (Se traceroute começar a imprimir linhas de asteriscos, isso provavelmente significa que não há um roteamento reverso naquele determinado "salto". O pacote chega lá, mas não pode chegar em casa de lá.)

    
por 19.01.2017 / 14:21
0

Infelizmente, as ferramentas de rede geralmente apresentam mensagens de erro horríveis. Tanto quanto eu posso dizer, o que o kernel não gosta é que você está tentando adicionar uma rota com um gateway que não vê como sendo "local". Você deveria fazer:

route add -net 192.168.0.0 netmask 255.255.255.0 gw 10.9.0.2 dev tun0

ou:

route add -net 192.168.0.0 netmask 255.255.255.0 dev tun0

Além de configurar a rota do kernel, você também precisará adicionar uma rota dentro da própria openvpn. Isso é feito usando a diretiva "iroute" no arquivo ccd para o cliente.

    
por 01.09.2017 / 21:57