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


0

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

enter image description here

ROT1是基于番茄的路由器。它具有BR0桥接网络接口,用于内部网络中具有子网192.168.1.0/24的所有客户端。其中一个客户端是NAS设备(NAS01),它提供一些基本服务,如ownCloud和SMB服务器。 LAP01和MOB01客户端都能够看到NAS01并使用其服务。 ROT1还配置了两个VPN:TAP0是一个与BR0桥接的OpenVPN桥接隧道,这就是客户端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 应用程序,因为该接口上没有ARP请求(TUN0) - 我已经在路由器上用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

iptables的 (输出 iptables-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"

ifconfig for TUN0接口 (默认情况下,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?

Answers:


0

非IP流量不通过第3层转发( TUN )接口,这是它的整体美:你节省广播流量和以太网头。你可以阅读所有这些 OpenVPN维基

我不确定我是怎么理解的 arpwake 工作,你链接到的网页更像是一个漫威而不是维基。但您可以尝试添加此防火墙规则,

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

这将使用路由器IP地址重写数据包标头中的所有源IP地址。我不知道这是否会触发 arpwake ,但你可以试试。

编辑

我想到了一种不使用的解决方法 arpwake 。添加以下内容 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的脚本。它应该工作。


嗨,遗憾的是这并没有解决问题,仍然没有ARP请求,但我想这是tun接口的具体情况。
Krzysztof Jakóbczyk

@KrzysztofJakóbczyk你可以清空arp缓存吗? ip neigh flush dev br0 ),然后尝试通过tun0连接到NAS?我不明白为什么这不起作用。我以为你会跑 arpwake 在ROT1服务器上,这将产生192.168.1.4的ARP请求,应该被捕获 arpwake 并转换为WOL魔术包。你还能检查一下ROT1的ARP请求是否真的被发送了吗?
MariusMatutiae

我已经完成了你的建议,但仍然没有运气。 arpwake 通常是网络嗅探工具,正在寻找从客户端到ROT1路由器的ARP请求。如果它通过命令行选项发现这样的MAC地址请求,它将自动将WOL数据包发送到主机所在网络的广播地址(通常它总是将WOL发送到每个子网的.255,而不必总是广播地址,但在我的情况下)。如果我查一下 tcpdump -i tun0 在TUN0接口上发生的事情我只能看到IP传输,没有ARP。
Krzysztof Jakóbczyk

ICMP也在工作,但不是ARP,但根据你的回答,这与TUN接口有关:它们只与IP相关的流量有关,这就是为什么TUN0接口是用NOARP选项启动的,甚至打开它的原因不允许我看到ARP流量。如果我使用TAP接口而不是TUN,则会捕获ARP请求 tcpdump -i br0 这是什么时候 arpwake 使用WOL启动NAS设备。
Krzysztof Jakóbczyk

@KrzysztofJakóbczyk好的,但我得到的是:为什么不 arpwake 激活时自己 路由器 为NAS发送ARP数据包?我希望 arpwake 不会仅仅由外部ARP请求触发,也不会由外部ARP请求触发。看到我暗示的是什么?
MariusMatutiae
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.