我的家庭网络中有 3 个设备:一个 Netgear ReadyNAS、一个运行 Raspbian Debian 的 Raspberry Pi [Pi1] 和一个运行 XBMC 的 Raspberry Pi [Pi2],我认为后者也是基于 Debian。
我已经在路由器上设置了 3 个端口转发规则,现在可以通过网络顺利连接到 ReadyNas 和 Pi1。
Pi2 无法联系,连接被拒绝。我已将适用于 ReadyNas 的规则重新指向 Pi2,但仍然不起作用,这让我相信这是 Pi 的问题。我尝试了端口 22(SSH)和 8001(Web 服务器)
在内部,我可以毫无问题地连接到 Pi2。
我最关心的服务是端口 22 上的 SSH,我的大部分测试都用到这个端口。最终,我也想转发 Web 服务器端口。
可能出了什么问题?
答案1
您应该检查 XMBC Pi 上的防火墙规则。原因是,出于安全考虑,一些预配置的盒子会禁止所有来自 LAN 之外的连接。
执行此操作的命令是
iptables -t filter -L -n -v
其余桌子也一样,纳特和曼格尔。如果你能按照这些规则行事,那么这就是最简单的解决方案。
或者,如果你的路由器运行 dd-wrt、OpenWrt、Tomato 等软件,则以下规则在路由器上
iptables -t nat -A POSTROUTING -o LAN_IFACE -s ! 192.168.0.0/24 -d 192.168.0.15 -p tcp --dport 22 -j MASQUERADE
假设您的家庭网络是 192.168.0.0/24,顽固的 Pi 是 192.168.0.15,路由器的 LAN 接口称为 LAN_IFACE。该规则只是将数据包的来源重写为来自路由器本身(在上述假设下为 192.168.0.1),从而欺骗 XMBC 认为连接是在本地而不是远程发起的。
最后,如果你的路由器不是允许上述操作,如果你有其他 Linux 机器(比如,我猜是第一台 Pi),你可以
将 Pi2 的连接端口转发到 Pi1 的一些高编号端口
伪装后,将这些数据包重定向到 Pi2 及其正确的端口。
这次,每个端口都需要两个命令:让我们再次考虑 ssh,假设路由器已将 Pi2 的端口转发 ssh 连接到 Pi1 的 51111 端口(192.168.0.10:51111)。然后:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 51111 -j DNAT --to 192.168.0.15:22
iptables -A FORWARD -p tcp -d 192.168.0.15 --dport 22 -j ACCEPT
只要确保你已经允许在 Pi1 上转发,
sysctl net.ipv4.conf.eth0.forwarding=1