该情况涉及3台机器:
- A某些笔记本电脑通过任何方式连接到互联网
- 乙通过标准ISP连接到互联网的服务器(dyndns提供的静态IP:myserver.dyndns.com)
- C另一台服务器通过 4G 适配器连接到互联网
A<--- ISP1 --- ISP 2 --->乙<--- ISP 2 --- 4G --->C
由于 4G 加密狗拒绝新的传入连接,我设置了一个autossh
通道,通过 B 从 A 连接到 C:
autossh -M 0 -N [email protected] -R 10022:127.0.0.1:22 -R 10000:127.0.0.1:10000
效果很好。
现在,我想通过键入以下内容来访问 4G dongle 的 Web 界面
myserver.dyndns.com:80
所以我尝试了NATing:
在乙:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:10000
和
iptables -t nat -A POSTROUTING -d 127.0.0.1 --dport 10000 -j MASQUERADE`
在C:
iptables -t nat -A PREROUTING -p tcp --dport 10000 -j DNAT --to-destination 192.168.8.1:80
和
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
注:eth1
是4G dongle的接口,C该接口上的 IP 是 192.168.8.100,加密狗的 IP 是 192.168.8.1。
不幸的是,这不起作用。我还激活了IP转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
打字时
iptables -t nat -L -v -n
在乙和C,只有 PREROUTING 行乙每次尝试后都会看到其数据包计数增加。
这可能是由于对工作原理的不完全理解造成的netfilter
。
如果您能提供任何帮助,我将不胜感激!
答案1
请问您能提供iptables -t filter -nvL
服务器 B 和 C 上的输出吗?
我猜该autossh
频道在服务器 C 上运行。对吗?如果是这样,我建议采用不同的方法。在 B 上,您需要 REDIRECT 规则,因为内核不会允许非特权用户打开端口 80。
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 10000
iptables -t filter -A INPUT -p tcp --dport 10000 -j ACCEPT
(编辑):在服务器 B 上,GatewayPorts
必须在以下位置启用/etc/ssh/sshd_config
:
# /etc/ssh/sshd_config
GatewayPorts clientspecified
在服务器 C 上,通过修改参数将连接直接转发到加密狗autossh
:
autossh -M 0 -N [email protected] -R 10022:127.0.0.1:22 \
-R :10000:192.168.8.1:80
我在您的设置中看到的唯一错误在于PREROUTING
服务器 C 的链规则。在这种情况下,不会对其进行评估,因为它仅影响通过网络接口进入的数据包。创建的连接ssh
是本地生成的,因此会受到OUTPUT
链中规则的影响。