KVM虚拟机网络配置方式 (Bridge方式 Nat方式)

Summary

使用libvirt安装完qemu kvm虚拟机,但是发现虚拟机不能上网,虚拟机想要上网,有很多中方法。
我们称Guest机器为虚拟机,Host机器为开机运行的真实机器。

KVM虚拟机网络配置一般的两种方式:

  • NAT (默认上网) 虚拟机利用host机器的ip进行上网.对外显示一个ip
  • Bridge 将虚拟机桥接到host机器的网卡上,guest和host机器都通过bridge上网.对外不同的ip

NAT 的网络结构图:

这里写图片描述

Bridge 的网络结构图:
这里写图片描述

简单介绍 (Host-Only也是网络配置的一种方式,这里只说它的概念)

桥接

桥接网络是指本地物理网卡和虚拟网卡通过VMnet0虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图上处于同等地位,那么物理网卡和虚拟网卡就相当于处于同一个网段,虚拟交换机就相当于一台现实网络中的交换机,所以两个网卡的IP地址也要设置为同一网段。所以当我们要在局域网使用虚拟机,对局域网其他pc提供服务时,例如提供ftp,提供ssh,提供http服务,那么就要选择桥接模式。

例如
大学宿舍里有一个路由器,宿舍里四个人连接这个路由器,路由器的wanip就不理会了,
这个ip是动态获取的,而lanip默认是192.168.1.1,子网掩码是255.255.255.0。
而其他四个人是自动获取ip,假设四个人的ip是:
A:192.168.1.100/255.255.255.0, 
B:192.168.1.101/255.255.255.0,
C:192.168.1.102/255.255.255.0, 
D:192.168.1.103/255.255.255.0
那么虚拟机的ip可以设置的ip地址是192.168.1.2-192.168.1.99,192.168.1.104-192.168.1.254
(网络地址全0和全1的除外,再除去ABCD四个人的ip地址)
那么虚拟机的ip地址可以设置为192.168.1.98/255.255.255.0,设置了这个ip地址,
ABCD这四个人就可以通过192.168.1.98访问虚拟机了,如果虚拟机需要上外网,
那么还需要配置虚拟机的路由地址,就是192.168.1.1了,这样,虚拟机就可以上外网了,
但是,上网我们一般是通过域名去访问外网的,所以我们还需要为虚拟机配置一个dns服务器,
我们可以简单点,把dns服务器地址配置为google的dns服务器:8.8.8.8,到此,虚拟机就可以上网了。

NAT

NAT模式中,就是让虚拟机借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网。
NAT模式中,虚拟机的网卡和物理网卡的网络,不在同一个网络,虚拟机的网卡,是提供的一个虚拟网络。
NAT和桥接的比较:
(1) NAT模式和桥接模式虚拟机都可以上外网。
(2) 由于NAT的网络在一个虚拟网络里,所以局域网其他主机是无法访问虚拟机的,而宿主机可以访问虚拟机,虚拟机可以访问局域网的所有主机,因为真实的局域网相对于NAT的虚拟网络,就是NAT的虚拟网络的外网,不懂的人可以查查NAT的相关知识。
(3) 桥接模式下,多个虚拟机之间可以互相访问;NAT模式下,多个虚拟机之间也可以相互访问。
如果你建一个虚拟机,只是给自己用,不需要给局域网其他人用,那么可以选择NAT,毕竟NAT模式下的虚拟系统的TCP/IP配置信息是由VMnet8(NAT)虚拟网络的DHCP服务器提供的,只要虚拟机的网路配置是DHCP,那么你不需要进行任何其他的配置,只需要宿主机器能访问互联网即可,就可以让虚拟机联网了。

