我正在尝试通过互联网启用 WOL。我创建了 Discord Bot,每当我向 discord 发送特殊命令时,它都会使用 python 库https://pypi.org/project/wakeonlan/发送一个魔法数据包。
当我在我的局域网内的台式计算机上托管机器人并向 Discord 发送一个特殊命令时,该机器人将向我的公共 ip(使用主机名)发送一个魔法数据包。我正在使用 ddns no-ip 来解析我的 ip。我的调制解调器路由器开箱即用仅支持 no-ip。这工作得很好,我的第二台电脑启动了(稍后当我说“第二台电脑”时,我总是指我试图唤醒的电脑)。
现在,如果我停止在台式机上托管我的 discord 机器人并将其托管在 Azure 中,它并不总是有效。有时它确实如此,据我所知,这是由于我的路由器缓存 ARP 条目一段时间所致。但有趣的是,即使它可以短暂工作,如果我有任何其他计算机通过网络电缆连接到我的路由器而不是我试图启动的电脑,它也永远不会工作。一段时间后,它无论如何都会完全停止工作。
所以我有一个来自我的 ISP 的调制解调器,它有一个内置路由器(我猜是交换机,因为它有四个端口)。不幸的是我找不到它的模型。就像我说的,它支持 ddns (no-ip)。它支持 ip 保留,因此我可以将预定义的 IP 地址分配给某些 mac 地址。通过这种方式,我定义了我试图唤醒的 PC 始终获得相同的 IP 地址。然后我在该路由器中创建了端口转发规则,说任何进入端口 7(我也尝试过端口 9)的传入 UDP 数据包(我的机器人正在发送的魔术数据包)都被转发到我连接到我的第二台电脑的那个 IP 地址MAC地址。
在这一点上,我还想说,显然我的路由器不支持转发到广播 IP 地址。
我做了一些研究,我发现我所做的可能还不够。人们说我应该能够手动将条目添加到 ARP 映射表,不幸的是我当前的路由器/交换机不能这样做。
所以,我去买了一个二手的 TP-LINK TL-SG2008 智能交换机,它支持静态 ARP 映射和其他我不知道但可能很方便的有趣东西。
现在,我不再将我的第二台电脑直接连接到我的调制解调器/路由器,而是将我的新交换机连接到我的调制解调器/路由器。TL-SG2008 交换机从 DHCP 获取 IP 地址(我已经再次配置为始终相同)并且我能够使用其 IP 地址和 Web 浏览器登录管理门户。
我在那里定义了静态 ARP 映射条目,说我的第二台电脑 MAC 地址映射到这个特定的 IP。请记住,这是我已经在我的路由器 ip 保留列表中定义的 IP,因此其他设备将永远无法获得它。
现在我终于将我的第二台电脑连接到我的新交换机,在 Azure 中托管了 discord 机器人,向 discord 发送了一个命令,但什么也没有。
然后我在本地托管了 bot,向 Discord 发送了一个命令,它开始工作了。
然后我将另一台电脑连接到我的调制解调器/路由器,在本地托管机器人,向 Discord 发送命令,但它无法正常工作。然而,这是目前最小的问题,我现在可以忽略它,但我只是想指出它,因为它可能会提供一些想法。
在这一点上,我迷路了,不知道这应该如何工作,对于给定的设备,我什至能够实现这一目标吗?
令我非常困扰的是,它在一段时间内从互联网上运行得如此清楚,至少在理论上是可能的。
任何帮助将不胜感激,我很乐意根据需要分享更多信息。