是否有可能在一座桥上伪装一个数据包?

我有一个容器有一个传入的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.xnetworking中没有被通告(没有到该networking的路由)。

有两个解决scheme:

  • 要么伪装在容器中,以便数据包与10.10.10.1离开
  • 或者广告networking上的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
  • 然后在shorewall中添加masq规则。

否则,您的容器主机会看到来自您的VPN容器的火星人的数量。

MASQUERADE iptables目标在POSTROUTING表中运行,仅用于从一个接口到另一个接口的数据包。 桥接的数据包可能在任何时候都不能在IP层访问,所以你将无法伪装它们。