![SSH 隧道端口转发](https://linux22.com/image/760583/SSH%20%E9%9A%A7%E9%81%93%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91.png)
我有 2 个虚拟机,一个有私有 IP 地址(在 NAT 后面),另一个有公共 IP 地址。我使用 NAT 建立了 SSH 隧道。目标是将公共虚拟机连接到 NAT 后面的网络并通过它转发一些流量。目的是用公共服务器上的类似应用程序欺骗在此网络上运行的应用程序(用于测试目的)。
所以我做了类似的事情:
启用隧道
sudo ssh [email protected] -w 0:0
寻址
ifconfig tun0 10.253.253.1/30 pointopoint 10.253.253.2 - Local
ifconfig tun0 10.253.253.2/30 pointopoint 10.253.253.1 - Remote
添加内网路由
ip route add 10.0.3.0/24 via 10.253.253.1
用于双向沟通(实际上对此并不确定)
sudo arp -sD 10.253.253.1 ens18 pub
本地端口转发
sudo sysctl -w net.ipv4.ip_forward=1
sudo iptables -I FORWARD 1 -s 10.253.253.1 -j ACCEPT
sudo iptables -I FORWARD 1 -d 10.253.253.1 -j ACCEPT
sudo iptables -t nat -A POSTROUTING -s 10.253.253.1 -j MASQUERADE
实际上,这几乎可以正常工作,当我关闭本地主机上的应用程序服务时,它会将流量转发到远程主机上。但有一个主要问题 - 该本地服务器正在端口 4660 上发送请求,而其他(内部应用程序)在端口 4661 上响应。看来我需要额外的规则来将端口 4661 上的所有传入流量转发到端口 4660 的隧道接口。如何处理这个问题?我不太熟悉 iptables,但我尝试了类似的东西,但它不起作用:
iptables -A PREROUTING -t nat -i eth0 -p udp --dport 4661 -j DNAT --to 10.253.253.1:4660
iptables -A FORWARD -p udp -d 10.253.253.1 --dport 4660 -j ACCEPT
答案1
好的,我让它工作了:
iptables -A PREROUTING -t nat -i eth0 -p udp --dport 4661 -j DNAT --to 10.253.253.2:4661(remote tun address)