![如何使端口重新路由在本地工作?](https://linux22.com/image/1578960/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%AB%AF%E5%8F%A3%E9%87%8D%E6%96%B0%E8%B7%AF%E7%94%B1%E5%9C%A8%E6%9C%AC%E5%9C%B0%E5%B7%A5%E4%BD%9C%EF%BC%9F.png)
请看这个命令:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
我使用它来重新路由从80
到 的任何传入流量8080
,因为该计算机上的 Apache 2 服务器以非特权用户身份运行,并且只有 root 才能打开众所周知的端口。它保存在 中/etc/iptables/rules.v4
,如果我在远程计算机上打开网站,它就可以正常工作。虚拟主机绑定到192.168.X.X:8080
。
但是,如果我通过 ssh 进入该服务器并打开启用了 X11Forwarding 的浏览器,在地址栏中输入 IP 不会打开该网站,而是连接会超时。只有当我添加 :8080
到地址时它才会起作用。所以归根结底,在同一台计算机上打开时,端口路由不起作用。
我的问题是:我需要如何修改或添加路由指令,以便它也可以在本地工作?
答案1
之所以不起作用,是因为来自本地源的包没有经过路由阶段,因为本地包不需要路由。因此,此规则不适用。要路由来自本地源的包,需要将其直接发送到 OUTPUT:
iptables -t nat -I OUTPUT -p tcp -o lo --dport 80 -j REDIRECT --to-ports 8080