本文章涉及以下内容
- 让QEMU/KVM虚拟机可以获取到路由器上DHCP分发的IP
- 让其他主机共享Linux的网络,但使用路由器的DHCP服务(把Linux服务器当做交换机)
- 修复同一网桥下的其他主机,无法连接被当做交换机的Linux
- netplan配置网桥bridge
前情概要
是的,我的需求每次都是辣么辣么的奇怪,今天折腾的目标有以下几点:
* 让QEMU/KVM虚拟机可以获取到路由器上DHCP分发的IP,并可以访问到路由器上的UPnP服务
* 通过物理网卡连接到NAS上的主机,可以通过路由器的DHCP得到IP
之前,我用的是 brctl
这个工具配置的网桥,给虚拟机用,NAS到电脑主机的连接走的是KDE默认的NAT网络共享。配好后,没到72小时,虚拟机就没办法访问了,经查,整个NAS的网络都崩掉了。
重启了NAS后,brctl
配置的内容全部恢复了,还得重新配置,这我就有点难受了,于是我便准备将网桥配置进系统,同时解决NAS到电脑主机的IP问题。
软硬件环境介绍
我目前使用的NAS系统、网卡硬件如下:
.-/+oossssoo+/-. admin@NEKO-NAS
`:+ssssssssssssssssss+:` -----------------
-+ssssssssssssssssssyyssss+- OS: Ubuntu 21.04 x86_64
.ossssssssssssssssssdMMMNysssso. Host: SY-H110Z FS V3.0
/ssssssssssshdmmNNmmyNMMMMhssssss/ Kernel: 5.11.0-49-generic
+ssssssssshmydMMMMMMMNddddyssssssss+ Uptime: 7 hours, 57 mins
/sssssssshNMMMyhhyyyyhmNMMMNhssssssss/ Packages: 2611 (dpkg), 11 (snap)
.ssssssssdMMMNhsssssssssshNMMMdssssssss. Shell: bash 5.1.4
+sssshhhyNMMNyssssssssssssyNMMMysssssss+ Resolution: 2560x1440
ossyNMMMNyMMhsssssssssssssshmmmhssssssso Terminal: /dev/pts/2
ossyNMMMNyMMhsssssssssssssshmmmhssssssso CPU: Intel i3-8100 (4) @ 3.600GHz
+sssshhhyNMMNyssssssssssssyNMMMysssssss+ GPU: Intel CoffeeLake-S GT2 [UHD Graphics 630]
.ssssssssdMMMNhsssssssssshNMMMdssssssss. Memory: 4973MiB / 14946MiB
/sssssssshNMMMyhhyyyyhdNMMMNhssssssss/
+sssssssssdmydMMMMMMMMddddyssssssss+
/ssssssssssshdmNNNNmyNMMMMhssssss/
.ossssssssssssssssssdMMMNysssso.
-+sssssssssssssssssyyyssss+-
`:+ssssssssssssssssss+:`
.-/+oossssoo+/-.
*-network:0
description: Ethernet interface
product: I350 Gigabit Network Connection
vendor: Intel Corporation
physical id: 0
logical name: enp1s0f0 # 还有enp1s0f1、enp1s0f2、enp1s0f3,共四个接口
size: 1Gbit/s
capacity: 1Gbit/s
width: 32 bits
clock: 33MHz
Ubuntu 21.04
使用了netplan作为默认的网络管理工具,所以,我的网络配置文件应该在 /etc/netplan/
目录下了。
同时,Ubuntu 使用 ufw
作为默认的网络防火墙,ufw的配置文件,那么一定是在 /etc/default/ufw
文件下了。
NAS服务器上的网络接口,如图所示,我打算用 enp1s0f0
连接外网(路由器);使用enp1s0f2
、enp1s0f3
连接我的台式机和其他设备;enp1s0f1
接口保留(暂时想不到要干什么)
网桥配置
- 可以先使用
ip address
观察一下现在的网络情况,和后面做一个对照 sudo vim /etc/netplan/br0.yaml
打开(新建)我们bridge的配置文件- 配置 网桥(bridge)
network:
version: 2
renderer: networkd
ethernets:
enp1s0f0:
dhcp4: false
dhcp6: false
enp1s0f2:
dhcp4: false
enp1s0f3:
dhcp4: false
bridges:
br0:
macaddress: aa:bb:cc:11:22:33
dhcp4: no
dhcp6: no
addresses:
- 192.168.188.161/24
- 2408:1234:5678:9abc::de/128
gateway4: 192.168.188.1
nameservers:
addresses:
- 192.168.188.1
interfaces:
- enp1s0f0
- enp1s0f2
- enp1s0f3
注意,yaml配置文件有着严格的缩进检查,就像python一样。
* version
和renderer
标签,我不确定具体作用,就不展开讨论了。
* ethernets
标签中,我重写了enp1s0f0
、enp1s0f2
、enp1s0f3
三个网络接口的规则,关闭了三者的DHCP服务。
* bridges
标签中,我定义了一个网桥,名为br0
,它的MAC地址是aa:bb:cc:11:22:33
,不使用dhcp服务获取IP,我指定了其IP地址(一个IPv4地址,一个IPv6地址),然后指定了网关,DNS服务器地址,并且指定了这个网桥包括enp1s0f0
、enp1s0f2
、enp1s0f3
三个接口。
3. 修改后退出编辑器 使用命令sudo netplan apply
应用修改
4. 等10s左右,可以通过ip address
观察网络是否应用成功,还可以使用命令 route
观察路由表的出口、接口情况,使用brctl show
查看系统内网桥的情况
* 通过 ip address
观察到br0接口获得外网IP地址,原网络物理接口没有任何IP地址,即网桥搭建成功!
ufw防火墙配置
诶诶诶?!别着急,这时候你会发现你的虚拟机也好,主机也好,是无法获取到路由器DHCP下发的IP地址的!现在没办法上网!
嗯。一定是哪里出了问题!
这个问题我找了三天,然后在Ubuntu大佬群里,写了一篇小作文咨询在座的各位大佬们,唰的一下,很快啊,大佬一句话,命中关键:“看看防火墙?”。
1. sudo vim /etc/default/ufw
打开ufw防火墙的配置文件
2. 找到 DEFAULT_FORWARD_POLICY
、DEFAULT_INPUT_POLICY
两项,值改为ACCEPT
3. sudo ufw reload
重新载入防火墙
WARNING 这样改可能会有安全性问题,请勿在生产环境随意修改防火墙。
*DEFAULT_FORWARD_POLICY
可以使其他设备获取到路由器DHCP下发的IP地址
*DEFAULT_INPUT_POLICY
可以使其他设备,通过 被当做交换机的Linux的IP地址 连接到当前Linux系统
QEMU/KVM 虚拟机配置
这个简单
1. 打开(或新建)一个网络
2. 网络源选择“桥接设备”
3. 设备名称填写刚才创建的网桥名br0
4. 进入系统观察网络情况
文章评论