荣耀之链论坛

 找回密码
 立即注册
搜索
查看: 37|回复: 2

安装及使用KVM

[复制链接]

1400

主题

2582

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10975
发表于 2025-11-22 12:51 | 显示全部楼层 |阅读模式
总结一下纯命令行安装KVM的步骤

不需要关selinux,不需要关防火墙
网络上的教程几乎都有问题

安装
yum install qemu-img qemu-kvm libvirt virt-install -y

启动服务
systemctl start libvirtd #启动服务
systemctl status libvirtd  # 确认服务运行正常
systemctl enable libvirtd #设置开机启动启动服务

创建虚拟机
osinfo-query os 这个命令可以查看到支持的系统类型,用于下面的--os-variant参数
virt-install --osinfo list 这个命令效果一样

virt-install --name=rockylinux10_test \
--virt-type=kvm \
--os-variant=rocky10 \
--vcpus=2 \
--ram=2048 \
--location=/var/lib/libvirt/images/Rocky-10.0-x86_64-minimal.iso \
--disk path=/var/lib/libvirt/images/rockylinux10_test.qcow2,size=32,format=qcow2,bus=virtio \
--network bridge=virbr0,model=virtio \
--noautoconsole \
--graphics vnc,listen=192.168.11.5,port=6000,password=12345678

防火墙放行vnc端口
firewall-cmd --add-port=6000/tcp

最后客户端用VNC连接以后就可以安装系统了

管理虚拟机
virsh list --all                #查看
virsh start rockylinux10_test        #启动
virsh stop rockylinux10_test        #关机或者在虚拟机里面关机

virsh edit rockylinux10_test        #修改配置文件[不能直接编辑/etc/libvirt/qemu/rockylinux10_test.xml]


firewall有点问题,学习成本太高,不够直观
另外就是rockylinux10有点问题
还是用rockylinux9.5吧



下面是安装windows虚拟机的命令

virt-install --name=server2022 \
--virt-type=kvm \
--os-variant=win2k22 \
--vcpus=2 \
--ram=2048 \
--cdrom=/var/lib/libvirt/images/server2022.iso \
--disk path=/var/lib/libvirt/images/virtio-win.iso,device=cdrom \
--disk path=/var/lib/libvirt/images/server2022.qcow2,size=32,format=qcow2,bus=virtio \
--network bridge=virbr0,model=virtio \
--noautoconsole \
--graphics vnc,listen=192.168.11.195,port=6001,password=12345678

iso镜像挂载要用--cdrom
另外需要挂载virtio-win.iso
然后安装过程中,进入选择磁盘界面的时候要手动添加驱动virtio-win\viostor\2k22\amd64
选择完毕才能发现硬盘




虚拟机和docker互相访问
iptables -I FORWARD 1 -j ACCEPT
这条命令输入完毕以后
docker能ping通KVM
但是KVM却ping不通docker
哦,我感觉好像不需要虚拟机能ping通docker
虚拟机可以直接访问物理机的eth0的端口
但是这个不能ping通我有点不理解,可能底层有什么限制吧


















-----------------------------------------------------------------
说一下遇到的坑和问题
1.不关闭selinux的情况下,ISO和磁盘必须存储在/var/lib/libvirt/images/这个默认路径
2.libvirtd服务我设置了开机自动启动,但是不知道为什么,重启物理机以后这个服务不会自启
3.把物理机的端口转发到虚拟机,目前想通过防火墙实现,但是一直不生效,应该是KVM的问题,不知道他内部是怎么处理的
我猜测2和3应该都是和rockylinux10有关,可能版本太新了,有一些新技术不兼容

-----------------------------------------------------------------问AI
安装KVM以后会默认添加哪些iptables
https://www.doubao.com/thread/w1ce71835943bf5a2
为什么我用rockylinux10安装了KVM 并没有自动添加iptables
https://www.doubao.com/thread/wa91f9ad330e8a18a
Rocky Linux 10 中未看到 iptables 规则的核心原因是系统默认使用 nftables/firewalld,而非 libvirt 未配置防火墙。建议优先通过nft list ruleset或firewall-cmd查看规则,而非传统 iptables 命令。若需 iptables 规则,需切换防火墙后端并调整 libvirt 配置。

