我有一个在 127.0.0.1:8000 上运行的 HTTP 服务器。如何使用 iptables 或其他工具将外部流量路由到该服务器?我希望能够从浏览器访问 my.ip.addr:8000。
iptables -A PREROUTING -i eth0 -p tcp --dport 8000 -j REDIRECT --to-ports 8000
没有帮助
编辑:
为了测试这是否有效,我使用了以下 node.js 脚本:
// Load the http module to create an http server.
var http = require('http');
// Configure our HTTP server to respond with Hello World to all requests.
var server = http.createServer(function (request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.end("Hello World\n");
});
// Listen on port 8000, IP defaults to 127.0.0.1
server.listen(8000, "127.0.0.1");
// Put a friendly message on the terminal
console.log("Server running at http://127.0.0.1:8000/");
答案1
您不需要 iptables 来实现这一点,最简单的方法是在“server.listen”行上更改 IP 地址。它可以是公共 IP 或“0.0.0.0”。后者会将 Web 服务器绑定到所有可用 IP。
您的另一个选择是使用在代理配置中设置的另一个 Web 服务器。Nginx 或 Apache httpd 非常适合此用途。
答案2
REDIRECT
不将连接重定向到127.0.0.1
,这样做将不起作用,因为127.0.0.1
无法用于与客户端 IP 进行通信。
REDIRECT
将流量重定向到数据包到达的接口的 IP 地址。您必须明确侦听该 IP 地址或绑定到任何地址 0.0.0.0
。