具有不同子网的桥接网络

具有不同子网的桥接网络

由于这个原因,我想用 lxc/virsh 虚拟化我的网络服务器,我想将 IP 传递给 lxc 容器。但我的IP来自不同的子网,我尝试过(但没有成功):

维什网络:

<interface type='bridge'>
    <source bridge='br0'/>
    <model type='virtio'/>
</interface>

IP 1:xxx.xxx.184.96(专用服务器IP)

xxx.xxx.37.220(对于 LXC)

/etc/网络/接口:

auto lo
iface lo inet loopback

# The primary network interface
auto eth0


iface eth0 inet static
        address xxx.xxx.184.96
        netmask 255.255.255.128
        network xxx.xxx.184.0
        broadcast xxx.xxx.184.127
        gateway xxx.xxx.184.1
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 8.8.8.8 8.8.4.4

iface br0 inet static
        bridge_ports eth0
        bridge_stp on
        address xxx.xxx.37.220
        netmask 255.255.255.255

答案1

您不能使用桥接接口在子网之间转发流量。网桥用于连接两个第 2 层网络,而不是 2 个子网(它们是第 3 层)。您必须在网络之间路由流量。
好吧,从技术上讲,您可以桥接它们,但这需要您向两个子网上的每个主机添加路由规则,让它们知道它们可以直接与另一个子网通信。这非常麻烦,我怀疑这不是你想要做的。

因此,路由流量。基本上,您必须将虚拟机管理程序盒变成一个小型路由器。您必须告诉它,任何到某些端口的传入流量都应该转发到您的虚拟化实例。然后,当虚拟化实例回复时,您的虚拟机管理程序框会修改流量,使其看起来像是来自其自身的流量。这是通过 DNAT 完成的。

iptables -t nat -I PREROUTING -i eth0 -p tcp -m multiport --dports 80,443 -j DNAT --to-destination 172.0.0.2

该规则表示接收传入eth0TCP 端口 80 和 443 的任何流量并将其转发到172.0.0.2(更改172.0.0.2为虚拟 Web 服务器的 IP)。


现在您需要保存此规则,以便在重新启动系统时它会恢复。这部分会有所不同。 Ubuntu 中有一个iptables-persistent包可以让你这样做/etc/init.d/iptables-persistent save。但如果您使用其他东西来管理防火墙,则需要使用它。

相关内容