可能要学些一下nft



-----------------------------------------------------------------
用rockylinux9.5 一次成功
首先,停用firewall

systemctl stop firewalld
systemctl disable firewalld

然后默认已经有iptables规则了,就直接用iptables来转发

#这个不用,安装KVM默认就开启了echo 1 > /proc/sys/net/ipv4/ip_forward #手动重启network服务以后这个需要重新添加 装了KVM默认就启用了的
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -I PREROUTING 1 -i eth0 -p tcp --dport 2200 -j DNAT --to 192.168.122.124:22
iptables -I FORWARD 1 -j ACCEPT

就这3个命令,就可以了
FORWARD那里太粗暴了,但是最简单直观,默认创建的规则并没有放行转发

操,昨天用rockylinux10弄了一天,死活不成功
今天就用rockylinux9.5 一次成功

果然系统还是不能追新
天知道最新版里面有什么设置没公开

最明显的就是安装完KVM,iptables -nvL查看并没有规则,按理说即使使用的是nft,iptables里面也应该有libvirt相关的链的

-----------------------------------------------------------------










https://developer.aliyun.com/article/1263602
https://cloud.tencent.com/developer/article/1616571

https://www.ryzl.com.cn/bbs/foru ... 1169&extra=page%3D1

https://www.doubao.com/thread/w9fafeb60f5fc79f5

yum install qemu-img qemu-kvm libvirt libguestfs-tools virt-install bridge-utils
最终应该只需要安装这几个



算了,放弃了,各个教程教的KVM安装过程都不一样
然后也不解释为什么要安装这些包

我就想简单的最小化的,用纯命令行创建KVM虚拟机,这些教程基本都是老太太的裹脚布,又臭又长

TMD连给物理机配置IP这种东西也写出来,原来是物理机最开始竟然是没IP的,这种垃圾教程


不甘心,最后又研究了一下
终于装好了

然后目前还剩下最后一个问题:
端口映射

在使用默认网络的情况下
怎么把物理机的2200端口映射到虚拟机的22端口

AI给的回复是修改网卡的配置文件,修改完毕然后重启虚拟网络
但是这个方法有个缺陷就是添加或者修改端口映射的时候所有虚拟机都会断网
这个方法没试过,我感觉应该是有问题的

目前只能用socat正常进行转发

回复

使用道具 举报

1400

主题

2582

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10975
 楼主| 发表于 2025-11-23 21:01 | 显示全部楼层

#############################################################################################################
KVM

这个教程怎么说呢,就纯操作,不讲解
https://cloud.tencent.com/developer/article/1616571
这个教程是创建网桥,然后里面有用的信息就是,KVM安装好以后默认会创建一个NAT类型的网络
https://cloud.tencent.com/developer/article/2463294?policyId=1004

命令行安装kvm虚拟机


第一步:
把物理机的IP改为固定IP,不要自动获取
这一步没必要,物理机的IP不会因为安装软件而改变的

第二步:
关闭SELINUX,我问了问AI,说selinux可能会导致虚拟机创建的过程中出现权限问题
是否要关闭防火墙看情况

第一步:
安装
yum install qemu-img qemu-kvm libvirt libguestfs-tools virt-install bridge-utils

yum install qemu-img qemu-kvm libvirt                          virt-install  bridge-utils
qemu-kvm-tools virt-manager libvirt-client virt-viewer libguestfs-tools

我不理解,为什么不同的教程,安装的包区别这么多



第二步:启动服务,并且开机自动启动



#############################################问AI了
我想在ronkylinux10上安装KVM虚拟机
请问yum install qemu-img qemu-kvm libvirt libguestfs-tools virt-install bridge-utils 这里面的几个包 有哪些是可以不用安装的
为什么我看其他的教程需要安装更多的包 比如 qemu-kvm-tools virt-manager libvirt-client virt-viewer libguestfs-tools

