我有一个容器有一个传入的VPN。 到该容器的连接将被分配192.168.10.10 IP。 容器的虚拟NIC具有10.10.10.1的IP和10.10.10.1的网关(在主桥上)。
当直接login容器时,一个数据包将以10.10.10.1作为数据源,并知道如何返回(通过网桥)。
在VPN-in中,数据包以192.168.10.10作为源,并且不会返回,因为192.168.10.x在networking中没有被通告(没有到该networking的路由)。
有两个解决scheme:
10.10.10.1离开 192.168.10.x路由 我想(由于各种原因)避免去这些解决scheme之一,并想知道是否有可能在桥本身做主机方面的伪装 ?
换句话说,数据包将离开容器的源192.168.10.10 ,然后将被“桥”重写为已知的10.10.10.1 IP(然后当答复回到容器时再次被重写)
注意:如何在shorewall做到这shorewall真棒,但任何信息将是伟大的。
对于shorewall,你可以编辑/ etc / shorewall / masq,如下所示:
br0 192.168.10.1/24 - tcp 22,80,443
您还需要在/ etc / shorewall / hosts和/ etc / shorewall / zone中为VPN范围创build一个条目,当然还需要在/ etc / shorewall / rules中添加必要的规则。
不过,我想你可能会遇到XY问题 。
如果我正确理解你的设置, 只有你的容器知道192.168.10/24范围。
这意味着这个问题实际上只能通过使用伪装来解决。
问题是容器运行的主机也没有192.168.10 / 24的路由,因为该路由只存在于容器的路由表中。
所以,至less你需要:
ip r add 192.168.10.1/24 via 10.10.10.1 ) 否则,您的容器主机会看到来自您的VPN容器的火星人的数量。
MASQUERADE iptables目标在POSTROUTING表中运行,仅用于从一个接口到另一个接口的数据包。 桥接的数据包可能在任何时候都不能在IP层访问,所以你将无法伪装它们。