如何将端口转发到 virtualbox vm 中的 lxc 容器 运行?
How to forward ports to lxc containers running inside virtualbox vm?
我有 ubuntu/xenial64
个设置了端口转发的虚拟机 (config.vm.network "forwarded_port", guest: 80, host: 8080
)。在 VM 中,我创建了一个 lxc 容器 (ubuntu/trusty
),并添加了 iptables
规则:
iptables -t nat -A PREROUTING -i lxcbr0 -p tcp --dport 80 -j DNAT --to-destination 10.0.3.153:80
并在 VM 中安装了一个 nginx
,在 lxc 容器中安装了一个,在 VM 中安装了 运行。从 VM 外部我可以访问 VM 内的 nginx 运行,但不能访问 lxc 容器内的 运行。要检查我使用(在 VM 之外):
curl -sSv localhost:8080
或者:
w3m http://localhost:8080
我怎么知道哪个回复了?我在 VM 中停止了一个 运行,但没有得到任何响应。但是我可以从 VM 内部访问 lxc 容器内的 nginx 运行 就好了。
我做错了什么(VM 内的 运行 lxc 容器除外)? :)
这是 iptables-save
的输出:
# iptables-save [9/858]
# Generated by iptables-save v1.6.0 on Mon Jul 18 22:04:52 2016
*mangle
:PREROUTING ACCEPT [293:22775]
:INPUT ACCEPT [261:20343]
:FORWARD ACCEPT [32:2432]
:OUTPUT ACCEPT [174:19243]
:POSTROUTING ACCEPT [206:21675]
-A POSTROUTING -o lxcbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Mon Jul 18 22:04:52 2016
# Generated by iptables-save v1.6.0 on Mon Jul 18 22:04:52 2016
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -i lxcbr0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.3.153:80
-A POSTROUTING -s 10.0.3.0/24 ! -d 10.0.3.0/24 -j MASQUERADE
COMMIT
# Completed on Mon Jul 18 22:04:52 2016
# Generated by iptables-save v1.6.0 on Mon Jul 18 22:04:52 2016
*filter
:INPUT ACCEPT [256:19487]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [176:19491]
-A INPUT -i lxcbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i lxcbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i lxcbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -i lxcbr0 -p udp -m udp --dport 67 -j ACCEPT
-A FORWARD -o lxcbr0 -j ACCEPT
-A FORWARD -i lxcbr0 -j ACCEPT
COMMIT
# Completed on Mon Jul 18 22:04:52 2016
看来,我为错误的接口添加了规则。它应该是 eth0
、enp0s25
或与您的物理网络接口相对应的任何内容:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 10.0.3.153:80
我有 ubuntu/xenial64
个设置了端口转发的虚拟机 (config.vm.network "forwarded_port", guest: 80, host: 8080
)。在 VM 中,我创建了一个 lxc 容器 (ubuntu/trusty
),并添加了 iptables
规则:
iptables -t nat -A PREROUTING -i lxcbr0 -p tcp --dport 80 -j DNAT --to-destination 10.0.3.153:80
并在 VM 中安装了一个 nginx
,在 lxc 容器中安装了一个,在 VM 中安装了 运行。从 VM 外部我可以访问 VM 内的 nginx 运行,但不能访问 lxc 容器内的 运行。要检查我使用(在 VM 之外):
curl -sSv localhost:8080
或者:
w3m http://localhost:8080
我怎么知道哪个回复了?我在 VM 中停止了一个 运行,但没有得到任何响应。但是我可以从 VM 内部访问 lxc 容器内的 nginx 运行 就好了。
我做错了什么(VM 内的 运行 lxc 容器除外)? :)
这是 iptables-save
的输出:
# iptables-save [9/858]
# Generated by iptables-save v1.6.0 on Mon Jul 18 22:04:52 2016
*mangle
:PREROUTING ACCEPT [293:22775]
:INPUT ACCEPT [261:20343]
:FORWARD ACCEPT [32:2432]
:OUTPUT ACCEPT [174:19243]
:POSTROUTING ACCEPT [206:21675]
-A POSTROUTING -o lxcbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Mon Jul 18 22:04:52 2016
# Generated by iptables-save v1.6.0 on Mon Jul 18 22:04:52 2016
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -i lxcbr0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.0.3.153:80
-A POSTROUTING -s 10.0.3.0/24 ! -d 10.0.3.0/24 -j MASQUERADE
COMMIT
# Completed on Mon Jul 18 22:04:52 2016
# Generated by iptables-save v1.6.0 on Mon Jul 18 22:04:52 2016
*filter
:INPUT ACCEPT [256:19487]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [176:19491]
-A INPUT -i lxcbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i lxcbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i lxcbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -i lxcbr0 -p udp -m udp --dport 67 -j ACCEPT
-A FORWARD -o lxcbr0 -j ACCEPT
-A FORWARD -i lxcbr0 -j ACCEPT
COMMIT
# Completed on Mon Jul 18 22:04:52 2016
看来,我为错误的接口添加了规则。它应该是 eth0
、enp0s25
或与您的物理网络接口相对应的任何内容:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 10.0.3.153:80