回复如下:
https://www.doubao.com/thread/w530003c4fc691a53

我总结一下:
qemu-img qemu-kvm libvirt 这三个包必须安装
virt-install 这个是强烈推荐安装 不装这个的话,创建虚拟机需要手写配置文件,比较麻烦
bridge-utils 这个可选 如果使用默认的NAT网络,就不用装这个,如果你物理机有多个网卡,然后你需要用到软路由,那么就需要安装这个,弄桥接类型的网络
libguestfs-tools 这个可选 用于在虚拟机关机的时候直接编辑虚拟磁盘里面的配置文件,类似于windows下直接把vhdx磁盘挂载然后查看

最终的结论就是:
yum install qemu-img qemu-kvm libvirt virt-install -y
安装这几个就够了

安装完毕看看各种状态
ip addr
ifconfig
iptables -vnL
firewall-cmd --list-all
getenforce


systemctl start libvirtd #启动服务
systemctl status libvirtd  # 确认服务运行正常
systemctl enable libvirtd #设置开机启动启动服务

启动服务以后网卡会出现一个virbr0 网段是192.168.122.1 [一会重启看看这个是否会变]

--------------------------------------------------------------------------
4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc htb state DOWN group default qlen 1000
    link/ether 52:54:00:06:2b:c3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever

state DOWN 网卡的state状态是DOWN 这个state是什么

回复:
https://www.doubao.com/thread/w0d7fe75b92c5d45f

我觉得应该是目前还没创建虚拟机,等创建了虚拟机应该就好点了
--------------------------------------------------------------------------
最后通过virt-install创建虚拟机

首先把需要的镜像文件复制到/root/KVM/ISO/

然后创建虚拟机


腾讯云教程的方法:不先创建磁盘,直接一条命令搞定
virt-install --virt-type=kvm \
--name=rocky10 \
--vcpus=2 \
--memory=2048 \
--location=/root/KVM/ISO/Rocky-10.0-x86_64-minimal.iso \
--disk path=/root/test1.qcow2,size=10,format=qcow2 \
--network bridge=virbr0 \
--graphics none --extra-args=&#39;console=ttyS0&#39;         --force


阿里云教程的方法:
先创建一个磁盘
qemu-img create /kvm/img/centos01.img 8G
然后创建虚拟机
virt-install --name vm01 \
--vcpus 2 \
--ram 1024 \
--disk /kvm/img/centos01.img,format=raw \
--network network=default \
--graphics vnc,listen=0.0.0.0,port=6000 \
--noautoconsole \
--os-type=linux \
--os-variant=centos7.0 \
--location=/kvm/iso/centos7.iso


用virt-install命令创建虚拟机
系统镜像文件在/root/KVM/ISO/Rocky-10.0-x86_64-minimal.iso
虚拟机的磁盘存储在/root/KVM/rocky10/rocky10.qcow2




-------------------------------------------------------------------------------问AI
KVM创建虚拟机的时候  磁盘的格式 img 和qcow2 有什么区别?
https://www.doubao.com/thread/w82b0fff5dc3ccbc9
结论:用qcow2
-------------------------------------------------------------------------------问AI
virt-install --virt-type=kvm
创建虚拟机的命令是否需要写这个参数,如果不写会怎么样?
https://www.doubao.com/thread/wdcb3626efcc7a4c4
结论:好像云服务器不支持的话,会进入软虚拟化,但是性能会极大下降-------------------------------------------------------------------------------测试用一个虚拟机,不开启嵌套虚拟化能否用这种方式创建虚拟机
-------------------------------------------------------------------------------问AI
virt-install --os-type=linux \
--os-variant=centos7.0 \
这两个参数的作用,如果不写会怎么样?
https://www.doubao.com/thread/w3d3fa18b7c98f2c0
--os-type=linux、windows、unix 应该只有这3个大类,我忘记问了
哦,后面我运行的时候提醒我了,这个参数废弃了,不要用了
WARNING  --os-type is deprecated and does nothing. Please stop using it.

