LXC,端口转发和iptables


8

我有一个10.0.3.2在主机上运行的LXC容器()。服务正在端口port上的容器内部运行7000

从主机(10.0.3.1lxcbr0),我能达到的服务:

$ telnet 10.0.3.2 7000
Trying 10.0.3.2...
Connected to 10.0.3.2.
Escape character is '^]'.

我很想让外部容器可以访问在容器内运行的服务。因此,我想7002将主机上的端口转发到7000容器上的端口:

iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000

结果为(iptables -t nat -L):

DNAT   tcp  --  anywhere     anywhere     tcp dpt:afs3-prserver to:10.0.3.2:7000

尽管如此,我仍无法使用转发的端口从主机访问服务:

$ telnet 10.0.3.1 7002
Trying 10.0.3.1...
telnet: Unable to connect to remote host: Connection refused

我觉得我在这里想念一些愚蠢的东西。我应该检查什么?调试这些情况的好策略是什么?

为了完整起见,这是iptables在主机上设置的方式:

iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -X

iptables -P INPUT DROP
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o lxcbr0 -j MASQUERADE

iptables -t nat -A PREROUTING -p tcp --dport 7002 -j DNAT --to 10.0.3.2:7000

您检查INPUT链条了吗?也许有政策REJECT
MichaelHärtl2013年

政策是ACCEPT
罗伯托·阿洛伊

抱歉,我的意思是FORWARD连锁店。还要检查是否启用了IP转发:cat /proc/sys/net/ipv4/ip_forward
MichaelHärtl'13

ip_forward设置为1
罗伯托·阿洛伊

FORWARD政策也是ACCEPT
Roberto Aloi 2013年

Answers:


3

似乎您已在10.0.3.1上阻止了7002端口,因为默认策略是DROP

尝试将其添加到INPUT规则中:

iptables -A INPUT -p tcp --dport 7002 -j ACCEPT

1

我遇到了同样的问题。我还没有找到解决方案,但是接下来我记下了一些观察结果。

我有一台主机${host}(Ubuntu 12.04),它通过LXC运行客户机。访客已打开IP 10.0.3.248,网关为10.0.3.1。我在来宾服务器中运行Web服务器,并希望将转发流量从移植${host}:888810.0.3.248:80。以下是相关的iptables条目:

-A PREROUTING -p tcp --dport 8888 -j DNAT --to-destination 10.0.3.248:80
-A POSTROUTING -j MASQUERADE

使用当前配置,我可以从另一台物理机成功访问10.0.3.248:80上的Web服务器。但是,当我尝试从访问10.0.3.248:80时,它失败了${host}。也许您可以尝试从另一台机器在LXC内部访问该服务。

我的理解是,当我从访问时${host},数据包通过环回接口并直接进入INPUT链。尽管我允许在INPUT上执行所有操作,但没有服务在上监听${host}:8888。从Wireshark,我看到已收到RST。当我从另一台物理机访问时,该数据包进入PREROUTING链,并按预期进行了DNAT处理。

一篇相关的文章:


0

我需要添加一个转发规则

iptables -A FORWARD -p tcp -d 10.0.3.2 --dport 7002 -j ACCEPT

0

好吧,我从2018年起的5美分:

我确实安装了LXC并在其中玩耍。我的容器IP是10.0.0.10

我添加了以下规则:

iptables -t nat -A PREROUTING -p tcp -i ens192 --dport 81 -j DNAT --to-destination 10.0.0.10:22

它没有用。然后我意识到,即使FORWARD策略是ACCEPT,也存在一条阻止所有FORWARD的规则。

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      virbr0  0.0.0.0/0            10.0.0.0/24          ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  virbr0 *       10.0.0.0/24          0.0.0.0/0           
    0     0 ACCEPT     all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0           
    5   268 REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

所以我必须在顶部插入规则:

iptables -I FORWARD -p tcp -d 10.0.0.10 --dport 22 -j ACCEPT

现在前进host:81-> 10.0.0.10:22工作。


-2

可以通过主机桥接口从LAN访问您的容器,因此可以将其连接到与主机相同的子网。

您需要让路由器将这些端口转发到您的容器。

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.