![将流量从主机转发到主机的容器](https://linux22.com/image/728433/%E5%B0%86%E6%B5%81%E9%87%8F%E4%BB%8E%E4%B8%BB%E6%9C%BA%E8%BD%AC%E5%8F%91%E5%88%B0%E4%B8%BB%E6%9C%BA%E7%9A%84%E5%AE%B9%E5%99%A8.png)
我在网络中有两台主机192.168.0.0/24
:
- 主机 A
192.168.0.15
- 主机B
192.168.0.13
并且有一个从B
到 的远程 ssh 隧道A
:
ssh -R 192.168.0.13:8080:192.168.0.15:8002 192.168.0.13 -N
并且隧道畅通无阻。
主机A
运行一个在端口 80 上运行 nginx 的容器nginx
。我想将流量转发192.168.0.15:8002
到该 nginx 服务器。该怎么做?
所以,
如果有人发送一个GET request
,curl 192.168.0.13:8080
他将从容器中运行的 nginx 获得响应192.168.0.15
。流程应该是:
192.168.0.14 (for example) ---GET--> 192.168.0.13:8080
192.168.0.13 --(SSH TUNNEL)--> 192.168.0.15:8002
192.168.0.15:8002 -----------> 172.17.0.2:80 (nginx container)
172.17.0.2 ------------> 192.168.0.15
192.168.0.15 ------------> 192.168.0.13
192.168.0.13 ------------> 192.168.0.14
PS:我必须使用 iptables-我无法更改现有的隧道。
答案1
您可以使用 REDIRECT 扩展实现这一点。
您可以在主机 A 上使用以下命令将所有 TCP 连接的目标从端口 8002 更改为端口 80:
iptables -t nat -I PREROUTING -p tcp --dport 8002 -j REDIRECT --to-port 80
如果您希望重定向也适用于来自本地主机的连接,请添加
iptables -t nat -I OUTPUT -p tcp --dport 8002 -j REDIRECT --to-port 80