virt-install --os-variant=centos7.0
这个参数都支持哪些系统?  我想安装rockylinux10 这个参数应该填什么
https://www.doubao.com/thread/wbcdf8a8992d66b56
osinfo-query os 这个命令可以查看到支持的系统类型
virt-install --osinfo list 这个命令效果一样
-------------------------------------------------------------------------------问AI
--network bridge=virbr0 \
--network network=default \
这两种网络配置的区别
https://www.doubao.com/thread/wffbd27fec8500cca

--network network=default使用这种方式的时候,把物理机的2200端口转发到虚拟机的22端口,如何配置端口转发?
https://www.doubao.com/thread/w222b40818e3a8413
结论:可以写在配置文件里面,这样即使物理机重启了,端口映射关系还在,也可以手动用iptables转发

--network network=default 还有后续参数吗 比如分配指定的IP地址 指定端口转发
https://www.doubao.com/thread/wc28934d3be9443ce
大概看懂了,可以直接指定IP和MAC
--network network=default,ip=192.168.122.100/24,gateway=192.168.122.1
但是端口转发还是不能在创建的时候弄
那么看来还是别用这个了,手动管理网卡吧

--network network=default,model=virtio
model有哪些类型,不同的类型有什么区别?
--network bridge=virbr0使用这个配置,支持model=virtio吗?
https://www.doubao.com/thread/w19c9c46a7cc0a0c1
结论就是基本上只要不是太老的系统都支持了,而且性能最好,尽量写上,我忘记问是否默认是这个了,不过我估计应该默认就是这个的

-------------------------------------------------------------------------------问AI
virt-install --noautoconsole
这个参数是什么意思
https://www.doubao.com/thread/w04281fd50a40a803
看来这个必须加
-------------------------------------------------------------------------------问AI
--graphics vnc,listen=0.0.0.0,port=6000
这个参数,listen的监听地址可以填物理机的IP吗
https://www.doubao.com/thread/w807f50d2c7ae9558
结论还是不要填0.0.0.0吧,还是填物理机的具体IP,一般都是固定IP的
-------------------------------------------------------------------------------为了安全,还要在防火墙限制哪些IP能访问这个端口,看看是INPUT链还是FORWARD链
我用firewall的 临时放行了6000端口
最终结论:是INPUT链的
-------------------------------------------------------------------------------问AI
最终的那个命令检查一下,是否有问题
还真检查出一个问题,我忘记写vnc的密码了,password=yourkey
-------------------------------------------------------------------------------
运行命令
ERROR    unsupported configuration: VNC password is 9 characters long, only 8 permitted
操,密码只能8位?
-------------------------------------------------------------------------------问AI-------------------------------------------------------------------------------selinux的问题,最终的解决方案是把iso镜像和磁盘都存储在/var/lib/libvirt/images/这个目录下就没问题了
ERROR    Cannot access storage file '/root/KVM/rockylinux10_test/rockylinux10_test.qcow2' (as uid:107, gid:107): Permission denied
又出错
这次估计是selinux的问题

ERROR    Cannot access storage file '/root/KVM/rockylinux10_test/rockylinux10_test.qcow2' (as uid:107, gid:107): Permission denied
这个错误估计是selinux造成的,请问在selinux状态是enforce的情况下,怎么配置selinux才能正常创建虚拟机
https://www.doubao.com/thread/wc9efaff07d562c9e
确实是selinux造成的解决方案是
semanage fcontext -a -t virt_image_t "/root/ISO(/.*)?"
restorecon -Rv /root/ISO
还是不行,可能和我使用的是root有关
若方法 1 仍有问题,可开启允许 libvirt 访问用户家目录的布尔值:
# 允许libvirt访问用户家目录(/root属于root家目录)
setsebool -P virt_use_fusefs on
setsebool -P virt_use_home_dirs on
-------------------------------------------------------------------------------问AI
setsebool -P virt_use_home_dirs on
这个命令运行以后提示
Boolean virt_use_home_dirs is not defined
我用的root用户,还需要怎么操作?
https://www.doubao.com/thread/w9c66f14f5ea36086


