8

我尝试将端口从我的 lxc 容器重定向到环回。

我的 lxc 容器配置了 lxcbr1 网桥 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的声音。我应该怎么办?

4

2 回答 2

5

环回流量的 DNAT 是不可能的。

我发现了很多类似的问题。1 , 2 , 3等...

根据 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

有很多inted服务器,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 都不太可能这样做,这没关系。这是我的意见。

于 2013-09-02T23:17:20.760 回答
5

仅供参考,如果有人在这里偶然发现,在新内核版本(可能 >= 3.6)上,您需要做的额外工作是:

~# echo 1 | sudo tee /proc/sys/net/ipv4/conf/all/route_localnet

参考: ipv4:添加接口选项以启用 127.0.0.0/8 的路由

于 2019-03-25T20:16:52.430 回答