KVM创建桥接网卡–最简洁最详细

1.网络模式原理

1.1.NAT模式网络原理

kvm桥接新网卡 kvm创建桥接网卡_外网

NAT网络模式网卡清单
1.宿主机网卡 eth0
2.虚拟机网卡 vnet0
3.virbr0 宿主机网关

NAT网络虚拟机上网原理
要介绍NAT网络原理,首先要将网络分层,外网和内网
对于宿主机来说,宿主机的网络10.0.0.11 就是内网也就是局域网,通常是家里路由器分配的网络,连接到外网的宽带就是宿主机的外网。
对于虚拟机来说,虚拟机的网络192.168.122.22就是内网也就是局域网,是在宿主机下虚拟出来的网络,此时宿主机的网络地址相对与虚拟机来说就是外网。
外网–宿主机—虚拟机之间的外网和局域网相对关系介绍清除后,下面就方便介绍NAT网络原理了。
首先虚拟机要连接外网,就必须通过宿主机的网关将包发送出去,宿主机接收到虚拟机的网络包后,就说明虚拟机可以访问外网了,(这个外网指的是宿主机)。此时虚拟机要访问互联网,需要通过NAT模式配置iptable路由转换规则通过宿主机网卡访问互联网。

1.2.桥接模式网络原理

kvm桥接新网卡 kvm创建桥接网卡_kvm桥接新网卡_02

桥接模式原理
1.宿主机创建一个br0 桥接网卡,配置当前网卡IP地址分配规则和网关。
2.虚拟机使用桥接模式配置与br0同网段的IP地址和网关后,虚拟机的网络包直接通过宿主机的br0网卡的网关发送到宿主机的eth0网卡,通过eth0网卡连接互联网。因为虚拟机配置的网卡IP地址与宿主机是同一网段的地址,因此宿主机和虚拟机直接可以互相访问,多个虚拟机之间也可以互相访问。同时虚拟机还可以连接互联网。

2.创建宿主机桥接网络

注意是在宿主机下创建桥接网卡,不是在虚拟机中创建。

2.1.创建br0网卡
  • 查看当前使用的网卡名称 输入 ifconfig 命令,查看当前链接的IP地址对应的网卡名称,并记住。

kvm桥接新网卡 kvm创建桥接网卡_IP_03

  • 创建桥接网卡
## 1.进入到网卡配置路径
cd /etc/sysconfig/network-scripts/

##2.备份当前网卡文件信息
cp ifcfg-em1 ./ifcfg-em1.back

##3.创建桥接网卡命令
virsh iface-bridge em1 br0

##4.查看网卡列表中新增了br0网卡
ll /etc/sysconfig/network-scripts/ifcfg-*

-rw-r--r--  1 root root  76 Sep 28 19:43 /etc/sysconfig/network-scripts/ifcfg-br0
-rw-r--r--  1 root root  39 Sep 28 19:43 /etc/sysconfig/network-scripts/ifcfg-em1
  • 验证网卡是否创建成功
    输入ifconfig命令,查看网卡IP地址已经到br0网卡。创建成功

kvm桥接新网卡 kvm创建桥接网卡_桥接_04


分别查看em1和br0网卡文件信息如下

查看em1网卡信息

kvm桥接新网卡 kvm创建桥接网卡_外网_05


查看br0网卡信息

kvm桥接新网卡 kvm创建桥接网卡_kvm桥接新网卡_06

原来em1网卡中的IP地址不显示,IP地址在br0 网卡显示,表示br0网卡创建成功。

3.配置虚拟机桥接网络

修改虚拟机的网卡为桥接模式

3.1.关闭正在运行的虚拟机
## 1.查看虚拟机是否在运行
virsh list --all
## 2.如果运行则执行下面的命令关闭虚拟机
virsh destroy 虚拟机名称
3.2.配置虚拟机网卡信息
  • 1.修改虚拟机网卡配置信息
virsh edit 虚拟机名称

向下查看配置文件直到 interface配置位置

修改前显示type类型是network

kvm桥接新网卡 kvm创建桥接网卡_kvm桥接新网卡_07


修改后类型为bridge

kvm桥接新网卡 kvm创建桥接网卡_外网_08


注意:如果用上面 virsh edit 命令编辑后提示下面的信息,可以用另一种方式编辑。

kvm桥接新网卡 kvm创建桥接网卡_外网_09


执行下面的命令和上面命令效果是一样的都是修改同一个文件。

## 1.进入下面的目录
/etc/libvirt/qemu
## 2.修改虚拟机的配置文件
vim 虚拟机名称.xml
## 3.修改内容和上面一样
<interface type='bridge'>
      <mac address='52:54:00:84:1d:dc'/>
      <source network='br0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
  • 2.启动虚拟机
virsh start 虚拟机名称
  • 3.VNC连接虚拟机配置网卡信息 网络改为桥接网卡

kvm桥接新网卡 kvm创建桥接网卡_外网_10

## 1.进入网卡配置路径
cd /etc/sysconfig/network-scripts/
## 2.修改网卡信息
只需要添加下面有注释的几行即可
vim  ifcfg-eth0
## 3.修改如下信息
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static  # static是静态IP
IPADDR=110.16.88.111  # 同宿主机在一个网段的IP地址即可
NETMASK=255.255.255.0  # 同宿主机网段
GATEWAY=110.16.88.1  # 同宿主机网关相同
DNS1=110.16.8.200  # 同宿主机DNS相同
DNS2=110.16.8.300
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=bc392963-1308-4e4a-8da8-34805d8f1af5
DEVICE=eth0
ONBOOT=yes
  • 4.关闭虚拟机网络管理服务
#查看网络管理服务是否启动
systemctl status NetworkManager
显示active (running)就是启动状态
NetworkManager.service - Network Manager
   Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
   Active: active (running) since \u4e8c 2020-09-29 10:41:17 CST; 6min ago
     Docs: man:NetworkManager(8)
 Main PID: 553 (NetworkManager)
   CGroup: /system.slice/NetworkManager.service
           \u2514\u2500553 /usr/sbin/NetworkManager --no-daemon

# 关闭网络管理服务
systemctl stop NetworkManager
  • 5.重启虚拟机网卡
systemctl restart network
  • 查看IP地址是否生效
ifconfig
  • 6.验证宿主机与虚拟机是否可连接
# 在宿主机上ping 虚拟机的地址
ping 110.16.88.111

#结果显示宿主机与虚拟机连通
PING 110.16.88.111 (110.16.88.111) 56(84) bytes of data.
64 bytes from 110.16.88.111: icmp_seq=1 ttl=64 time=0.406 ms
64 bytes from 110.16.88.111: icmp_seq=2 ttl=64 time=0.292 ms
  • 7.验证虚拟机是否可以连外网
# 在宿主机上ping baidu网址
[root@agent network-scripts]# ping www.baidu.com
PING www.a.shifen.com (220.181.38.149) 56(84) bytes of data.
64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq=1 ttl=47 time=10.7 ms
64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq=2 ttl=47 time=9.28 ms
64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq=3 ttl=47 time=8.21 ms
64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq=4 ttl=47 time=9.50 ms
  • 8.在宿主机上直接通过xhell 访问虚拟机
# 在本地主机上用xhell工具连接虚拟机成功
Connecting to 110.16.88.111:22...
Connection established.
Escape character is '^@]'.

WARNING! The remote SSH server rejected X11 forwarding request.
Last login: Tue Sep 29 10:41:28 2020
[root@agent ~]#