我有一台远程 Linux 计算机连接到本地 ssh 服务器,在端口 5051 上创建反向 ssh 隧道。在 ssh 服务器本身上,我运行以下两个命令,以便为远程计算机提供本地 IP 地址。
ip addr add 192.168.1.51/24 dev eth0
iptables -t nat -A PREROUTING -d 192.168.1.51 -p tcp --dport 22 -j REDIRECT --to-port 5051
在 ssh 服务器上我也配置了GatewayPorts 是在 sshd_conf 中。
如果我通过网络上的第三台计算机在 192.168.1.51 上进行 ssh,我就可以直接连接到远程 Linux 计算机。
但是如果我从 ssh 服务器 ssh 192.168.1.51,我会再次连接到 ssh 服务器。我无法连接到远程计算机。从 ssh 服务器连接到远程计算机的唯一方法是使用ssh root@localhost -p 5051
但我不想这么做。我希望能够从 ssh 服务器 ssh 192.168.1.51,并连接到远程计算机。
答案1
IPTables NAT 表的 PREROUTING 链规则仅适用于通过连接到网络的网络适配器从其他系统到达的 IP 数据包。
如果要将规则应用于本地生成的数据包,则需要向OUTPUT链添加规则。
因此,你需要这样做:
iptables -t nat -A OUTPUT -d 192.168.1.51 -p tcp --dport 22 -j REDIRECT --to-port 5051