主机具有带有 2 个地址的单个接口,用于 LXC 容器到特定目的地的 iptables SNAT 不起作用

主机具有带有 2 个地址的单个接口,用于 LXC 容器到特定目的地的 iptables SNAT 不起作用

我需要你帮助我在 Ubuntu 18.04、内核 4.15.0-112-generic 上使用 iptables:

我有运行大量 LXC 容器的主机,不使用主机 LAN 接口上的桥接lan1,但每个 LXC 容器都有自己的 IP 地址。主机有一个范围在 10.101.22.0/25 中的 IP 地址,可在公司内部网络中路由,另一个范围在 192.168.202.0/23 中的 IP 地址在公司内部网络中不可路由。摘自/etc/netplan/01-netcfg.yaml

lan1:
  dhcp4: no
  dhcp6: no
  interfaces: [ bond0 ]
  parameters:
    stp: no
  addresses: [ 10.101.22.13/25, 192.168.203.244/23 ]
  gateway4: 10.101.22.1

ip a输出:

6: lan1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 1e:11:24:59:86:cd brd ff:ff:ff:ff:ff:ff
inet 10.101.22.13/25 brd 10.101.22.127 scope global lan1
   valid_lft forever preferred_lft forever
inet 192.168.203.244/23 brd 192.168.203.255 scope global lan1
   valid_lft forever preferred_lft forever

LXC 容器应该只与 VLAN 192.168.202.0/23 中的其他地址进行通信

一切运行正常,不需要从 LXC 容器路由到公司内的任何其他地方。

除此之外...现在我希望容器无论如何都能到达 Ubuntu 镜像的内部反向代理 10.125.11.215,但它们的非路由 IP 地址 192.something 将被该反向代理拒绝。因此,我希望来自容器的数据包到达反向代理,由主机的 10.101.22.13 源地址进行 SNAT。

我尝试使用以下iptables命令添加 POSTROUTING snat:

iptables -t nat -A POSTROUTING -o lan1 -d 10.125.11.215/32 -s 192.168.202.0/23 -j SNAT --to-source 10.101.22.13

输出iptables -t nat -L -n

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  --  192.168.202.0/23     10.125.11.215        to:10.101.22.13

但是来自这样的容器(例如,其 IP=192.168.203.3)的任何流量到达 10.125.11.215:80 上的反向代理仍然没有被 SNAT,如下所示tcpdump

# tcpdump -i lan1 -n host 10.125.11.215
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on lan1, link-type EN10MB (Ethernet), capture size 262144 bytes
12:21:47.791330 IP 192.168.203.3.8060 > 10.125.11.215.80: Flags [S], seq 1837832169, win 64240, options [mss 1460,sackOK,TS val 3312729000 ecr 0,nop,wscale 7], length 0
12:21:48.799250 IP 192.168.203.3.8060 > 10.125.11.215.80: Flags [S], seq 1837832169, win 64240, options [mss 1460,sackOK,TS val 3312730007 ecr 0,nop,wscale 7], length 0

数据包计数还显示这些数据包均未被 POSTROUTING 链处理:

Chain POSTROUTING (policy ACCEPT 2 packets, 144 bytes)
pkts bytes target     prot opt in     out     source               destination
0     0 SNAT       all  --  *      lan1    192.168.202.0/23     10.125.11.215        to:10.101.22.13

缺什么?

提前感谢!

相关内容