我想重定向环回网络接口上的端口 80,以便对该端口的访问实际上转到端口 8080。
我尝试使用以下命令,但它仅在应用程序侦听 127.0.0.1:8080 时有效,但如果应用程序侦听 127.1.2.3:8080 则无效。
sudo iptables -t nat -I OUTPUT -p tcp -o lo --dport 80 -j REDIRECT --to-ports 8080
我也尝试添加,--source 127.1.2.3/32 --destination 127.1.2.3/32
但仍然不起作用。
如果我打开侦听 127.0.0.1:8080 的应用程序,则重定向有效:
ssh remote -L127.0.0.1:8080:192.168.0.3:80
nc 127.0.0.1 80 # works
但如果我打开一个监听 127.1.2.3:8080 的应用程序,它就不起作用:
ssh remote -L127.1.2.3:8080:192.168.0.3:80
nc 127.1.2.3 80 # fails
nc: connect to 127.1.2.3 port 80 (tcp) failed: Connection refused
nc 127.1.2.3 8080 # works, so the application is still listening on 8080
如何将 127.xxx 上的端口 8080 重定向到同一 IP 上的端口 80?
更新:动机
我尝试使用 SSH 执行以下端口转发(127.1.2.3:80 → 192.168.0.3:80 和 127.1.2.4:80 → 192.168.0.4:80):
ssh remote -L127.1.2.3:80:192.168.0.3:80 -L127.1.2.4:80:192.168.0.4:80
由于端口 80 是“特权”端口,因此 ssh 无法在本地主机上打开它。有几种方法可以避免这种情况:
sudo ssh
,但我不想在 root 帐户上复制我的 ssh 配置和密钥。- 使用功能,但软件包更新可能会破坏这一点。
- 使用不同的端口(例如 8080),该端口可以工作,但非相对 URL 会被破坏。
- 将特权端口重新路由到非特权端口,这就是我想要做的。它适用于 127.0.0.1 上的单个重定向,但如果我在 127.0.0.1 以外的 IP 上进行重定向,则会失败(见上文)。