如何在 Linux 下的 /etc/network/interfaces 中创建网桥/tun tap?

如何在 Linux 下的 /etc/network/interfaces 中创建网桥/tun tap?

我需要在 Linux 下为我的 qemu 虚拟机创建一个网桥。

我正在阅读手册页、官方文档和教程,但仍然发现无法理解这些步骤。

例如(来自https://wiki.ubuntu.com/KvmWithBridge

# The primary network interface
auto br0
iface br0 inet static
        address 192.168.0.101
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1
        bridge_ports eth0
        bridge_stp off
        bridge_maxwait 5
        # dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 192.168.0.4
        dns-search mydomain.net

这对我来说毫无意义:

  • 为什么桥接器需要 IP?为什么我可以使用桥接器和 IP,因为它应该只是一条数据链路路径
  • 为什么我需要关闭 eth0?桥接器是两个物理设备之间的连接,为什么关闭以太网卡以与该卡建立互连是有意义的?
  • 谁或什么在此获取了 IP?192.168.0.101具体是什么?

这种模式在许多教程、指南和文档中重复出现,其中混合了一些没有明显含义的词语(显然桥梁应该处理 IP...)。

因此,我想问:如何创建桥接,以便我的qemu实例可以通过桥接自行连接eth0?为了简单起见,我只想使用iproute2/etc/network/interfaces,而不使用其他任何东西。

答案1

我会尽力回答你的问题。

  1. 桥接接口不需要 IP 地址即可在端口之间切换帧。当然,您可以配置没有 IP 地址的桥接接口。在这种情况下,您的 Linux 主机将作为简单的 L2 交换机工作。当您在桥接接口上分配 IP 地址时,您可以将 Linux 主机视为高级 L3 交换机。

  2. 您不需要禁用接口来将其添加到桥中。

  3. 之后,ifup br0在您的 Linux 系统中,br0接口将被创建。地址192.168.0.101将被分配给它。

  4. 在系统中使用适当的选项运行 qemu VM 后,应该会出现一个附加界面。之后,您可以br0使用命令手动将其添加到界面中

ip link set dev <tap-iface> master br0

  1. 您可以编写一个简短的脚本来将新的 tap 接口添加到桥接器中。此脚本可以放在特殊目录中,并在新 qemu 主机启动后执行。

  2. 如果您更喜欢iproute2,您可以在接口文件中使用它,使用pre-upuppost-up其他语句内部。

  3. 如果我理解正确的话,您可以添加类似的内容到/etc/network/interfaces文件以调出tap界面并将其添加到桥中:

iface tap10 inet manual
    pre-up /sbin/tunctl -t $IFACE -u root || true
    pre-up /sbin/ip link set dev $IFACE master br0
    up /sbin/ip link set dev $IFACE up
    post-down /sbin/tunctl -d $IFACE || true

新版本的 iproute2 本身支持 tun/tap 接口,因此tunctl不需要使用二进制文件。

iface tap10 inet manual
  pre-up /sbin/ip tuntap add mode tap user root name $IFACE || true
  pre-up /sbin/ip link set dev $IFACE master br0
  up /sbin/ip link set dev $IFACE up
  post-down /sbin/ip link del dev $IFACE || true

在 qemu VM 启动命令行中您应该使用类似这样的命令:

-netdev tap,id=mynet0,ifname=tap10,script=no,downscript=no

相关内容