总结:我正在寻找一个脚本或一个 cron 作业,它将定期在 Linux 主机(Raspberry Pi 上的 Fedora)上运行,它将检查路由器中是否仍然存在端口转发规则,如果不存在则添加它。目的是始终能够通过 SSH、VNC 和传输 Web 界面从家庭网络之外的互联网上的任何机器访问 Raspberry Pi Linux 主机。设置如下:
路由器:
Beetel 440Tx1 ADSL2 路由器+调制解调器+wifi。
设置:
路由器已连接到互联网(ISP 宽带)并具有动态外部 IP。它为我的计算机提供了一个私人家庭网络,内部 IP 192.168.xy 也充当 DHCP。
主持人:
带有 Fedora Linux 的 raspberry pi ARM 主机,始终运行 ssh、vnc,传输守护程序服务器在启动时启动。它还具有 no-ip.com dyndns 免费 DUC(动态更新客户端),可定期检查外部 IP 并将其绑定到主机字符串。因此,我总是可以通过解析 dyndns 字符串(如 myrouter.no-ip.org)来找到路由器的外部 IP。pi 有一个静态内部 IP,如 192.168.1.z。
转发端口:
只有通过以太网电缆或受密码保护的 Wi-Fi 连接到该网络时,才必须使用带有出厂凭据的 GUI/浏览器登录路由器
http://192.168.1.1/html/index1.html
我通过登录设置规则,将外部 IP 上端口 22、5900、9091 的任何流量转发到 192.168.1.z 上的 pi 上的相应监听程序(sshd、vncserver、transmission-daemon)。
问题:
此路由器在重新启动时会丢失上述端口转发规则,或者即使出现电力峰值且 UPS 必须暂时介入,也会通常会从我的 ISP 动态获取不同的外部 IP。
要求:
可以在我的 fedora linux pi 上运行的脚本或 cron 作业可以登录到我的路由器并定期轮询该端口转发规则是否存在,如果不存在则创建它。非常感谢您的帮助。
答案1
迷你UPnP是一个命令行 UPnP 客户端,允许您启用端口转发。源代码可用,因此您应该能够将其编译到 Pi 中。
我认为这是您需要的语法,但我没有机器可以测试它。您只需将以下内容放入脚本中,该脚本将为您设置 uPnP 端口
upnpc -a `ifconfig wlan0 | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1` 22 22 TCP
upnpc -a `ifconfig wlan0 | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1` 5900 5900 TCP
upnpc -a `ifconfig wlan0 | grep "inet addr" | cut -d : -f 2 | cut -d " " -f 1` 9091 9091 TCP