我的系统是rockylinux10最小化安装的
getsebool -a | grep virt
这个命令执行以后输出下面的内容
staff_use_svirt --> off
unprivuser_use_svirt --> off
use_virtualbox --> on
virt_hooks_unconfined --> off
virt_lockd_blk_devs --> off
virt_qemu_ga_manage_ssh --> off
virt_qemu_ga_read_nonsecurity_files --> off
virt_qemu_ga_run_unconfined --> off
virt_read_qemu_ga_data --> off
virt_rw_qemu_ga_data --> off
virt_sandbox_share_apache_content --> off
virt_sandbox_use_all_caps --> on
virt_sandbox_use_audit --> on
virt_sandbox_use_fusefs --> off
virt_sandbox_use_mknod --> off
virt_sandbox_use_netlink --> off
virt_sandbox_use_sys_admin --> off
virt_transition_userdomain --> off
virt_use_comm --> off
virt_use_execmem --> off
virt_use_fusefs --> on
virt_use_glusterd --> off
virt_use_nfs --> off
virt_use_pcscd --> off
virt_use_pulseaudio --> off
virt_use_rawip --> off
virt_use_samba --> off
virt_use_sanlock --> off
virt_use_usb --> on
virt_use_xserver --> off
virtqemud_use_execmem --> on
没有virt_access_home和virt_use_fusefs[哦,这个是有的,我看错了AI给略过了]

setsebool -P virt_use_comm on
-------------------------------------------------------------------------------问AI
ERROR    Cannot access storage file '/root/KVM/rockylinux10_test/rockylinux10_test.qcow2' (as uid:107, gid:107): Permission denied
还是提示这个错误,是否需要我先提前创建好/root/KVM/rockylinux10_test/rockylinux10_test.qcow2这个文件

qemu-img create -f qcow2 /root/KVM/rockylinux10_test/rockylinux10_test.qcow2 32G
用这个命令创建好了磁盘
然后virt-install --disk path应该怎么使用这个磁盘?
--disk path=/root/KVM/rockylinux10_test/rockylinux10_test.qcow2,format=qcow2,bus=virtio \ #AI还建议我添加bus=virtio参数

如果不提前创建好的话,那需要在这里添加一个容量的参数
size=32

算了,这个权限问题始终解决不了,我直接临时关闭了selinux
setenforce 0
草,关闭了还是提示

KVM默认的存储磁盘的目录是什么
--disk path=rockylinux10_test.qcow2,size=32,format=qcow2,bus=virtio \
是否可以这样写,让磁盘存储在默认路径下?
https://www.doubao.com/thread/w2f16e762ca108d52
我靠,走了弯路
貌似需要先创建一个存储的位置,才能把磁盘文件存储进去

然后只需要把存储ISO的文件夹用selinux处理一下就行
ls -Z Rocky-10.0-x86_64-minimal.iso


-------------------------------------------------------------------------------问AI
virsh pool-list --all
输出下面的内容
Name                  State      Autostart
---------------------------------------------
iso                   inactive   yes
ISO                   inactive   yes
rockylinux10_test     inactive   yes
rockylinux10_test-1   inactive   yes

好像有一些我重复弄了,怎么删除
https://www.doubao.com/thread/wfbf13f6188602782
先停止池,如果是inactive则这一步不需要
virsh pool-destroy iso               # 停止“iso”池
virsh pool-destroy ISO               # 停止重复的“ISO”池
virsh pool-destroy rockylinux10_test  # 停止重复的测试池
virsh pool-destroy rockylinux10_test-1  # 停止重复的测试池
然后彻底删除
virsh pool-undefine iso               # 删除“iso”池
virsh pool-undefine ISO               # 删除重复的“ISO”池
virsh pool-undefine rockylinux10_test     # 删除重复的“ISO”池
virsh pool-undefine rockylinux10_test-1  # 删除重复的测试池
-------------------------------------------------------------------------------问AI
virt-install 执行这个命令之前,我应该把操作系统的镜像文件复制到哪个目录?
https://www.doubao.com/thread/we1ce581cd0cc735c
卧槽,原来是需要放到默认的位置
/var/lib/libvirt/images/


