带有 openvpn 服务器的 lxd 容器不应用 iptables nat 规则

带有 openvpn 服务器的 lxd 容器不应用 iptables nat 规则

我正在尝试在我的一个 lxd 容器上设置 openvpn 以允许访问容器网络。服务器似乎可以工作,我可以访问 (ping) 具有指向我的外部/源网络的 openvpn 服务器的静态路由的容器。

我希望不必更改每个容器的路由表,并且认为我可以使用 NAT 将 vpn 客户端隐藏在 vpn 服务器后面。

iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -d 10.144.79.0/24 -j SNAT --to-source 10.144.79.127

或者

iptables -t nat -I POSTROUTING -s 10.8.0.0/24 -d 10.144.79.0/24 -j MASQUERADE

生成一条我认为应该可以实现该目的的规则。但是ping来自 VPN 客户端的数据包似乎仍然来自指定的 10.8.0.0/24 地址,而不是被屏蔽到 10.144.79.127。

第一条规则产生:

root@openvpn:~# iptables -L -n -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
SNAT       all  --  10.8.0.0/24          10.144.79.0/24       to:10.144.79.127

tcpdump在 10.144.79.0/24 中的 ping 目标上仍然看起来像:

13:56:10.930826 IP 10.8.0.6 > 10.144.79.212: ICMP echo request, id 33133, seq 10093, length 64
13:56:10.930855 IP 10.144.79.212 > 10.8.0.6: ICMP echo reply, id 33133, seq 10093, length 64

当然,只有.212知道路由10.8.0.0/24后它才有效10.144.79.127

转发处于活动状态:

root@openvpn:~# cat /proc/sys/net/ipv4/ip_forward
1
root@openvpn:~# sysctl -p
net.ipv4.ip_forward = 1

我设置了三个 virtualbox vm 来验证当 LXD 不是方程的一部分时我是否可以使 NAT 工作,并且它能否按预期工作。

为什么容器会忽略POSTROUTING规则?

相关内容