AIMaLinux系统上通过KVM创建了windows10系统,在windows10系统中通过NFS分享文件夹到内网上可以挂载

AIMaLinux系统上通过KVM创建了windows10系统,在windows10系统中通过NFS分享文件夹到内网上可以挂载

下面我们把AIMaLinux统称为宿主机,把windows10称为虚拟机,把内网上的其他设备称为外部设备。

一、查看虚拟机的网络模式

bash 复制代码
 virsh dumpxml <虚拟机名称> | grep -A 10 "<interface"

通过上面命令查看当前虚拟机的网络模式:如果是桥接,那就只要在虚拟机中通过NSA服务器或者第三方NAS服务器(haneWIN NAS Service)中设置好分享的文件夹目录,然后防火墙打开对应的端口111、2049、还有个动态端口(后面说怎么查)。
网络模式判断

模式 外部访问 推荐场景
NAT ❌ 无法直接访问 仅虚拟机上网
桥接 (bridge) ✅ 可直接访问 NFS 共享推荐
host-only ❌ 仅宿主机访问 隔离测试

下面我们主要介绍NAT网络模式下怎么分享文件夹(如果网络可以改成桥接更方便)

二、NAT网络模式下,需要配置端口转发(在宿主机linux中执行命令)

bash 复制代码
# 1.查看默认网络配置
virsh net-dumpxml default

输出<forward mode='nat'>表示是NAT网络
# 2. 编辑默认网络配置
virsh net-edit default

#原配置是:
<forward mode='nat'>
  <nat>
    <port start='1024' end='65535'/>
  </nat>
</forward>

# 修改为下面的:
<forward mode='nat'>
  <nat>
    <!-- 保留原有高位端口范围 -->
    <port start='1024' end='65535'/>
    
    <!-- 新增:RPC 端口映射器 (TCP/UDP) -->
    <port start='111' end='111' to='111' proto='tcp'/>
    <port start='111' end='111' to='111' proto='udp'/>
    
    <!-- 新增:NFS 主服务端口 (TCP/UDP) -->
    <port start='2049' end='2049' to='2049' proto='tcp'/>
    <port start='2049' end='2049' to='2049' proto='udp'/>
  </nat>
</forward>

# 3. 重启默认网络
# 销毁默认网络
virsh net-destroy default
# 重新启动默认网络
virsh net-start default

# 验证配置是否加载
sudo virsh net-dumpxml default | grep -A 10 "<nat>"

# 4. 重启虚拟机
virsh destroy <虚拟机名称>
virsh start <虚拟机名称>

操作上面修改网络配置时,如果报错:

XML error: Only one element is allowed in in in network default

说明使用的 libvirt 版本较新(通常是 QEMU/KVM 6.0+ 或 libvirt 7.0+)
在新版本中,nat 标签下不再支持写多个port 标签来逐个定义端口

三、最佳解决方案:改用 iptables 手动转发(最稳定、通用)

使用 Linux 底层的 iptables 来做端口映射。这是最底层、最可靠的方法,不受 libvirt 版本限制。
我们将把 宿主机 (AlmaLinux) 的 端口流量,强制转发给 Windows 虚拟机。

bash 复制代码
# 查看虚拟机 IP
virsh domifaddr <虚拟机名称>
# 或者在 Windows 里运行 ipconfig 确认
1、执行 iptables 转发规则(临时生效,重启失效)

创建一个脚本例如:vi nas.sh,填写完后保存,最后执行脚本 :sh nas.sh

bash 复制代码
VM_IP="192.168.122.14" # <--- 替换为您的 IP
# --- 1. 转发 TCP 端口 ---

# 转发 TCP 2049 (NFS 数据传输)

sudo iptables -t nat -A PREROUTING -p tcp --dport 2049 -j DNAT --to-destination $VM_IP:2049

sudo iptables -t nat -A PREROUTING -p tcp --dport 111 -j DNAT --to-destination $VM_IP:111

# 转发 TCP 1058 (Mountd - haneWIN 专用)

sudo iptables -t nat -A PREROUTING -p tcp --dport 1058 -j DNAT --to-destination $VM_IP:1058

# --- 2. 转发 UDP 端口 ---

# 转发 UDP 2049 (NFS 数据传输)
sudo iptables -t nat -A PREROUTING -p udp --dport 2049 -j DNAT --to-destination $VM_IP:2049

# 转发 UDP 1058 (Mountd - haneWIN 专用)
sudo iptables -t nat -A PREROUTING -p udp --dport 111 -j DNAT --to-destination $VM_IP:111
sudo iptables -t nat -A PREROUTING -p udp --dport 1058 -j DNAT --to-destination $VM_IP:1058

# --- 3. 开放 INPUT 链 (宿主机自身访问) ---
sudo iptables -I INPUT -p tcp --dport 2049 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 111 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 1058 -j ACCEPT

sudo iptables -I INPUT -p udp --dport 2049 -j ACCEPT
sudo iptables -I INPUT -p udp --dport 111 -j ACCEPT
sudo iptables -I INPUT -p udp --dport 1058 -j ACCEPT

# --- 4. 开放 FORWARD 链 (外部访问虚拟机) ---

sudo iptables -I FORWARD -d $VM_IP -p tcp --dport 2049 -j ACCEPT
sudo iptables -I FORWARD -d $VM_IP -p tcp --dport 111 -j ACCEPT
sudo iptables -I FORWARD -d $VM_IP -p tcp --dport 1058 -j ACCEPT

