虚拟机
快来分享你的内容吧~
- 2025-06-30·Java后端
虚拟机没有虚拟网卡问题记录
### 主要就是注册表没删干净 有一个免费软件**CClear**可以删干净,然后可以对vmware进行修复。就可以了 合理利用vmware自带的修复功能。 链接如下:https://www.ccleaner.com/zh-cn/download
#资源# VMware Workstation Pro 16 虚拟机安装教程(亲测!):https://www.cnblogs.com/Dengv5/p/16386192.html 秘钥激活:https://www.cnblogs.com/WWIandMC/p/17201794.html
简单实现在隔离环境中部署kvm虚拟机
<html> <head></head> <body> <div class="content ql-editor"> <p><span style="font-family: PingFangSC-Regular; font-size: 1em;">实验拓补图:</span></p> <p><br></p> <p><span style="background-color: rgb(255, 255, 255); color: rgb(51, 51, 51);">其中,使用 </span><strong style="background-color: rgb(255, 255, 255); color: rgb(51, 51, 51);">仅主机</strong><span style="background-color: rgb(255, 255, 255); color: rgb(51, 51, 51);"> 网段模拟内网环境,使用 </span><strong style="background-color: rgb(255, 255, 255); color: rgb(51, 51, 51);">NAT</strong><span style="background-color: rgb(255, 255, 255); color: rgb(51, 51, 51);"> 网段作为对外通信接口</span></p> <p><br></p> <p><img src="https://pic.code-nav.cn/planet_post_image/1625024135581265922/11e6bvfi.jpeg"></p> <p><br></p> <h3><strong style="color: rgb(51, 51, 51);">基础网络配置</strong></h3> <p><br></p> <p>该实验使用3台VMware虚拟机,镜像为 <strong>CentOS-7-x86_64-Minimal-2009.iso</strong> 以及PC主机。</p> <p>具体配置信息如下:</p> <blockquote> <div class="blockquote-item"> PS:网关服务器所需的NAT网卡数量为2,且开机需保持关闭状态 </div> </blockquote> <p><br></p> <p><img src="https://pic.code-nav.cn/planet_post_image/1625024135581265922/7bvykq9g.jpeg"></p> <p><br></p> <p>创建完虚拟机后,我们便可以开始依次对虚拟机的网络进行配置:</p> <blockquote> <div class="blockquote-item"> 实验使用nmcli工具进行网络配置,不熟悉的也可以在/etc/sysconfig/network-scripts/ifcfg-X(X对应网卡名称)进行配置 </div> </blockquote> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">KVMgw节点:</strong></h4> <p><br></p> <ol> <li data-list="bullet"><span class="ql-ui"></span>配置内网(仅主机)ip:</li> </ol> <div class="ql-code-block-container"> <div class="ql-code-block"> [root@kvmgw ~]# hostnamectl set-hostname KVMgw </div> <div class="ql-code-block"> [root@kvmgw ~]# nmcli con modify eth0 ipv4.method manual ipv4.addr 192.168.28.10/24 autoconnect yes </div> <div class="ql-code-block"> [root@kvmgw ~]# nmcli con up eth0 </div> </div> <p><br></p> <ol> <li data-list="bullet"><span class="ql-ui"></span>查看网卡状态:</li> </ol> <div class="ql-code-block-container"> <div class="ql-code-block"> [root@kvmgw ~]# nmcli con show </div> <div class="ql-code-block"> NAME UUID TYPE DEVICE </div> <div class="ql-code-block"> eth0 45c16f44-3a91-421f-b9df-4ad3cb247dd1 ethernet eth0 </div> <div class="ql-code-block"> Wired connection 1 de4f9f0e-60c2-3755-9313-c6482bbd75c3 ethernet eth1 </div> <div class="ql-code-block"> Wired connection 2 56676ca4-3627-3bbb-ad79-228a87e00949 ethernet eth2 </div> </div> <blockquote> <div class="blockquote-item"> 若NAT两张网卡处于开启状态,则需要手动关闭 </div> </blockquote> <p><br></p> <div class="ql-code-block-container"> <div class="ql-code-block"> [root@kvmgw ~]# nmcli con down Wired\ connection\ 1 </div> <div class="ql-code-block"> Connection 'Wired connection 1' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6) </div> <div class="ql-code-block"> [root@kvmgw ~]# nmcli con down Wired\ connection\ 2 </div> <div class="ql-code-block"> Connection 'Wired connection 2' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/7) </div> </div> <p><br></p> <ol> <li data-list="bullet"><span class="ql-ui"></span>再次查看网卡状态:</li> </ol> <div class="ql-code-block-container"> <div class="ql-code-block"> [root@kvmgw ~]# nmcli con show </div> <div class="ql-code-block"> NAME UUID TYPE DEVICE </div> <div class="ql-code-block"> eth0 45c16f44-3a91-421f-b9df-4ad3cb247dd1 ethernet eth0 </div> <div class="ql-code-block"> Wired connection 1 de4f9f0e-60c2-3755-9313-c6482bbd75c3 ethernet -- </div> <div class="ql-code-block"> Wired connection 2 56676ca4-3627-3bbb-ad79-228a87e00949 ethernet -- </div> </div> <p><br></p> <p>我们可以看到,两张NAT网卡已经关闭连接了,现在我们可以将两张网卡绑定在一个聚合口中。</p> <p>因为多个物理网卡聚合在一起,可以实现冗错和提高吞吐量,即 <strong>主备</strong> 和 <strong>负载均衡</strong> 两个模式,我们将选用主备这样模式。</p> <p><br></p> <ol> <li data-list="bullet"><span class="ql-ui"></span>创建聚合口:</li> </ol> <div class="ql-code-block-container"> <div class="ql-code-block"> [root@kvmgw ~]# nmcli connection add type bond ifname external_bond con-name external mode active-backup </div> <div class="ql-code-block"> Connection 'external' (5b3f5182-eb9c-4e03-a256-13640fe081ce) successfully added. </div> </div> <p>具体参数在这里不作过多说明,有兴趣可移至该<a href="http://%5B(42%E6%9D%A1%E6%B6%88%E6%81%AF)%20Linux%E7%B3%BB%E7%BB%9F%E5%8F%8C%E7%BD%91%E5%8D%A1%E8%81%9A%E5%90%88%E8%B6%85%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B_linux%E5%8F%8C%E7%BD%91%E5%8F%A3%E8%81%9A%E5%90%88_Duxingxu%E7%9A%84%E5%8D%9A%E5%AE%A2-CSDN%E5%8D%9A%E5%AE%A2%5D(https://blog.csdn.net/duxingxu/article/details/116394875)" target="_blank" style="color: rgb(65, 131, 196);">文章</a></p> <p><br></p> <ol> <li data-list="bullet"><span class="ql-ui"></span>将外网卡(NAT)加入到聚合口:</li> </ol> <div class="ql-code-block-container"> <div class="ql-code-block"> [root@kvmgw ~]# nmcli connection add type bond-slave ifname eth1 con-name external_link1 master external_bond </div> <div class="ql-code-block"> Connection 'external_link1' (1b589260-d79a-48bb-a057-874d24702332) successfully added. </div> <div class="ql-code-block"> [root@kvmgw ~]# nmcli connection add type bond-slave ifname eth2 con-name external_link2 master external_bond </div> <div class="ql-code-block"> Connection 'external_link2' (f6005944-4853-4b61-b93f-5b6b7b3f3f6b) successfully added. </div> </div> <p><br></p> <ol> <li data-list="bullet"><span class="ql-ui"></span>为聚合口配置ip:</li> </ol> <div class="ql-code-block-container"> <div class="ql-code-block"> [root@kvmgw ~]# nmcli connection modify external ipv4.method manual ipv4.address 192.168.200.60/24 ipv4.gateway 192.168.200.2 ipv4.dns 114.114.114.114 autoconnect yes </div> <div class="ql-code-block"> [root@kvmgw ~]# nmcli con up external </div> </div> <p><br></p> <ol> <li data-list="bullet"><span class="ql-ui"></span>查看聚合口信息:</li> </ol> <blockquote> <div class="blockquote-item"> 在 Slave Interface 中可以看到 eth1 eth2 说明加入成功,若没有该信息说明加入失败,原因可能是先前没有关闭nat网卡仍保持启动中,该接口无法同时运行两份网络配置文件,可以先去将NAT网卡关闭。 </div> </blockquote> <div class="ql-code-block-container"> <div class="ql-code-block"> [root@kvmgw ~]# cat /proc/net/bonding/external_bond </div> <div class="ql-code-block"> Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011) </div> <div class="ql-code-block"> </div> <div class="ql-code-block"> Bonding Mode: fault-tolerance (active-backup) </div> <div class="ql-code-block"> Primary Slave: None </div> <div class="ql-code-block"> Currently Active Slave: eth1 </div> <div class="ql-code-block"> MII Status: up </div> <div class="ql-code-block"> MII Polling Interval (ms): 100 </div> <div class="ql-code-block"> Up Delay (ms): 0 </div> <div class="ql-code-block"> Down Delay (ms): 0 </div> <div class="ql-code-block"> </div> <div class="ql-code-block"> Slave Interface: eth1 </div> <div class="ql-code-block"> MII Status: up </div> <div class="ql-code-block"> Speed: 1000 Mbps </div> <div class="ql-code-block"> Duplex: full </div> <div class="ql-code-block"> Link Failure Count: 0 </div> <div class="ql-code-block"> Permanent HW addr: 00:0c:29:ce:9c:7d </div> <div class="ql-code-block"> Slave queue ID: 0 </div> <div class="ql-code-block"> </div> <div class="ql-code-block"> Slave Interface: eth2 </div> <div class="ql-code-block"> MII Status: up </div> <div class="ql-code-block"> Speed: 1000 Mbps </div> <div class="ql-code-block"> Duplex: full </div> <div class="ql-code-block"> Link Failure Count: 0 </div> <div class="ql-code-block"> Permanent HW addr: 00:0c:29:ce:9c:87 </div> <div class="ql-code-block"> Slave queue ID: 0 </div> </div> <p><br></p> <h4>KVM01节点:</h4> <ol> <li data-list="bullet"><span class="ql-ui"></span>配置ip:</li> </ol> <div class="ql-code-block-container"> <div class="ql-code-block"> [root@kvm01 ~]# nmcli con modify eth0 ipv4.method manual ipv4.addr 192.168.28.11/24 autoconnect yes </div> <div class="ql-code-block"> [root@kvm01 ~]# nmcli con up eth0 </div> </div> <ol> <li data-list="bullet"><span class="ql-ui"></span>配置网关:</li> </ol> <div class="ql-code-block-container"> <div class="ql-code-block"> [root@kvm01 ~]# nmcli con modify eth0 ipv4.gate 192.168.28.10 </div> <div class="ql-code-block"> [root@kvm01 ~]# nmcli con up eth0 </div> </div> <p><br></p> <h4>KVM02节点:</h4> <ol> <li data-list="bullet"><span class="ql-ui"></span>配置ip:</li> </ol> <div class="ql-code-block-container"> <div class="ql-code-block"> [root@kvm02 ~]# nmcli con modify eth0 ipv4.method manual ipv4.addr 192.168.28.12/24 autoconnect yes </div> <div class="ql-code-block"> [root@kvm02 ~]# nmcli con up eth0 </div> </div> <p><br></p> <ol> <li data-list="bullet"><span class="ql-ui"></span>配置网关:</li> </ol> <div class="ql-code-block-container"> <div class="ql-code-block"> [root@kvm02 ~]# nmcli con modify eth0 ipv4.gate 192.168.28.10 </div> <div class="ql-code-block"> [root@kvm02 ~]# nmcli con up eth0 </div> </div> <p><br></p> <h3><strong style="color: rgb(51, 51, 51);">网关服务器SNAT配置</strong></h3> <p><br></p> <p>在前面的配置中我们已经完成了内网的网络配置,现在我们将通过 <strong>SNAT</strong> 的方式实现内防外(用于kvm01/02安装软件)</p> <blockquote> <div class="blockquote-item"> 此时我们的网关服务器充当了内外网间的防火墙 </div> </blockquote> <p><br></p> <ol> <li data-list="bullet"><span class="ql-ui"></span>开启转发:</li> </ol> <div class="ql-code-block-container"> <div class="ql-code-block"> [root@kvmgw ~]# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf </div> <div class="ql-code-block"> [root@kvmgw ~]# sysctl -p </div> <div class="ql-code-block"> net.ipv4.ip_forward = 1 </div> </div> <p><br></p> <ol> <li data-list="bullet"><span class="ql-ui"></span>通过 Firewalld 防火墙配置 SNAT 代理功能:</li> </ol> <div class="ql-code-block-container"> <div class="ql-code-block"> [root@kvmgw ~]# firewall-cmd --permanent --direct --passthrough ipv4 -t nat -I POSTROUTING -o external_bond -j MASQUERADE -s 192.168.28.0/24 </div> <div class="ql-code-block"> success </div> </div> <p><br></p> <ol> <li data-list="bullet"><span class="ql-ui"></span>开放 DNS 服务端口,使内网服务器正常访问外部服务器:</li> </ol> <div class="ql-code-block-container"> <div class="ql-code-block"> [root@kvmgw ~]# firewall-cmd --permanent --zone=public --add-masquerade </div> <div class="ql-code-block"> success </div> <div class="ql-code-block"> [root@kvmgw ~]# firewall-cmd --zone=public --add-port=53/tcp --permanent </div> <div class="ql-code-block"> success </div> <div class="ql-code-block"> [root@kvmgw ~]# firewall-cmd --reload </div> </div> <p><br></p> <p>配置完成后在KVM01/02向外网通信,连通即为成功,如: ping qq.com</p> <p>拓扑图中还有 <strong>DNAT</strong> 外访内的网络配置,但本实验中没有该需求,故不配置(用于连接测试的主机为PC,默认分配了仅主机ip{192.168.28.1},因而PC机本身就处于内网中了)</p> <p><br></p> <h3><strong style="color: rgb(51, 51, 51);">KVM部署</strong></h3> <p><br></p> <blockquote> <div class="blockquote-item"> 安装前要开启虚拟化功能 </div> </blockquote> <p><img src="https://pic.code-nav.cn/planet_post_image/1625024135581265922/1rnlm16m.jpeg"></p> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">KVM01:</strong></h4> <p><br></p> <blockquote> <div class="blockquote-item"> kvm-qemu为kvm平台软件包,libvirt为虚拟机管理工具,virt-install为便捷安装虚拟机的工具 </div> </blockquote> <div class="ql-code-block-container"> <div class="ql-code-block"> [root@kvm01 ~]# yum install -y qemu-kvm </div> <div class="ql-code-block"> [root@kvm01 ~]# yum install -y libvirt </div> <div class="ql-code-block"> [root@kvm01 ~]# yum install -y virt-install </div> <div class="ql-code-block"> [root@kvm01 ~]# systemctl enable --now libvirtd </div> </div> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">KVM02:</strong></h4> <p><br></p> <div class="ql-code-block-container"> <div class="ql-code-block"> [root@kvm02 ~]# yum install -y qemu-kvm </div> <div class="ql-code-block"> [root@kvm02 ~]# yum install -y libvirt </div> <div class="ql-code-block"> [root@kvm02 ~]# yum install -y virt-install </div> <div class="ql-code-block"> [root@kvm02 ~]# systemctl enable --now libvirtd </div> </div> <p><br></p> <p>内网本身隔离外网,可能不需要考虑安全问题,故关闭防火墙</p> <div class="ql-code-block-container"> <div class="ql-code-block"> [root@kvm01 ~]# systemctl disable --now firewalld </div> <div class="ql-code-block"> [root@kvm02 ~]# systemctl disable --now firewalld </div> </div> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">创建虚拟机:</strong></h4> <p><br></p> <ol> <li data-list="bullet"><span class="ql-ui"></span>创建文件夹,上传镜像:</li> </ol> <div class="ql-code-block-container"> <div class="ql-code-block"> [root@kvm02 ~]# mkdir /iso </div> <div class="ql-code-block"> # 使用ftp工具或scp上传至虚拟机 </div> <div class="ql-code-block"> PS F:\mirros> scp .\CentOS-7-x86_64-Minimal-2009.iso root@192.168.28.11:/iso </div> </div> <p><br></p> <ol> <li data-list="bullet"><span class="ql-ui"></span>使用 <strong>virt-install</strong> 工具创建虚拟机:</li> </ol> <div class="ql-code-block-container"> <div class="ql-code-block"> [root@kvm01 iso]# virt-install --name=vm01 --virt-type=kvm --os-type=linux --os-variant=rhel7 \ </div> <div class="ql-code-block"> --vcpus=1 --memory=512 --location=/iso/CentOS-7-x86_64-Minimal-2009.iso \ </div> <div class="ql-code-block"> --disk path=/var/lib/libvirt/images/vm01.qcow2,size=10,format=qcow2 \ </div> <div class="ql-code-block"> --network default --graphics vnc,listen=0.0.0.0,port=5900 </div> </div> <p><br></p> <p><img src="https://pic.code-nav.cn/planet_post_image/1625024135581265922/dtjk6jvi.jpeg"></p> <p><br></p> <blockquote> <div class="blockquote-item"> 在创建时会停留在执行,不要切断! </div> </blockquote> <p><img src="https://pic.code-nav.cn/planet_post_image/1625024135581265922/ryh1bmti.jpeg"></p> <p><br></p> <h4><strong style="color: rgb(51, 51, 51);">使用VNC工具:</strong></h4> <p><br></p> <p><img src="https://pic.code-nav.cn/planet_post_image/1625024135581265922/9osrvlhn.jpeg"></p> <blockquote> <div class="blockquote-item"> 连接成功后初始页面就是安装centos时的页面(启动虚拟机时用到centos7镜像) </div> </blockquote> <p><br></p> <p>安装完毕后可在虚拟机(kvm所创建的)中用ping工具测试是否能跟外网通信。</p> <p><br></p> <p>正常通信:</p> <p><img src="https://pic.code-nav.cn/planet_post_image/1625024135581265922/4akuiu5s.jpeg"></p> <p><br></p> <blockquote> <div class="blockquote-item"> 此时的流量走向为 vm01 --> 192.168.122.1(KVM01) --> 192.168.28.10(KVMgw) --> internet </div> </blockquote> <p><img src="https://pic.code-nav.cn/planet_post_image/1625024135581265922/2qhgh8tu.jpeg"></p> </div> </body> </html>
