bet9链接:将Linux的QEMU/KVM网路设定为桥接模式,让外网可以连线到虚拟机

本文由 bet9链接 вт989点сс 编译原创,使用 libvirt 和 QEMU/KVM 设置桥接网络。

问题点

  • 宿主机:Ubuntu 24.04 (核心版本6.5.0)
  • 虚拟机:Windows 11
  • 网路架构:Ubuntu电脑透过乙太网路线直接连到数据机(Modem),数据机还有开Wifi。

使用Virt Manager预设NAT网路下,Windows虚拟机的SMB服务无法被同Wifi网路下的其他装置存取。所以我要建立一个新的虚拟网路桥接器,让Windows虚拟机里面系统跑的SMB服务可以从外部网路存取。

为何要建立新的桥接器?

在你安装Virt Manager之后,Libvirt会在Linux新增一个叫做virbr0的虚拟桥接器(virtual bridge),负责处理虚拟机的网路连线。 virbr0本身是作为NAT,在虚拟机开机后,Libvirrt会再新增一个vnet的界面连到virbr0,此时所有虚拟机位于该虚拟NAT之后,虚拟机可连线到外部网路,宿主机能连线到虚拟机,各个虚拟机之间也可以互相连线,但是无法从外部网路连线到虚拟机。

要让外部网路连线到躲在虚拟NAT背后的虚拟机,是可以透过调整iptable forward规则的方式达成啦,但是规则设定上很麻烦,不如另外弄个完整的桥接器吧,让它使用真正的桥接网路模式(bridged networking)。

Linux的桥接网路可以在多个装置之间转送封包。我们会建立一个新的虚拟桥接器,并把宿主机的实体乙太网路界面连上该桥接器,如此一来就能从外部网路存取虚拟机服务了。

建议不要使用Wifi无线网路装置桥接,否则会多一道建立hostapd的手续。请在有乙太网路的状态下建立桥接器。

配置Libvirt

1.请先 安装QEMU/KVM与Virt Manager。

2.用指令列出所有虚拟网路界面

sudo virsh net-list --all

3.列表应该会看到有名为default的网路界面,装置为virbr0,此为Libvirt自动建立,这就是上面说的NAT模式的虚拟桥接器。

# 範例輸出
 Name              State    Autostart   Persistent
----------------------------------------------------
 default           active   yes         yes

用NetworkManager建立虚拟桥接器

很多工具都能建立桥接器,比如NetworkManager、Netplan、iproute2、Network Bridge Utilities,还有KDE和GNOME的图形界面。

鉴于很多Linux发行版都用NetworkManager管网路,我们就用附属的nmcli工具来建立桥接器吧。

1.透过sudo nmcli device status指令得知,乙太网路连线的装置(Device)名称为enp0s2,网路连线名称(Name)为乙太網路連線1

# 範例輸出

NAME                      UUID                                  TYPE      DEVICE
乙太網路連線1             b32df45e-3d34-11ef-8781-ebb418880514  ethernet  enp2s0

2.透过ip addr得知我的区域IP网段为192.168。

# 範例輸出
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b0:6e:bf:ca:68:94 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.102/24 brd 192.168.1.255 scope global dynamic noprefixroute enp2s0

3.新建一个叫做br0的桥接器,关闭STP

sudo nmcli connection add type bridge ifname br0 stp no

4.将enp2s0设定为br0的bridge-slave

sudo nmcli connection add type bridge-slave ifname enp2s0 master br0

5.关闭目前的乙太网路连线。

sudo nmcli connection down "乙太網路連線1"

6.确保它不会自动重新连线

sudo nmcli connection modify "乙太網路連線1" connection.autoconnect no

7.启用刚刚新建的桥接器

sudo nmcli connection up bridge-br0

sudo nmcli connection up bridge-slave-enp2s0

8.用指令sudo nmcli connection show --active检视桥接器状态,确认连线名称(Name)为bridge-br0

# 範例輸出
NAME                 UUID                                  TYPE      DEVICE
bridge-br0           50b8e41e-3d34-11ef-a6b9-13326122fb1e  bridge    br0
bridge-slave-enp2s0  52dd08d8-3d34-11ef-8017-8fce9b54d32b  ethernet  enp2s0

9.接着分配固定IP给bridge-br0

sudo nmcli connection modify "bridge-br0" ipv4.addresses "192.168.1.101/24"

10.然后设定bridge-br0使用Google的DNS

sudo nmcli connection modify "bridge-br0" ipv4.dns "8.8.8.8"

11.开机后Windows应该会自动连上网路,并取得一个区域IP。自此之后,Windows的SMB服务就能让同一Wifi下的其他装置存取了

 

  • 15
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值