我有一个 Ubuntu 网络服务器,它使用iptables
PREROUTING 将端口转发80
到8000
。
因此,Web 进程侦听端口8000
。现在我想从同一台服务器向在其上运行的 Web 应用程序发送 curl。但这会引发连接被拒绝:
$ curl http://my.webite.com/on/same/server
curl: (7) Failed connect to my.webite.com:80; Connection refused
curl
-ing 在端口上8000
工作(但必须在端口 80 上工作)。
我还确保该 Web 服务器监听所有接口(不仅仅是物理接口):
$ netstat -ntl | grep LISTEN
...
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN
...
我的应用程序的域名(my.webite.com
)也解析为物理接口IP。
为什么我得到连接被拒绝?
答案1
PREROUTING 链不适用于本地(环回)流量。您需要在 OUTPUT 链中添加重定向规则,才能使其在本地系统上发挥作用。
例如:
iptables -t nat -A OUTPUT -i lo -p tcp --dport 80 -j REDIRECT --to-port 8000