Uso del protocolo ARP con túnel enrutado OpenVPN (TUN)

1

He configurado la red que se muestra en el siguiente diagrama:

ingrese la descripción de la imagen aquí

ROT1 es un enrutador basado en tomate. Tiene una interfaz de red en puente BR0 para todos los clientes dentro de la red interna con la subred 192.168.1.0/24. Uno de los clientes es un dispositivo NAS (NAS01) que proporciona algunos servicios básicos como ownCloud y servidor SMB. Tanto los clientes LAP01 como MOB01 pueden ver NAS01 y usar sus servicios. ROT1 también tiene dos VPN configuradas: TAP0 es un túnel puenteado OpenVPN que está puenteado con BR0, por eso el cliente LAP04 recibe la dirección IP del servidor DHCP dentro de la subred 192.168.1.0/24. Este cliente también puede hacer ping al dispositivo NAS01 dentro de la subred interna. El enrutador ROT01 ejecuta un arpwakeprograma para activar automáticamente NAS01 con Magic Packet cuando algún otro cliente de la red solicita el host con una solicitud ARP (quién tiene). Puede encontrar la descripción de la aplicación y los enlaces para su código fuenteaquí . arpwakela aplicación está escuchando en BR0 la solicitud ARP que contiene la dirección MAC de NAS01 y envía automáticamente Magic Packet si uno de los clientes dentro de la red lo solicita. El problema es que estoy tratando de configurar el túnel VPN enrutado también con OpenVPN que me permitirá usar la arpwakeaplicación para activar automáticamente NAS01 cuando uno de los clientes de la red TUN0 lo solicite. Si NAS01 está activo, puedo hacer ping y usar todos los servicios, pero si está inactivo, no puedo activarlo con la arpwakeaplicación, porque no hay solicitudes ARP en esa interfaz (TUN0). Ya lo he verificado con tcpdump en el enrutador . También intenté usar Proxy ARP con el comando, echo 1 > /proc/sys/net/ipv4/conf/all/proxy_arppero aún así no funciona.

Aquí está la configuración del enrutador:

Rutas

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 (salida de iptables-savesolo 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

Configuración TUN0 OpenVPN (opciones relacionadas con la seguridad eliminadas)

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 la interfaz TUN0 (de forma predeterminada, OpenVPN abre esta interfaz con la opción NOARP, pero incluso si vuelvo a activarlo con el comando ifconfig tun0 arpno resuelve mi 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)

Mi pregunta es: ¿cómo hacer que esta interfaz TUN0 comience a funcionar con ARP?

Krzysztof Jakóbczyk
fuente

Respuestas:

1

El tráfico que no es IP no se reenvía a través de las interfaces de capa 3 ( tun ), eso es todo: es un ahorro en el tráfico de difusión y en los encabezados de Ethernet. Puede leer todo esto en la wiki de OpenVPN .

No estoy seguro de entender cómo funciona arpwake , la página web a la que se vinculó es más una maravilla que una wiki. Pero puede intentar agregar esta regla de firewall,

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

Esto reescribe todas las direcciones IP de origen, en los encabezados de los paquetes, con la dirección IP del enrutador. No sé si esto activará arpwake , pero puedes intentarlo.

EDITAR :

He pensado en una solución alternativa, que no utiliza arpwake . Agregue la siguiente regla de 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"

donde xxx.xxx.xxx.xxx/24 es la red del túnel VPN. Ahora configure un script ejecutable, que se ejecute bajo sudo , con el siguiente contenido:

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

donde / usr / local / bin / myscript es un script que envía el paquete mágico al NAS. Deberia de funcionar.

MariusMatutiae
fuente
Hola, desafortunadamente esto no resuelve el problema, todavía no hay solicitudes ARP, pero supongo que esto es específico de la interfaz tun.
Krzysztof Jakóbczyk
@ KrzysztofJakóbczyk ¿Puede vaciar el caché de arp ( ip neigh flush dev br0 ), luego intente conectarse al NAS a través de tun0? No entiendo por qué esto no funciona. Pensé que ejecutarías arpwake en el servidor ROT1, y eso haría una solicitud ARP para 192.168.1.4, que debería ser capturada por arpwake y convertida en un paquete mágico WOL. ¿También puede verificar que la solicitud ARP de ROT1 se envíe realmente?
MariusMatutiae
He hecho lo que has sugerido pero aún sin suerte. Arpwake en general es una herramienta de rastreo de red que busca solicitudes ARP que provengan de clientes al enrutador ROT1. Si encuentra que dicha solicitud de dirección MAC pasó a través de la opción de línea de comando, enviará automáticamente el paquete WOL a la dirección de difusión de la red en la que reside el host (en general, siempre envía WOL a .255 de cada subred lo que no tiene que ser siempre la dirección de transmisión, pero es en mi caso). Si verifico con tcpdump -i tun0 lo que sucede en la interfaz TUN0, solo puedo ver las transmisiones IP, no las ARP.
Krzysztof Jakóbczyk
También ICMP está funcionando, pero no ARP, sin embargo, esto está relacionado, según su respuesta, con interfaces TUN específicas: solo funcionan con tráfico relacionado con IP, es por eso que la interfaz TUN0 se presenta con la opción NOARP e incluso se activa no me permite ver el tráfico ARP. Si uso la interfaz TAP en lugar de TUN, las solicitudes ARP se capturan con tcpdump -i br0 y es cuando arpwake inicia el dispositivo NAS de arranque con WOL.
Krzysztof Jakóbczyk
@ KrzysztofJakóbczyk Ok, pero a lo que me refiero es: ¿por qué Arpwake no se activa cuando el enrutador envía un paquete ARP para el NAS? Esperaba que arpwake no se activara solo por solicitudes ARP externas, sino también por las externas. ¿Ves a qué estoy insinuando?
MariusMatutiae