为了避免以 root 身份运行进程,我想在端口 8000 上运行服务器,同时将进入端口 80 的所有 TCP 数据包路由到端口 8000,反之亦然。
我使用 Arch Linux 并制作了一个iptables 重置根据这个段落。
之后我运行了以下命令:iptables -t nat -A PREROUTING -i enp0s25 -p tcp --dport 80 -j REDIRECT --to-port 8000
这是到处都推荐的。我enp0s25
从我的ip -4 addr
输出中得到了。
现在我有一个正在运行的 nodejs 服务器,0.0.0.0:8000
并向我的公共 IP 发出请求。如果我使用以下命令,我会得到有效的响应:curl xxx.xxx.xxx.xx:8000
。但我想使用 实现相同的有效响应,curl xxx.xxx.xxx.xx
但在这里我得到了错误curl: (7) Failed to connect
。
谢谢你!
答案1
iptables -t nat -A PREROUTING -i enp0s25 -p tcp --dport 80 -j REDIRECT --to-port 8000
将传入的流量重新路由到 enp0s25 (面向外部的接口),不是到本地主机。如果您在同一个框 (localhost) 上运行 curl,它将只能看到 8000。
如果你正在远程访问它,我会检查主机防火墙是否允许传入端口 80