使用 ARP 协议和 OpenVPN 路由(TUN)隧道

使用 ARP 协议和 OpenVPN 路由(TUN)隧道

我已经配置了下图所示的网络:

在此处输入图片描述

ROT1 是基于 Tomato 的路由器。它具有 BR0 桥接网络接口,用于内部网络内子网为 192.168.1.0/24 的所有客户端。其中一个客户端是 NAS 设备 (NAS01),它提供一些基本服务,如 ownCloud 和 SMB 服务器。LAP01 和 MOB01 客户端都能够看到 NAS01 并使用其服务。ROT1 还配置了两个 VPN:TAP0 是一个 OpenVPN 桥接隧道,与 BR0 桥接,这就是客户端 LAP04 从子网 192.168.1.0/24 内的 DHCP 服务器接收 IP 地址的原因。此客户端还能够在内部子网内 ping NAS01 设备。路由器 ROT01 正在运行arpwake程序,当网络中其他客户端通过 ARP 请求(who-has)请求主机时,使用 Magic Packet 自动唤醒 NAS01。您可以找到应用程序的描述及其源代码的链接这里arpwake应用程序正在 BR0 上侦听包含 NAS01 MAC 地址的 ARP 请求,如果网络内的某个客户端请求,则自动发送 Magic Packet。问题是我正在尝试使用 OpenVPN 设置路由 VPN 隧道,这将允许我使用arpwake应用程序在 TUN0 网络的某个客户端请求时自动唤醒 NAS01。如果 NAS01 已启动,我可以 ping 它并使用所有服务,但如果它已关闭,我无法使用arpwake应用程序唤醒它,因为该接口(TUN0)上没有 ARP 请求 - 我已经使用路由器上的 tcpdump 检查过。我也尝试过使用命令的代理 ARP echo 1 > /proc/sys/net/ipv4/conf/all/proxy_arp,但仍然不起作用。

以下是路由器的配置:

航线

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

iptablesiptables-save(仅涉及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

TUN0 OpenVPN 配置(删除了安全相关选项)

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"

TUN0 接口的 ifconfig(默认情况下,OpenVPN 使用 NOARP 选项启动此接口,但即使我使用命令重新打开它也ifconfig tun0 arp无法解决我的问题)。

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)

我的问题是:如何让这个TUN0接口开始与ARP一起工作?

答案1

非 IP 流量不通过第 3 层转发() 接口,这就是它的全部魅力所在:你可以节省广播流量和以太网报头。你可以在OpenVPN 维基

我不确定我是否理解阿普韦克有效,您链接到的网页更像是一篇杂谈,而不是维基百科。但您可以尝试添加此防火墙规则,

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

这会将数据包头中的所有源 IP 地址重写为路由器 IP 地址。我不知道这是否会触发阿普韦克,但你可以尝试一下。

编辑

我想到了一个解决方法,它不使用阿普韦克.添加以下内容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"

在哪里xxx.xxx.xxx.xxx/24是 VPN 隧道的网络。现在设置一个可执行脚本,在须藤,内容如下:

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

在哪里在 /usr/local/bin/myscript 中是一个将魔术包发送到 NAS 的脚本。它应该可以工作。

相关内容