我尝试将端口从我的lxc-container重定向到环回。
我的lxc-container配置了lxcbr1 bridge 11.0.3.1。
我尝试将netcat从主机连接到lxc,从lxc连接到主机。成功。
本地主机:
# nc -l 1088
LXC:
# nc 11.0.3.1 1088
Hello!
和localhost见消息:“你好!”。成功了!
当我以这种方式重定向端口时:
# iptables -t nat -A PREROUTING -i lxcbr1 -p tcp -d 11.0.3.1 --dport 1088 -j DNAT --to-destination 127.0.0.1:1088
# nc -l 127.0.0.1 1088
此后,我尝试从lxc-container连接:
# nc 11.0.3.1 1088
Hello !
但是localhost没有看到此消息。
我哪里错了?
我找到了这个答案:https://serverfault.com/questions/211536/iptables-port-redirect-not-working-for-localhost
有声音表示环回不使用PREROUTING。我该怎么办?
答案 0 :(得分:5)
无法使用DNAT进行环回流量。
根据RFC 5735,网络127.0.0.0/8不应在主机外部路由:
127.0.0.0/8 - 此块被指定用作Internet主机环回地址。由更高级别协议发送到的数据报 该块内的任何地址都会循环回主机内部。这是 通常仅使用127.0.0.1/32实现环回。如 在[RFC1122]第3.2.1.3节中描述了整个地址 127.0.0.0/8块无法合法地出现在任何网络上。
RFC 1700,第5页,«绝不应出现在主持人之外»。
有一个出口:使用inetd。
有许多服务器,xinetd等。
我的选择是rinetd。
我使用本手册http://www.howtoforge.com/port-forwarding-with-rinetd-on-debian-etch
我的配置如下:
$ cat /etc/rinetd.conf
# bindadress bindport connectaddress connectport
11.0.3.1 1081 127.0.0.1 1081
11.0.3.1 1088 127.0.0.1 1088
我重启rinetd:
$ /etc/init.d/rinetd restart
Stopping internet redirection server: rinetd.
Starting internet redirection server: rinetd.
重定向就像一个魅力。
我不会自己关闭这个问题,因为我仍然在为这样的任务寻找更优雅的解决方案。任何动物,netcat或inetd都不太可能这样做,这没关系。这是我的意见。
答案 1 :(得分:0)
仅供参考,如果有人偶然发现了新的内核版本(可能> = 3.6),您需要做的是:
~# echo 1 | sudo tee /proc/sys/net/ipv4/conf/all/route_localnet
参考: ipv4: Add interface option to enable routing of 127.0.0.0/8