我有一台装有 Ubuntu 14 Desktop 的笔记本电脑。这台笔记本电脑有WLAN 连接到我的局域网,并由网络管理器。当然,笔记本电脑也有网卡(eth0),但未连接。我将这台笔记本电脑用作 LXC 主机。我有多个容器为应用程序提供服务。使用 LXC 的基本设置(默认设置,如使用 dnsmasq、桥接网络)。
的输出ifconfig
显示了 4 个接口:eth0
、lo
和。到目前为止,还没有进行任何特殊的 iptables 配置。这是一个全新安装的wlan
系统lxcbr0
现在,通过在我的 LXC 主机上配置 NAT……
iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 21404 -j DNAT --to 10.0.3.180:3142
...当我从 LAN 中的另一台机器访问时,我能够访问容器中的服务,例如:
foo@LANMachine2: wget -O - http://lxc-host:21404 #it works
提示:lxc-host
是我的路由器管理的笔记本电脑的 DNS 名称。
现在我想做的是,留在我的机器上从 LXC 主机本身访问容器的服务以及其他使用相同 DNS 名称的托管容器,如下所示:
bar@lxc-host: wget -O - http://lxc-host:21404
#or
bar@lxc-container: wget -O - http://lxc-host:21404
#both not working and leading to output:
Connecting to lxc-host (lxc-host)|The.IP.shown.here|:21404... failed: Connection refused.
如何让它工作?有可能吗?对我来说最重要的是能够通过 LXC 主机路由从其他容器连接到其他容器的服务。(这将允许我标准化我的容器设置)
答案1
来自同一主机的数据包永远不会到达 PREROUTING 表(或任何其他 nat 表),因为它们不会从一个接口路由到另一个接口。
对于容器到容器的网络,您可以使用共享桥(不需要与它们与主机共享的相同)或者实际使用路由和 PREROUTING iptables 表(如果它们位于不同的接口上)。