有可能在桥上伪装数据包吗?

有可能在桥上伪装数据包吗?

我有一个容器,它有一个传入 VPN。进入该容器的连接将被分配 IP 192.168.10.10。容器的虚拟 NIC 有一个 IP10.10.10.1和一个网关(在主机桥上)10.10.10.254

当直接登录到容器时,数据包将10.10.10.1作为源离开并且知道如何返回(通过桥接)。

当通过 VPN 连接时,数据包将离开192.168.10.10源端并且不会返回,因为192.168.10.x网络中没有通告(没有到该网络的路由)。

对此有两种解决方案:

  • 要么伪装在容器里,这样包裹就会带着10.10.10.1
  • 192.168.10.x或者在网络上发布该路由

我想(出于各种原因)避免采用这两种解决方案,并且想知道是否可以在桥本身进行伪装,在主机端?
换句话说,数据包将离开带有源的容器192.168.10.10,然后“由桥接器”将其重写为已知10.10.10.1IP(然后在回复返回容器时再次重写)

注意:如何做到这一点shorewall会很棒,但任何信息都很好。

答案1

对于 shorewall,您可以编辑 /etc/shorewall/masq,如下所示:

br0 192.168.10.1/24 - tcp 22,80,443

您还需要在 /etc/shorewall/hosts 和 /etc/shorewall/zones 中为 VPN 范围创建一个条目,当然还需要将任何必要的规则添加到 /etc/shorewall/rules 中。

不过,我认为你可能遇到的是XY问题

如果我理解你的设置正确的话,仅有的你的容器知道这个192.168.10/24范围。

这意味着该问题实际上不能(仅)通过使用伪装来解决。

问题是运行容器的主机也没有 192.168.10/24 的路由,因为该路由仅存在于容器的路由表中。

因此,你至少需要:

  • 容器主机上指向容器的路由(例如ip r add 192.168.10.1/24 via 10.10.10.1
  • 然后在shorewall中添加masq规则。

否则,您的容器主机将看到来自您的 VPN 容器的火星人的内容。

答案2

iptablesMASQUERADE目标在表中运行POSTROUTING,该表仅用于从一个接口路由到另一个接口的数据包。桥接数据包可能不会在任何时候在 IP 级别被访问,因此您无法伪装它们。

相关内容