iptables 重定向到本地主机?

Dan*_*mes 14 networking iptables

假设我有一个网络,其中一台服务器将所有连接从网络内部路由到 Internet。我如何设置 iptables,而不是将传入连接路由到 Internet,而是将它们路由到本地主机端口 8080。感谢所有帮助。

小智 33

这可以用 完成iptables,但只能用内核 >= 3.6。

你将不得不做:

sysctl -w net.ipv4.conf.all.route_localnet=1
iptables -t nat -I PREROUTING -p tcp --dport 80 -j DNAT --to 127.0.0.1:8080
Run Code Online (Sandbox Code Playgroud)

ip_forward没有必要,因为数据包没有被转发,但如果你不包括 sysctl for route_localnet(它只适用于内核 >= 3.6),数据包将被内核丢弃,因为它认为它是一个“火星人”,即将到来来自外部且目标地址为 127.0.0.1

  • 确保在`/etc/sysctl.conf`中保存`net.ipv4.conf.all.route_localnet=1`,否则它不会持久,并且在重新启动后变量将返回到0,导致数据包丢失。然后就很难理解为什么现在一切都不起作用了……这发生在我身上。 ;) (2认同)
  • 抱歉,破坏了一个老问题,但是是否有与“net.ipv4.conf.all.route_localnet”等价的 ipv6 与“ip6tables”一起使用? (2认同)

Ale*_*nov 8

sysctl net.ipv4.ip_forward=1 
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080
Run Code Online (Sandbox Code Playgroud)

  • 我对此进行了实验。ip_forward sysctl 不是必需的。然而 route_localnet 选项 [here](http://unix.stackexchange.com/a/112232/5587) 是。我现在看到这正是 Juan Cespedes 的 [答案](http://superuser.com/a/807612/15896) 所说的。 (4认同)