例如
你想建多个虚拟机集群,作为测试使用,而宿主机可能是一个笔记本,ip不固定。
这种应用场景,我们需要采用nat模式了,但是我们要考虑一个问题,
虚拟机之间是需要互访的,默认采用dhcp,虚拟机的ip每次重启,ip都是不固定的,
所以我们需要手工设置虚拟机的ip地址。 但是我们对虚拟机网卡所在的虚拟网络的信息还一无所知,
例如虚拟机网络的路由地址,子网掩码,所以我们需要先查下nat虚拟网络的信息。(可以用#ifconfig 查看)
例如子网ip显示为192.168.233.0,子网掩码是255.255.255.0,那路由地址呢,其实就是网关IP了,
都是同个东西,这里是192.168.233.2。
接下来就好办了,在对应的虚拟机设置好ip,子网掩码,路由地址就可以上外网了,至于dns可以设置为8.8.8.8.

Host-Only
在Host-Only模式下,虚拟网络是一个全封闭的网络,它唯一能够访问的就是主机。其实Host-Only网络和NAT网络很相似,不同的地方就是Host-Only网络没有NAT服务,所以虚拟网络不能连接到Internet。主机和虚拟机之间的通信是通过VMware Network Adepter VMnet1虚拟网卡来实现的。
  Host-Only的宗旨就是建立一个与外界隔绝的内部网络,来提高内网的安全性。这个功能或许对普通用户来说没有多大意义,但大型服务商会常常利用这个功能。如果你想为VMnet1网段提供路由功能,那就需要使用RRAS,而不能使用XP或2000的ICS,因为ICS会把内网的IP地址改为192.168.0.1,但虚拟机是不会给VMnet1虚拟网卡分配这个地址的,那么主机和虚拟机之间就不能通信了。
  

NAT方式

客户机安装完成后,需要为其设置网络接口,以便和主机网络,客户机之间的网络通信。
事实上,如果要在安装时使用网络通信,需要提前设置客户机的网络连接。

NAT方式原理

NAT方式是kvm安装后的默认方式。它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机。

检查当前的网络设置:
这里写图片描述
default是宿主机安装虚拟机支持模块的时候自动安装的。

检查当前的网络接口:
这里写图片描述

其中virbr0是由宿主机虚拟机支持模块安装时产生的虚拟网络接口,也是一个switch和bridge,负责把内容分发到各虚拟机。

几个虚拟机管理模块产生的接口关系如下图:
这里写图片描述
从图上可以看出,虚拟接口和物理接口之间没有连接关系,所以虚拟机只能在通过虚拟的网络访问外部世界,无法从网络上定位和访问虚拟主机。

virbr0是一个桥接器,接收所有到网络192.168.122.*的内容。从下面命令可以验证:
这里写图片描述
这里写图片描述

同时,虚拟机支持模块会修改iptables规则,通过命令可以查看:

iptables -t nat -L -nv
iptables -t filter -L -nv

如果没有default的话,或者需要扩展自己的虚拟网络,可以使用命令重新安装NAT。

NAT方式的适用范围
桌面主机虚拟化。

创建步骤

virsh net-define /usr/share/libvirt/networks/default.xml

此命令定义一个虚拟网络,default.xml的内容:
这里写图片描述
也可以修改xml,创建自己的虚拟网络。
标记为自动启动:
这里写图片描述
启动网络:

virsh net-start default

网络启动后可以用命令brctl show 查看和验证。

修改/etc/sysctl.conf中参数,允许ip转发:

net.ipv4.ip_forward=1
安装客户机时注意:网络要选择用NAT方式。

文本方式安装:(这里不介绍图形化界面)
编辑修改虚拟机配置文件 /etc/libvirt/qemu/v1.xml,增加如下内容:

<interface type='network'>
      <mac address='52:54:00:4f:1b:07'/>
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

虚拟机启动后,验证网络接口是否正常:
这里写图片描述

Bridge方式的影响
Bridge方式配置出来的接口对NAT方式没有影响,因为NAT方式并没有使用物理网卡。但作为客户机,只能选择其中的一种。

Bridge方式

Bridge方式原理

Bridge方式即虚拟网桥的网络连接方式,是客户机和子网里面的机器能够互相通信。可以使虚拟机成为网络中具有独立IP的主机。

桥接网络(也叫物理设备共享)被用作把一个物理设备复制到一台虚拟机。网桥多用作高级设置,特别是主机多个网络接口的情况。
这里写图片描述
如上图,网桥的基本原理就是创建一个桥接接口br0,在物理网卡和虚拟网络接口之间传递数据。

Bridge方式的适用范围
服务器主机虚拟化。

网桥方式配置步骤

1、编辑修改网络设备脚本文件,增加网桥设备br0

# vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO=static
IPADDR=10.0.112.39
NETMASK=255.255.255.0
GATEWAY=10.0.112.1
DEFROUTE=yes

上述配置将虚拟网卡配置在了10.0.112.* 网段。如果不需要静态地址,可以把配置地址的相关项屏蔽。如:

DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"
BOOTPROTO=dhcp

2、编辑修改网络设备脚本文件,修改网卡设备eth0

DEVICE=”eth0”
NM_CONTROLLED=”no”
ONBOOT=”yes”
TYPE=Ethernet
BOOTPROTO=none
BRIDGE=”br0”
NAME=”System eth0”
HWADDR=44:37:E6:4A:62:AD

NM_CONTROLLED这个属性值,根据RedHat公司的文档是必须设置为“no”的(这个值为“yes”表示可以由服务NetworkManager来管理。NetworkManager服务不支持桥接,所以要设置为“no”。),但实际上发现设置为“yes”没有问题。通讯正常。

3、重启网络服务

#service network restart

4、校验桥接接口

#brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.4437e64a62ad       no              eth0

客户机配置客户机安装时注意,网络要选择用br0桥接方式。

文本方式:(同样只介绍文本方式)
编辑修改虚拟机配置文件 /etc/libvirt/qemu/v1.xml,增加如下内容

<interface type='bridge'>
  <mac address='52:54:00:da:c3:dc'/>
  <source bridge='br0'/>
  <model type='virtio'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

虚拟机启动后,验证网络接口是否正常:

# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.4437e64a62ad       no              eth0
                                                                              vnet0

NAT方式的影响

网桥方式的配置与虚拟机支持模块安装时预置的虚拟网络桥接接口virbr0没有任何关系,配置网桥方式时,可以把virbr0接口(即NAT方式里面的default虚拟网络)删除。

# virsh net-destroy default
# virsh net-undefine default
# service libvirtd restart
### 配置网络以使本机能够访问 VMware 中的 KVM 虚拟机 为了实现从本地主机访问 VMware 环境中的 KVM 虚拟机,需要合理配置网络设置。以下是详细的解决方案: #### 1. **理解网络架构** 在 VMware 嵌套虚拟化的场景中,存在三层网络结构: - 物理主机(运行 VMware ESXi 或 Workstation) - 宿主虚拟机(CentOS7 运行 KVM) - KVM 内部的虚拟机 每层都需要独立的网络配置来确保通信畅通。 --- #### 2. **配置 VMware 的网络模式** 在 VMware 工具中创建 CentOS7 虚拟机时,可以选择不同的网络适配器模式。推荐使用桥接模式 (Bridged Mode),以便让宿主虚拟机获得与物理主机同一局域网内的 IP 地址[^3]。 如果使用 NAT 模式,则需额外配置端口转发规则;而仅 Host-only 则无法直接连接到外部网络。 ```bash # 查看当前可用网络接口 ip addr show ``` 确认 CentOS7 获取到了有效的公网或私有子网地址后记录其IP地址作为下一步的基础[^4]。 --- #### 3. **启用并验证 Libvirt 和 Bridge Network** Libvirt 是管理 KVM 虚拟机的核心工具之一,在安装完毕之后应启动服务并检查状态: ```bash systemctl start libvirtd systemctl enable libvirtd systemctl status libvirtd ``` 接着定义一个新的 bridge 设备供后续 guest 使用,默认名称可能是 `virbr0` ,但也可以手动指定更合适的标签比如 br0 : ```xml <network> <name>custom-br</name> <bridge name=&#39;br0&#39;/> <forward mode=&#39;nat&#39;/> <!-- 可选 --> <ip address=&#39;192.168.122.1&#39; netmask=&#39;255.255.255.0&#39;> <dhcp> <range start=&#39;192.168.122.2&#39; end=&#39;192.168.122.254&#39;/> </dhcp> </ip> </network> ``` 上述 XML 文件通过 virsh 导入即可生效: ```bash virsh net-define /path/to/your/network.xml virsh net-start custom-br virsh net-autostart custom-br ``` 此时新加入此 network 下面的所有 guests 将自动获取由 dhcp 提供的有效 ip 地址. --- #### 4. **调整防火墙策略允许流量进入** 无论是哪一层都可能存在安全防护机制阻止不必要的数据包传输过来。因此有必要开放特定端口号或者完全关闭 selinux/firewalld 来测试连通性问题是否存在于此环节之中. 对于临时禁用firewall命令如下所示: ```bash systemctl stop firewalld.service setenforce 0 ``` 长期方案则建议精确设定规则而非粗暴移除保护措施[^2]: ```bash firewall-cmd --permanent --add-port=22/tcp # SSH example port opening firewall-cmd --reload # Apply changes immediately without restarting service. ``` 同样道理适用于更高层次即 vmware 层面上也需要相应处理才能保证整个链路通畅无阻塞现象发生。 --- #### 5. **最终测试阶段** 完成以上步骤以后就可以尝试 ping 测试以及 ssh 登录等方式检验是否成功建立了预期效果下的通讯关系了 。假设目标机器分配得到的是 192.168.x.y 形式的ipv4数值形式表示法的话那么执行下面这样的指令就显得尤为重要起来啦! ```bash ping 192.168.x.y # Replace with actual IP of your kvm instance inside centos7 vm within esxi host machine . ssh user@192.168.x.y # Use appropriate username according to setup during creation phase earlier mentioned above sections already discussed thoroughly enough hopefully now you understand better how things work together here ! ``` --- ### 注意事项 尽管理论上可以做到多级嵌套但是性能损耗会随着层数增加变得越来越明显所以如果不是特别必要情况下尽量减少这种复杂度较高的设计方案应用场合范围局限较小一些反而更加合适一点哦😊
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值