路由来自专用网络的传出流量 (lxdbr0)

路由来自专用网络的传出流量 (lxdbr0)

我在我的主机系统上设置了 lxd,并使用 lxdbr0 桥作为网卡。现在我的容器通过 dhcp 从 lxdbr0 获取其 IP 地址(在 10.204.xx 范围内)。

我还有2个公共IP地址。一份用于主机 (xxxx),一份用于容器 (bbbb)。容器应使用第二个公共 IP 进行传出和传入流量。两个公共 IP 地址都进入主机系统,因此我的主机系统首先获得所有流量。

我已经完成了设置从公共 IP 到私有 IP 的预路由(在主机上),以便公共 IP 的所有传入流量都进入特定容器。

但我不知道如何将传出流量从容器路由到公共 IP。我尝试像处理传入流量那样设置预路由,但没有结果。

iptables -L 显示

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain /* managed by lxd-bridge */
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain /* managed by lxd-bridge */
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps /* managed by lxd-bridge */
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps /* managed by lxd-bridge */

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere             /* managed by lxd-bridge */
ACCEPT     all  --  anywhere             anywhere             /* managed by lxd-bridge */

iptables -t nat -L 显示

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       all  --  anywhere             ip-b.ip-b-b-b.eu  to:10.204.119.5
DNAT       all  --  anywhere             10.204.119.5         to:b.b.b.b

b.b.b.b --> second public ip (for the container)
10.204.119.5 --> containers (private) ip in the lxdbr0 bridge

公共 IP 上的传入流量会路由到容器,但容器的传出流量不会。

我还在LXD_IPV4_NAT="false"lxd 网桥配置中进行了设置,因为这使得容器能够使用我的主机 IP 地址进行传出流量(我不想要)

编辑#1:路线 -n 显示

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         x.x.x.1         0.0.0.0         UG    0      0        0 ens3
10.204.119.0    0.0.0.0         255.255.255.0   U     0      0        0 lxdbr0
x.x.x.1         0.0.0.0         255.255.255.255 UH    0      0        0 ens3

x.x.x.1 --> gateway of my hosts ip (x.x.x.x)

编辑#2:示例

- pIP1 = public ip 1, should be used for host
- pIP2 = "      "  2, should be used for the container

the container runs on the host system.

container = 10.204.119.5 (device lxdbr0)
host      = pIP1 (device ens3) and pIP2 (device ens3:0)

Outgoing packets from the container come with the source ip 10.204.119.5. 
Now these packets should change the source ip to pIP2 and then sent to the 
gateway (so it appears to the router, that the packet from the container 
comes from the pIP2)

答案1

您需要做的就是将来自容器私有 IP 的流量 NAT 到容器公共 IP ($publicIP2) 的主机接口:

iptables -t nat -A POSTROUTING -s 10.204.119.5/32 -j SNAT --to-source $publicIP2

相关内容