通过ssh隧道进行IP转发

通过ssh隧道进行IP转发

该情况涉及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链中规则的影响。

相关内容