![qemu-openvpn tap 的第二个网络接口](https://linux22.com/image/748906/qemu-openvpn%20tap%20%E7%9A%84%E7%AC%AC%E4%BA%8C%E4%B8%AA%E7%BD%91%E7%BB%9C%E6%8E%A5%E5%8F%A3.png)
我有一台运行 Windows VM 的 Debian-Linux 主机,该虚拟机带有 qemu。作为网络设置,我有一个 eno1 接口,用于将 Linux 主机连接到互联网,一个用于 qemu 的 tap_inet 用于互联网访问,以及一个连接这两个的网桥 br_inet。使用此设置和带有一张网卡的 qemu 命令
qemu -netdev tap,ifname=tap_inet,id=n1 -device e1000,netdev=n1,mac=00.00.00.00.00.04...
一切正常,在虚拟机中我从路由器获得一个地址。启动时输入 ipconfig:
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br_inet state UP group default qlen 1000
link/ether 70:71:bc:6b:f4:b2 brd ff:ff:ff:ff:ff:ff
3: br_inet: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 70:71:bc:6b:f4:b2 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.206/24 brd 192.168.1.255 scope global dynamic br_inet
valid_lft 43031sec preferred_lft 43031sec
4: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/ether d2:b4:67:6e:b6:7e brd ff:ff:ff:ff:ff:ff
inet 172.16.17.2/24 brd 172.16.17.255 scope global tap0
valid_lft forever preferred_lft forever
目标是将网卡连接到 qemu 以与 openvpn 网络交互。在 linux 主机上,我有一个带网络适配器 tap0 的 openvpn 客户端。但是当启动带有两个网卡的 qemu 时
qemu -netdev tap,ifname=tap_inet,id=n1 -device e1000,netdev=n1,mac=00.00.00.00.00.04 -netdev tap,ifname=tap_ovpn,id=n2 -device e1000,netdev=n2,mac=00.00.00.00.00.08...)
我打算与 tap0 桥接的 tap_ovpn 会自动与 br_inet 桥接,这一点我已经通过 brctl show 进行了确认。
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br_inet state UP group default qlen 1000
link/ether 70:71:bc:6b:f4:b2 brd ff:ff:ff:ff:ff:ff
3: br_inet: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 70:71:bc:6b:f4:b2 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.206/24 brd 192.168.1.255 scope global dynamic br_inet
valid_lft 42810sec preferred_lft 42810sec
4: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 100
link/ether d2:b4:67:6e:b6:7e brd ff:ff:ff:ff:ff:ff
inet 172.16.17.2/24 brd 172.16.17.255 scope global tap0
valid_lft forever preferred_lft forever
5: tap_inet: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br_inet state UNKNOWN group default qlen 1000
link/ether 86:5f:c1:2f:f1:2b brd ff:ff:ff:ff:ff:ff
6: tap_ovpn: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br_inet state UNKNOWN group default qlen 1000
link/ether 76:d1:46:d5:74:e7 brd ff:ff:ff:ff:ff:ff
根据https://www.qemu.org/2018/05/31/nic-parameter/这不应该发生。网络不应该像旧的 -net nic 命令那样桥接。但是 qemu 创建的所有网络接口都会自动分配给桥 br_inet。
我认为 openvpn 配置是正确的,在 Linux 服务器上,我有一个 tap0 接口,其静态 IP 为 172.16.17.2,作为 openvpn 网络中的客户端。在客户端特定的配置文件中,我已将 iroute 172.16.17.3 255.255.255.255 添加到 Linux 服务器的文件中,以将请求传递给此客户端并将其转发到虚拟机。
然后我计划将 tap0 接口 172.16.17.2 与虚拟机 172.16.17.3 的 tap_ovpn 接口桥接,以将数据包转发到 Windows 客户机。
我可以直接将 tap0 openvpn 接口用于 qemu 吗?如何避免 qemu 自动将网络 tap 接口分配给网桥 br_inet?
答案1
我想我找到了问题的根源。Debian 似乎附带了一个文件 /etc/qemu-ifup,该文件在“route -n ip”中搜索具有默认网关的第一个网桥。如果您不指定脚本或 downscript 命令,qemu 将使用此脚本作为每个网卡的默认脚本,因此所有分接头都会添加到 br_inet 网桥。因此,要修复此问题,请将 script=/path/to/script 添加到 -netdev 开关。
“如果省略选项 script=no 和 downscript=no,则上述命令将返回无害的警告:”(来源:https://unix.stackexchange.com/a/563547/295515)