011.iptables对127.x的DNAT问题
昨夜PM120919发布,估摸着JIC2的那块程序要闹事。 果不其然,载在了使用iptables进行端口转发上。
@史荣久 / 2012-09-20 / CC-BY-SA-3.0
不走路由,使用端口转发,在MN1上为该网段提供REAL服务。
/sbin/iptables -t nat -A PREROUTING -p tcp -m tcp --dport 9000
-j DNAT --to-destination 1.2.3.4:50000
认为部署在MN1上的REAL功能,使用127.0.0.1比真实ip更靠谱。
从而使其不能脱离MN1而意外的运行。其实,这个想法倒也没啥。
出问题的是,我印象中这样使用过,经验告诉我,这没问题。
进而,没有在MN1上执行telnet进行连接测试。
于是,大早上的被电话叫起,进行故障对应。
经验和印象是很容易出问题的,还是动手试一下靠谱啊。
解决办法,任选其一:
(1) 把127.x换成真实ip。
(2) 加一条规则。即,把上述复制一遍,但把PREROUTING变成OUTPUT。
后话。
放了狗,一切明了。(应该是原作吧,追出处真难。这帮转载的)
用iptables 实现本地端口转发
本地连接指的是在本机上,用 127.0.0.1 或者本机 IP 来访问本机的端口。
本地连接的数据包不会通过网卡,而是由内核处理后直接发给本地进程。
这种数据包在 iptables 中只经过 OUTPUT 链,而不会经过 PREROUTING 链。
所以需要在 OUTPUT 链中进行 DNAT。除了对 127.0.0.1 之外,
对本机 IP (即 192.168.4.177) 的访问也属于本地连接。
然后,引申一下,找到一博文,科普之。
使用iptables为何不能将外部进入的包NAT到127.0.0.1
通过IP安全规则,得知实际上是不允许外部进来的包以loopback地址为目标的,
否则攻击就太容易了,比方说我在局域网上放一个目标地址为127.0.0.1的IP包,
修改其MAC目标地址为全1,这样所有的机器都将可以收到这样的包,
因此路由模块负责丢弃这样的数据包。
最后,感谢以上2位博主。
此外,很重要的一个内核编译参数需要打开.
https://wiki.debian.org/Firewalls-local-port-redirection
题图:本地奢华的工作环境,所谓五八三十一,1080P的笔记本加1080P的液晶电视。