远程唤醒 LAN 信号未到达目标计算机

远程唤醒 LAN 信号未到达目标计算机

我想触发唤醒位于防火墙后面的目标计算机。其信号是发送至 9/udp 端口​​的魔术数据包。

我的信号通过路由器到达具有两个以太网接口的 Debian 服务器。这是“/etc/network/interfaces”文件:

iface eth0 inet static (-->router)
  address 192.168.0.10
  netmask 255.255.255.0
  broadcast 192.168.0.255
  network 192.168.0.0
  gateway 192.168.0.1

iface eth1 inet static (-->local lan)
  address 192.168.1.10
  netmask 255.255.255.0
  broadcast 192.168.1.255
  network 192.168.1.0</span>

这是命令“route -n”的结果:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1

最后,这些是 iptables 制作 dnat 的规则:

iptables -A INPUT -p udp --dport 9 -i $RUTER_IFACE -j ACCEPT
iptables -A OUTPUT -p udp --sport 9 -d $LAN_NET -j ACCEPT
iptables -t nat -A PREROUTING -i $RUTER_IFACE -p udp --dport 9 -j DNAT --to $TARGET
iptables -A FORWARD -p udp --dport 9 -i $RUTER_IFACE -o $LAN_IFACE -j ACCEPT

好吧,我检查了流量,发现魔术数据包到达了 eth0 接口。另外,如果 $TARGET 的值为一个 IP 地址(例如 192.168.1.65),则数据包从 eth0 到 eth1 并到达目标计算机(192.168.1.65)。但是,如果 $TARGET 的值是 IP 范围(例如 192.168.1.50-192.168.1.70),则数据包不会从 eth0 发送到 eth1,也不会到达目标计算机。

我需要输入一系列 IP(不是一个 IP 地址),因为魔术数据包不是发送到 IP,而是发送到 MAC 地址。此外,本地 LAN 中的计算机没有静态 IP。 dnsmasq 守护进程(在 Debian 服务器中)将 IP 出租给本地计算机。

嗯,我认为问题在于 Debian 服务器中的路由。但事实是我不知道如何解决。我会感谢你的帮助。

我很抱歉因为我的英语不好。非常感谢。

答案1

我认为您想要实现的目标称为“子网定向广播”,其中 LAN 唤醒数据包将转发到路由器后面运行的每个设备,如果 WoL 数据包中的信息与其匹配,则设备将被唤醒。

第一:如果您的服务器/路由器本身应该被 WoL 唤醒(第 1 行)并发送 WoL 数据包(第 2 行),则只需要前两行 iptables 行。如果您只想将 WoL 数据包从“外部”发送到路由器后面的主机,则不需要这两行。

第二:WoL 数据包应转发到“广播地址”,该地址会将数据包广播到网络上的所有计算机。因此$TARGET应设置为192.168.1.255.

此外,您还需要启用 IPv4 转发。

仅当您有任何会丢弃此类数据包的规则或 FORWARD 链中的“DROP”策略时,才需要最后一个 iptables 命令。

相关内容