-------------------------------------------------------------------------------问AI
KVM列出所有虚拟机
https://www.doubao.com/thread/we3414af48bfb51b1
virsh list --all

虚拟机的状态是shut off 怎么启动
https://www.doubao.com/thread/we0f02ac405c12482
virsh start rockylinux10_test
-------------------------------------------------------------------------------问AI
systemctl enable libvirtd
为什么我设置了开机自动启动libvirtd服务,但是物理机重启以后还是不自动启动?
https://www.doubao.com/thread/w3fc623f1edc7b44a
按照AI回答的检查了,都是开启的,但是我重启两次了,都是默认不启动服务
算了,也没啥大问题,大不了手动启动服务
-------------------------------------------------------------------------------
firewall-cmd --list-all

firewall-cmd --change-interface=eth0 --zone=public --permanent
firewall-cmd --change-interface=eth1 --zone=public --permanent
firewall-cmd --change-interface=eth0 --zone=public
firewall-cmd --change-interface=eth1 --zone=public

firewall-cmd --zone=trusted --add-forward-port=port=2200:proto=tcp:toaddr=192.168.11.4:toport=22
firewall-cmd --zone=trusted --remove-forward-port=port=2200:proto=tcp:toaddr=192.168.11.4:toport=22

firewall-cmd --zone=trusted --add-forward-port=port=2200:proto=tcp:toaddr=192.168.122.5:toport=22
firewall-cmd --zone=trusted --add-masquerade

iptables -t nat -A PREROUTING -p tcp --dport 2200 -j DNAT --to-destination 192.168.122.5:22



firewall-cmd --add-forward-port=port=2200:proto=tcp:toaddr=192.168.122.5:toport=22
firewall-cmd --add-masquerade

firewall-cmd --add-port=2200/tcp
firewall-cmd --add-port=6000/tcp

firewall-cmd --remove-forward-port=port=2200:proto=tcp:toaddr=192.168.122.5:toport=22

socat TCP4-LISTEN:2200,reuseaddr,fork TCP4:192.168.122.5:22 &

-------------------------------------------------------------------------------问AI
用socat进行端口转发和用firewall进行端口转发的区别
https://www.doubao.com/thread/w9faa3574826a2c5d
-------------------------------------------------------------------------------问AI
rockylinux10删除firewall 改用iptables
https://www.doubao.com/thread/w64c020ee27d62eed
好像,直接停止firewall就行,默认有iptables了 实测配置了drop的规则确实不通了
重启试试,重启也没问题
-------------------------------------------------------------------------------
echo 1 > /proc/sys/net/ipv4/ip_forward #手动重启network服务以后这个需要重新添加 装了KVM默认就启用了的

iptables -t nat -A POSTROUTING -j MASQUERADE #这里会自动把数据包源地址接口的IP地址

iptables -t nat -I PREROUTING 1 -i eth0 -p tcp --dport 2200 -j DNAT --to 192.168.100.5:22 #这个不生效
iptables -t nat -I PREROUTING 2 -i eth0 -p tcp --dport 2201 -j DNAT --to 192.168.11.2:3389 #这个没问题,说明不是iptables的问题,而是KVM默认网络的问题,不知道KVM默认是怎么处理的



-------------------------------------------------------------------------------问AI
KVM如何创建一个类似于hyper-v那样的内部网络
https://www.doubao.com/thread/w6bad1a75c53a432c
创建一个自定义的xml文件
然后添加

这太麻烦了
virsh命令有没有添加网卡的命令
这个回答AI理解错了,他以为我要给虚拟机添加网卡

我的意思是创建自定义网络的时候,能否不要手动创建xml文件,KVM有没有命令来直接创建一个自定义网络?
这个回答其实和上面手动创建xml文件没啥区别

最终方式如下:

