Usando o protocolo ARP com túnel roteado OpenVPN (TUN)

0

Configurei a rede mostrada no diagrama a seguir:

ROT1éroteadorbaseadoemtomate.PossuiinterfacederedebridgedBR0paratodososclientesdentrodaredeinternacomsub-rede192.168.1.0/24.UmdosclienteséumdispositivoNAS(NAS01)quefornecealgunsserviçosbásicos,comooownCloudeoservidorSMB.OsclientesLAP01eMOB01podemveroNAS01eusarseusserviços.OROT1tambémtemduasVPNsconfiguradas:TAP0éumtúnelemponteOpenVPNqueéligadocomBR0,éporissoqueoclienteLAP04recebeoendereçoIPdoservidorDHCPdentrodasub-rede192.168.1.0/24.EsteclientetambémécapazdeexecutarpingnodispositivoNAS01dentrodasub-redeinterna.OROT01doroteadorestáexecutandooprogramaarpwakeparaativarautomaticamenteoNAS01comoMagicPacketquandoohostésolicitadoporalgumoutroclientenaredecomasolicitaçãoARP(who-has).Vocêpodeencontraradescriçãodoaplicativoelinksparaseucódigo-fonte aqui . O aplicativo arpwake está escutando no BR0 a solicitação ARP contendo o endereço MAC do NAS01 e envia automaticamente o Magic Packet se um dos clientes dentro da rede solicitar. O problema é que eu estou tentando configurar um túnel VPN roteado também com o OpenVPN que me permitirá usar o aplicativo arpwake para ativar automaticamente o NAS01 quando um dos clientes da rede TUN0 solicitar. Se o NAS01 estiver ativo, posso fazer o ping e usar todos os serviços, mas se ele estiver inativo, não consigo ativá-lo com arpwake application, porque não há solicitações ARP nessa interface (TUN0) - já verifiquei isso com tcpdump no roteador. Eu também tentei usar o Proxy ARP com o comando echo 1 > /proc/sys/net/ipv4/conf/all/proxy_arp , mas ainda assim não funciona.

Veja a configuração do roteador:

Rotas

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.200.2   *               255.255.255.255 UH    0      0        0 tun0
192.168.0.1     *               255.255.255.255 UH    0      0        0 vlan2
192.168.200.0   192.168.200.2   255.255.255.0   UG    0      0        0 tun0
192.168.1.0     *               255.255.255.0   U     0      0        0 br0
192.168.0.0     *               255.255.255.0   U     0      0        0 vlan2
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
default         192.168.0.1     0.0.0.0         UG    0      0        0 vlan2

iptables (saída de iptables-save referente somente a TUN0)

# Generated by iptables-save v1.3.8 on Sun Aug 28 12:08:23 2016
*nat
:PREROUTING ACCEPT [50195:5904352]
:POSTROUTING ACCEPT [409:28145]
:OUTPUT ACCEPT [4413:306096]
-A POSTROUTING -o tun0 -j MASQUERADE
COMMIT
# Completed on Sun Aug 28 12:08:23 2016
# Generated by iptables-save v1.3.8 on Sun Aug 28 12:08:23 2016
*mangle
:PREROUTING ACCEPT [1628436:1350223724]
:INPUT ACCEPT [43707:3160699]
:FORWARD ACCEPT [1563428:1344198921]
:OUTPUT ACCEPT [13790:1556262]
:POSTROUTING ACCEPT [1576178:1345632445]
COMMIT
# Completed on Sun Aug 28 12:08:23 2016
# Generated by iptables-save v1.3.8 on Sun Aug 28 12:08:23 2016
*filter
:INPUT DROP [10689:641141]
:FORWARD ACCEPT [19:1151]
:OUTPUT ACCEPT [13539:1531250]
-A INPUT -i tun0 -j ACCEPT
COMMIT
# Completed on Sun Aug 28 12:08:23 2016

Configuração do TUN0 OpenVPN (opções relacionadas à segurança removidas)

local [IP_address]
port [PORT]
proto udp
dev tun
server 192.168.200.0 255.255.255.0
push "route 192.168.1.0 255.255.255.0"
client-to-client
keepalive 10 120
comp-lzo
persist-key
persist-tun
push "dhcp-option DNS 192.168.1.1"

ifconfig para interface TUN0 (por padrão, o OpenVPN traz esta interface para cima com a opção NOARP, mas mesmo se eu ativar isso novamente com o comando ifconfig tun0 arp isso não resolve o meu problema).

tun0       Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
           inet addr:192.168.200.1  P-t-P:192.168.200.2  Mask:255.255.255.255
           UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
           RX packets:311 errors:0 dropped:0 overruns:0 frame:0
           TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:100
           RX bytes:21166 (20.6 KiB)  TX bytes:3486 (3.4 KiB)

Minha pergunta é: como fazer essa interface TUN0 para começar a trabalhar com o ARP?

    
por Krzysztof Jakóbczyk 28.08.2016 / 12:25

1 resposta

0

O tráfego não-IP não é encaminhado pelas interfaces da Camada 3 ( tun ), isso é toda a beleza: você economiza em tráfego de broadcast e em cabeçalhos de ethernet. Você pode ler sobre tudo isso em o wiki do OpenVPN .

Eu não tenho certeza se entendi como o arpwake funciona, a página da Web que você vinculou é mais do que um wiki. Mas você pode tentar adicionar essa regra de firewall,

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

Isso reescreve todos os endereços IP de origem, nos cabeçalhos de pacote, com o endereço IP do roteador. Eu não sei se isso irá disparar arpwake , mas você pode tentar.

EDITAR :

Eu pensei em uma solução alternativa, que não usa arpwake . Adicione a seguinte regra iptables ,

iptables -A INPUT -i tun0  -s xxx.xxx.xxx.xxx/24 -d 192.168.1.4/32 -m state --state NEW -m state ! --state ESTABLISHED -j LOG --log-prefix "NEW_CONN_ATTEMPT"

onde xxx.xxx.xxx.xxx/24 é a rede do túnel VPN. Agora configure um script executável, rodando sob sudo , com o seguinte conteúdo:

tail -f /var/log/firewall.log | awk '/NEW_CONN_ATTEMPT/ {system("/usr/local/bin/myscript")}'

onde / usr / local / bin / myscript é um script que envia o pacote mágico para o NAS. Deve funcionar.

    
por 28.08.2016 / 13:22