首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本地宿主DNAT (127.0.0.1)

本地宿主DNAT (127.0.0.1)
EN

Server Fault用户
提问于 2013-11-07 21:02:35
回答 3查看 8K关注 0票数 3

我想在Linux3.x上设置一个TCP DNAT,从127.0.0.1,端口4242到11.22.33.44,端口5353 (目前是3.2.52,但如果需要的话,我可以升级)。

看起来简单的DNAT规则设置不起作用,telnet 127.0.0.1 4242Trying 127.0.0.1...中挂了一分钟,然后超时。可能是因为内核丢弃了返回的数据包(例如SYN+ACK),因为它认为它们是火星人。我不需要解释为什么简单的解决方案不能工作,我需要一个解决方案,即使它很复杂(例如,它涉及创建可能的规则)。

我可以从127.0.0.0/8网络之外的另一个本地IP地址建立一个通常的DNAT,但现在我需要127.0.0.1作为目标地址。我知道我可以设置一个用户级的端口转发过程,但是现在我需要一个可以使用iptables建立的解决方案,而不需要辅助进程。

我在谷歌上搜索了一个小时。它被问了多次,但我找不到任何可行的解决办法。

还有很多关于DNAT到127.0.0.1的问题,但我不需要,我需要的正好相反。

请注意,单个iptables -j REDIRECT规则不起作用,因为我需要将传出数据包的IP地址从127.0.0.1更改为11.22.33.44,而-j REDIRECT不能更改IP地址。

EN

回答 3

Server Fault用户

发布于 2016-03-30 16:33:51

这对我来说是可行的,将流量从localhost:8081路由到172.17.0.1:80,其中172.17.0.1是桥接口docker0后面的一个veth。

代码语言:javascript
复制
sysctl -w net.ipv4.conf.docker0.route_localnet=1
iptables -t nat -A OUTPUT -o lo -p tcp -m tcp --dport 8081 -j DNAT --to-destination 172.17.0.1:80
iptables -t nat -A POSTROUTING -o docker0 -m addrtype --src-type LOCAL --dst-type UNICAST -j MASQUERADE

拼图的一个关键部分是MASQUERADE规则。

进一步的启示:

票数 6
EN

Server Fault用户

发布于 2018-04-12 09:54:47

您必须运行以下三个命令才能使其工作:

代码语言:javascript
复制
iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 --dport 4242 -j DNAT --to 11.22.33.44:5353
sysctl -w net.ipv4.conf.eth0.route_localnet=1
iptables -t nat -A POSTROUTING -p tcp -s 127.0.0.1 -d 11.22.33.44 --dport 5353 -j SNAT --to $your-eth0-ip

这是详细的解释。

第一个命令将按预期执行DNAT。但是,如果您试图捕获只有此规则集的数据包,您将发现您没有得到任何信息:

代码语言:javascript
复制
tcpdump -i any -n port 5353

这是因为linux内核默认丢弃这类数据包,如果数据包的一端是127.0.0.0/8,另一端是外部ip地址。

第二个命令更改内核参数,让这类数据包传递(当然,您应该相应地更改eth0 )。在此之后,当您在eth0上捕获数据包时,您将看到发送出去的数据包,但其中包含源地址127.0.0.1和目标地址11.22.33.44。无论此数据包能否到达目标服务器(中间路由器将丢弃此数据包),此数据包都无法返回。因此,您应该添加一个SNAT规则,将源地址更改为您的eth0's。现在,它应该可以工作了。

票数 5
EN

Server Fault用户

发布于 2013-11-07 22:09:32

你需要这样吗?无法在本地主机上工作的iptables端口重定向

代码语言:javascript
复制
iptables -t nat -I OUTPUT -p tcp -d 127.0.0.1 --dport 443 -j REDIRECT --to-ports 8080

阿德里安

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/551487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档