创建xml文件 /root/kvm-internal-net.xml
<network>
  <name>kvm-internal</name>  <!-- 内部网络名称,可自定义 -->
  <bridge name="virbr-internal" stp="on" delay="0"/>  <!-- 虚拟网桥名称 -->
  <ip address="192.168.100.1" netmask="255.255.255.0">  <!-- 宿主机在该内部网络的IP -->
  </ip>
</network>

然后导入
# 1. 加载XML配置,定义内部网络
virsh net-define kvm-internal-net.xml
# 2. 启动该内部网络
virsh net-start kvm-internal
# 3. 设置开机自启(避免物理机重启后网络失效)
virsh net-autostart kvm-internal
导入完毕的效果就是在/etc/libvirt/qemu/networks/会生成一个文件kvm-internal.xml

最后查看一下网卡是否添加成功
virsh net-list --all #显示正常
ip addr #显示正常

重启物理机,看看效果
没问题,重启物理机以后,启动KVM服务,网卡正常显示了

然后手动把刚刚的虚拟机的网络改为这个

需要修改配置文件
方式1:直接用notepad++改/etc/libvirt/qemu/rockylinux10_test.xml  #别用这个方式改,改了文件,但是启动还是之前的,还是用下面的方法2吧
方式2:命令改virsh edit rockylinux10_test

默认的内容如下
    <interface type='bridge'>
      <mac address='52:54:00:75:b9:61'/>
      <source bridge='virbr0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </interface>

改为
    <interface type='network'>
      <mac address='52:54:00:75:b9:61'/>
      <source network='kvm-internal'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
    </interface>

然后启动虚拟机
virsh start rockylinux10_test
然后修改虚拟机的IP
rockylinux10修改IP的路径是
/etc/NetworkManager/system-connections/

能ping通192.168.100.1了
但是不能访问外网

改了还是不行,我怀疑是上面的配置文件写错了

上面创建的那个内部网络我在虚拟机里面ping 192.168.100.1通了
但是我把虚拟机的网关指向192.168.100.1 却没法访问外网
物理机默认配置了路由转发,请问还需要怎么做让虚拟机能访问外网?
https://www.doubao.com/thread/w9f0a6e16ef183fa0
感觉不对,按我的理解,能ping通应该就是能转发的,我再试试
确实不行
那按照AI给的回答,再新创建一个试试
新的确实能访问外网了,但是端口转发还是不行,是不是和虚拟机启动以后在物理机里面自动创建了一个网卡有关?
看了下面的回答,应该不是这个的问题
但是确实又不能端口映射,使用socat会有性能损失
-------------------------------------------------------------------------------问AI
为什么虚拟机启动以后会在物理机上创建一个网卡?
11: vnet2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master virbr-internal state UNKNOWN group default qlen 1000
    link/ether fe:54:00:75:b9:62 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::fc54:ff:fe75:b962/64 scope link proto kernel_ll
       valid_lft forever preferred_lft forever
https://www.doubao.com/thread/w493693126828412d

那通过iptables怎么把物理机的端口转发到虚拟机
比如把2200端口转发到虚拟机的22端口

用iptables转发我始终不成功
我用socat却可以成功

是否是因为这个vnet2网卡的问题?


-------------------------------------------------------------------------------

最终命令如下:
virt-install --name=rockylinux10_test \
--virt-type=kvm \
--os-variant=rocky10 \
--vcpus=2 \
--ram=2048 \
--location=/var/lib/libvirt/images/Rocky-10.0-x86_64-minimal.iso \
--disk path=/var/lib/libvirt/images/rockylinux10_test.qcow2,size=32,format=qcow2,bus=virtio \
--network bridge=virbr0,model=virtio \
--noautoconsole \
--graphics vnc,listen=192.168.11.4,port=6000,password=12345678


systemctl start libvirtd

virsh list --all

virsh start rockylinux10_test
virsh stop rockylinux10_test #或者在虚拟机里面关机
目前还有一个问题没有解决:
端口转发
比如我现在安装的这台虚拟机是rockylinux10
我的物理机也是rockylinux10
目前这个虚拟机可以ping通外网
但是我想把物理机的2200端口 映射到虚拟机的22端口
我通过firewall和iptables都尝试过,都不成功
倒是通过socat成功了
但是socat有性能问题
我还是想用firewall或者iptables转发










