iptables重定向到本地主机?


13

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


问题在于,通过简单的重定向(目标IP地址NAT),您将丢失原始目标IP地址。您是要设置透明的HTTP代理还是应该处理HTTP以外的其他协议?
pabouk

透明与否无关紧要
DankMemes

将所有流量重定向到代理透明代理的基础:)
pabouk

这里的另一个答案真的帮了我: unix.stackexchange.com/questions/111433/...
雷恩T.

Answers:


6
sysctl net.ipv4.ip_forward=1 
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8080

1
不要使用粗体....

谢谢!我还没有尝试过,但是我怀疑我缺少的是ip forward命令。下次,请使用代码块,而不要使用粗体。
DankMemes

@AlexAntonov请使用代码块。在编辑模式下选择文本,然后单击括号图标。
DankMemes

@ZoveGames,对不起,已修复它。
亚历克斯·安东诺夫

2
我对此进行了试验。ip_forward sysctl是不必要的。但是,这里的route_localnet选项是。我现在看到的正是Juan Cespedes的回答
马特·乔纳

31

可以使用来完成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

ip_forward不需要,因为数据包不会转发,但是如果您不包括sysctl route_localnet(仅在内核> = 3.6中有效),则该数据包将被内核丢弃,因为它认为它是“ martian”,即将到来从外部接收并且目标地址为127.0.0.1


是的,该作品
Nick De Greek

不知道route_localnet。这么老了,无法弄清楚ip_forward为什么不起作用(怀疑它不是必需的,但还是尝试了)。
dmourati '16

1
确保保存net.ipv4.conf.all.route_localnet=1/etc/sysctl.conf否则它将不会永久保存,并且在重新启动后,变量将返回0,从而导致数据包丢失。然后很难弄清楚为什么现在一切都无法正常工作……发生在我身上。;)

对不起,死灵一个老问题,但存在的IPv6等同net.ipv4.conf.all.route_localnet与使用ip6tables
Kebian
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.