两个不同 lxc 容器的 iptables 规则

两个不同 lxc 容器的 iptables 规则

我正在 VPS 机器上运行两个 lxc 容器,并且是 iptables 领域的新手,我试图创建规则以将外部流量转发到容器中。第一个 (192.168.1.2) 正在运行 openvpn 服务器,而第二个 (192.168.1.4) 正在运行 Web 服务器。到目前为止,我仅使用 openvpn lxc 并使用以下 iptables 规则来转发流量:

# Generated by iptables-save v1.4.21 on Fri Apr 28 16:07:58 2017
*filter :INPUT ACCEPT [1189211:150089991] :FORWARD ACCEPT [902865:826112449] :OUTPUT ACCEPT [1324099:212970374] COMMIT
# Completed on Fri Apr 28 16:07:58 2017
# Generated by iptables-save v1.4.21 on Fri Apr 28 16:07:58 2017
*nat :PREROUTING ACCEPT [36:1998] :INPUT ACCEPT [17:858] :OUTPUT ACCEPT [0:0] :POSTROUTING ACCEPT [0:0]
-A PREROUTING -p udp -m udp --dport 1194 -j DNAT --to-destination 192.168.1.2:1194
-A POSTROUTING -o eth0 -j MASQUERADE COMMIT
# Completed on Fri Apr 28 16:07:58 2017

现在,我想设置 Web 服务器,我添加了此 iptables 规则,以便将 http 流量转发到 Web 服务器容器。

iptables -t nat -A PREROUTING -p tcp -m conntrack --ctstate NEW --dport 80 -j DNAT --to-destination 192.168.1.4:80

问题是,虽然转发到端口 80 似乎有效(我可以访问 nginx 的欢迎页面),但 openvpn 客户端没有正确的互联网连接(尽管它们可以 ping 通外部世界)。我的意思是,网站加载速度非常慢,而其他一些网站根本不加载(似乎 http 流量在某个地方丢失了)。如果我删除上述规则,openvpn 客户端连接中的所有内容都会按预期工作,但我会失去 http 服务器。

PS:最终规则是这些

# Generated by iptables-save v1.4.21 on Fri Apr 28 16:39:24 2017
*filter
:INPUT ACCEPT [1190228:150215153]
:FORWARD ACCEPT [902877:826113261]
:OUTPUT ACCEPT [1325229:213163664]
COMMIT
# Completed on Fri Apr 28 16:39:24 2017
# Generated by iptables-save v1.4.21 on Fri Apr 28 16:39:24 2017
*nat
:PREROUTING ACCEPT [1:44]
:INPUT ACCEPT [1:44]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p udp -m udp --dport 1194 -j DNAT --to-destination 192.168.1.2:1194
-A PREROUTING -p tcp -m conntrack --ctstate NEW -m tcp --dport 80 -j DNAT --to-destination 192.168.1.4:80
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
# Completed on Fri Apr 28 16:39:24 2017

另外,我首先编写转发规则,然后编写输入链规则。

有没有什么方法可以同时使用这两种协议而不会产生冲突?

谢谢。

相关内容