--------------------------------------------------------------------------

KVM如何设置宿主机重启以后自动启动指定的虚拟机
https://www.doubao.com/thread/w38699993dabe8584

virsh list --all  # --all 表示包含关机/开机状态的虚拟机

virsh autostart centos7  # 替换为你的虚拟机名称/UUID

virsh dominfo centos7 | grep "Autostart" #查看这个虚拟机是否会开机自动启动

virsh autostart --disable centos7 #取消开机自启



######################
Set-VMProcessor -VMName "Rockylinux10-KVM测试" -ExposeVirtualizationExtensions $true

安装rockylinux的时候是否需要开启KDUMP功能
https://www.doubao.com/thread/w7b4cfc4c18be801c

安装了4H4G
然后2个网卡
网卡一是外部2.5G 192.168.11.4 FD00:192:168:11::4 网关192.168.11.3 DNS192.168.11.3
网卡二是内部SSHT 192.168.20.4        FD00:192:168:20::4 未设置网关和DNS
虚拟机名字KVM
未启用KVM
安装时手动设置了分区,删掉了/home,把容量都加到/里面了

很快就装好了
然后安装yum install net-tools


回复 支持 反对

使用道具 举报

1400

主题

2582

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
10975
 楼主| 发表于 2025-11-24 15:14 | 显示全部楼层
--------------------------------------------------
nft list ruleset >nft.txt

                iifname "eth0" oifname "virbr0" jump filter_FWD_public
                iifname "eth0" oifname "virbr0" reject with icmpx admin-prohibited
然后在filter_FWD_public里面有一条filter_FWD_public_allow
这条里面只有一个oifname "eth0" accept
是不是这里缺少了oifname "virbr0" accept
--------------------------------------------------
排查到最后可能还是防火墙的问题
我把关键的部分列出来了
table inet firewalld {

        chain filter_FORWARD {
                jump filter_FORWARD_POLICIES
                reject with icmpx admin-prohibited
        }

        chain filter_FORWARD_POLICIES {
                iifname "eth0" oifname "virbr0" jump filter_FWD_public
                iifname "eth0" oifname "virbr0" reject with icmpx admin-prohibited
        }


        chain filter_FWD_public {
                jump filter_FWD_public_allow
        }

        chain filter_FWD_public_allow {
                oifname "eth0" accept
        }

可以看到filter_FORWARD_POLICIES 这条链里面从eth0进入,从virbr0出的规则并没有被允许


查看防火墙的设置firewall-cmd --list-all
public (default, active)
  target: default
  ingress-priority: 0
  egress-priority: 0
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: cockpit dhcpv6-client ssh
  ports: 6000/tcp
  protocols:
  forward: yes
  masquerade: yes
  forward-ports:
        port=2201:proto=tcp:toport=3389:toaddr=192.168.11.2
        port=2200:proto=tcp:toport=22:toaddr=192.168.122.105
  source-ports:
  icmp-blocks:
  rich rules:
        rule family="ipv4" destination address="192.168.122.0/24" accept

这里面的设置应该是没问题的
下面的条rich rule是询问AI给的答案,感觉应该不是这个,我观察了一下输出,这个rich rule是被添加到INPUT里面的,这个问题AI也给了很多胡说八道的解决方案

是否是因为安装KVM的时候缺少一些包?
yum install qemu-img qemu-kvm libvirt virt-install -y
这是我安装KVM使用的命令

AI开始一本正经的胡说八道了

我感觉可能是我下载的rockylinux10的ISO有问题,这个是2025-06-08下载的
可能太老了

我尝试重新下载最新的rockylinux10再安装试试看
如果还是不行,我再试试rockylinux9
--------------------------------------------------
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

荣耀之链

GMT+8, 2025-12-12 21:34 , Processed in 0.014344 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表