sudo iptables -I FORWARD -d $VM_IP -p udp --dport 2049 -j ACCEPT
sudo iptables -I FORWARD -d $VM_IP -p udp --dport 111 -j ACCEPT
sudo iptables -I FORWARD -d $VM_IP -p udp --dport 1059 -j ACCEPT

执行完输入命令

bash 复制代码
sudo iptables -t nat -L PREROUTING -n -v

查看输出内容是否是自己配置的111,2049,1058

2、如何让规则永久生效?(重启后不丢失)

通过 firewalld 配置端口转发 (更兼容 AlmaLinux 默认设置)

创建一个脚本例如:vi nasfirewalld.sh,填写完后保存,最后执行脚本 :sh nasfirewalld.sh

bash 复制代码
WIN_VM_IP="192.168.122.105" # <--- 替换为您的 IP

# 1. 开启伪装 (Masquerading)
sudo firewall-cmd --permanent --add-masquerade

# 2. 添加 TCP 端口转发
sudo firewall-cmd --permanent --add-forward-port=port=111:proto=tcp:toaddr=$WIN_VM_IP:toport=111
sudo firewall-cmd --permanent --add-forward-port=port=2049:proto=tcp:toaddr=$WIN_VM_IP:toport=2049
sudo firewall-cmd --permanent --add-forward-port=port=2049:proto=tcp:toaddr=$WIN_VM_IP:toport=1058

# 3. 添加 UDP 端口转发
sudo firewall-cmd --permanent --add-forward-port=port=111:proto=udp:toaddr=$WIN_VM_IP:toport=111
sudo firewall-cmd --permanent --add-forward-port=port=2049:proto=udp:toaddr=$WIN_VM_IP:toport=2049
sudo firewall-cmd --permanent --add-forward-port=port=2049:proto=udp:toaddr=$WIN_VM_IP:toport=1058

# 4. 重载防火墙
sudo firewall-cmd --reload

# 5. 验证规则
sudo firewall-cmd --list-all | grep forward
宿主机和虚拟机间的网络转发设置好后,记得看下虚拟机中的防火墙设置是否拦截了这几个端口,不行就关掉防火墙,或者设置规则。

三、在 外部设备上测试

bash 复制代码
# cmd中输入
rpcinfo -p <宿主机IP>

#输出内容是个列表
#其中有mountd   1058
#   还有111,2049的tcp和udp ,这三个都显示了就正常了,可以直接通过命令挂载了。
 

下一步立即尝试挂载

bash 复制代码
# 10.30.30.2是宿主机IP
# test是虚拟机上的NSA服务器设置好的分享文件夹的name
# F: 表示要挂载到本机的哪个目录或者盘符
mount -o anon 10.30.30.2:/test F:
网络没问题这样操作后就会提示挂载成功。如下:
下面是在客户端怎么查询共享目录(前提是网络通了)
bash 复制代码
# 在客户端查看nfs服务器上有哪些共享目录
showmount -e 宿主机IP

# 在客户端查看nfs服务器上有哪些共享目录被挂载了
showmount -a 宿主机IP

# 在客户端,查看客户端连接的所有共享目录
showmount -d  宿主机IP

#在nfs端(我们的虚拟机上),直接输入命令即可
showmount -e
showmount -a
showmount -d

最后说明。我使用的是:haneWIN NFS服务器

相关推荐
牛奶咖啡133 天前
KVM虚拟化与企业应用实践——给远端主机创建虚拟机
云原生·qemu·kvm·给远端主机创建虚拟机·创建uefi模式的虚拟机·安装openeulersp2·vnc与虚拟机环境搭建
m0_547486664 天前
《虚拟化技术与应用项目教程》全套PPT课件
人工智能·虚拟机
牛奶咖啡134 天前
KVM虚拟化与企业应用实践——通过网络介质配合ks自动应答文件实现自动安装KVM虚拟机
云原生·qemu·kvm·系统网络引导与ks自动应答环境·远程资源+ks文件安装虚拟机·通过网络介质引导自动安装虚拟机·qemu的总线类型详解
故渊at5 天前
第十五板块:Android 系统调试与逆向工程 | 第三十五篇:ART 虚拟机内部机制与 OAT 文件格式
android·虚拟机·art·机器码·oat文件格式
其实防守也摸鱼6 天前
无线网络安全--10 规避WLAN验证之挫败MAC地址限制
网络·智能路由器·php·教程·虚拟机·wlan·无线网络安全
iCxhust8 天前
qeum能否制定真实u盘启动
虚拟机·微机原理·qeum
雨打夏夜10 天前
VMware + CentOS 9 双网卡静态 IP 配置完整指南
linux·虚拟机
故渊at12 天前
第一板块:Android 系统基石与运行原理 | 第四篇:进程孵化(Zygote)与 Low Memory Killer 机制
android·虚拟机·zygote·系统启动·low memory·进程孵化
鹏大师运维14 天前
Ubuntu 26.04 Linux 7.0内核安装VMware实战
linux·ubuntu·vmware·虚拟机·麒麟·统信uos·linux7.0
Trouvaille ~21 天前
【OpenClaw篇】OpenClaw 实战入门:在 VMware 虚拟机里部署第一个本地 AI Agent
人工智能·大模型·agent·vmware·虚拟机·tools·openclaw