Networking
路由來自專用網路的傳出流量 (lxdbr0)
我在我的主機系統上設置了 lxd,使用 lxdbr0 橋作為 nic。現在我的容器通過 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: route -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)
您需要做的就是將來自容器私有 IP 的流量 NAT 到容器公共 IP ($publicIP2) 的主機介面:
iptables -t nat -A POSTROUTING -s 10.204.119.5/32 -j SNAT --to-source $publicIP2