如何在安装完KVM后构建网桥
Easul Lv6

由于在安装完KVM虚拟机后(相关安装过程可参考这篇文章),我选择的是 macvtap桥接 模式。这种模式会导致虚拟机可以连接到局域网,局域网内的其他机器也可以访问该虚拟机(因为IP是同网段的),但宿主机和虚拟机之间却无法互通。
这篇文章主要就是用于记录如何保证使用了如上桥接模式之后,还能够让虚拟机和宿主机之间也能够互相访问,也就是实现 宿主机与虚拟机的网桥设置

以下为相关命令
先进行网桥的设置

折叠代码块BASH 复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 更新软件源
sudo apt-get update
# 安装开启桥接接口所需要的工具包
sudo apt-get install bridge-utils
# 创建一个网桥,我命名为br-kvm
# 网桥在我的理解应该就是作为一个通道,保证虚拟机和宿主机之间的网络互通。
sudo brctl addbr br-kvm
# 查看一下网桥是否创建成功,出现 br-kvm 的字样即可
sudo brctl show
# 将虚拟机所在物理机器的网卡加入到刚刚的网桥
# 这里可能会卡一小会,问题不大
# 我的网卡名称为 enp9s0,可通过 ip addr 查看
sudo brctl addif br-kvm enp9s0
# 然后看一下网卡是否被加入到了刚刚的网桥中,interfaces 中应该会多出刚刚的网卡名
# 可能也会卡一小会
# bridge name bridge id STP enabled interfaces
# br-kvm 8000.ba46afb03ef5 no enp9s0
sudo brctl show
# 删除物理网卡接口的IP地址,并把这个IP地址配置到桥接接口上,
# 然后开启桥接接口,添加默认网关
# IP地址替换成自己网卡的IP地址
sudo ip addr del dev enp9s0 192.168.1.15/24
sudo ip addr add 192.168.1.15/24 dev br-kvm
sudo ip link set up br-kvm
sudo route add default gw 192.168.1.1
# 然后在 virt-manager 的配置页面的 网络源 处设置为 指定共享设备名称
# 网桥名称填写 br-kvm 即可
# 这时 kvm虚拟机 和 宿主机 之间的网络就能够互通了

设置完之后,可能虚拟机只能访问宿主机,这个时候使用如下命令

折叠代码块BASH 复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# 阶段1
# 先找下虚拟机的网卡,网卡名册为 vnet 开头的名称
ip addr
# 在看下刚刚的虚拟机的网卡有没有添加到网桥上,有的话会在 interfaces 下显示
# bridge name bridge id STP enabled interfaces
# br-kvm 8000.ba46afb03ef5 no enp9s0
# vnet1
sudo brctl show
# 没有的话就填上
sudo brctl addif br-kvm vnet1

# 阶段2
# 如果此时还不行的话就看看kvm虚拟机的内部路由
route -n
# 路由不对的话,就添加下默认网关
sudo route add default gw 192.168.1.1
# 然后重启网络
sudo service network restart

# 阶段3
# 如果还不行的话,就看下宿主机是不是有防火墙,有的话就关掉
sudo sysetmctl status iptables
sudo sysetmctl status firewalld
sudo sysetmctl stop iptables
sudo sysetmctl stop firewalld

# 阶段4
# 如果还不行,那么就
# 修改下宿主机网桥的内核参数,如果为 0 ,则改成 1
cat /proc/sys/net/ipv4/ip_forward
sudo sudo tee /proc/sys/net/ipv4/ip_forward <<-'EOF'
1
EOF
# 修改 nf_call_iptables ,使宿主机iptables等防火墙不对bridge的数据进行过滤处理。
# br-kvm 为自己网桥的名称
# 若为1,则需改为0
cat /proc/sys/net/bridge/bridge-nf-call-iptables
cat /sys/devices/virtual/net/br-kvm/bridge/nf_call_iptables
sudo sudo tee /proc/sys/net/bridge/bridge-nf-call-iptables <<-'EOF'
0
EOF
sudo sudo tee /sys/devices/virtual/net/br-kvm/bridge/nf_call_iptables <<-'EOF'
0
EOF
# 修改完之后,可以将同目录下的 bridge-nf-call-arptables、bridge-nf-call-ip6tables 的参数也设置为 0

# 阶段5
# 如果还是不行,那么就需要看一下宿主机是否有其他防火墙软件,或者有 selinux, KYSEC 的影响
# 关掉应该就可以了

恢复原本的状态需要使用如下命令

折叠代码块BASH 复制代码
1
2
3
4
5
6
7
# 关闭桥接接口
sudo ip link set br-kvm down
# 删除桥接接口的物理网卡
sudo brctl delif br-kvm enp9s0
# 重启物理网卡
sudo ip link set enp9s0 down
sudo ip link set up enp9s0

参考链接

 评论
Powered By Valine
v1.5.2