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服务器

相关推荐
新手88606 天前
Oracle VirtualBox虚拟机安装 和 安装 window11版本虚拟机 及 启用EFI和硬盘无法使用 问题
服务器·windows·计算机网络·安全·虚拟机
庞轩px6 天前
HotSpot详解——符号引用、句柄池、直接指针的终极解密
java·jvm·设计模式·内存·虚拟机·引用·klass
real向往7 天前
物理机磁盘损坏无法克隆虚拟机
kvm·物理机·磁盘损坏
漠北的哈士奇8 天前
VMware Workstation导入ova文件时出现闪退但是没有报错信息
运维·vmware·虚拟机·闪退·ova
real向往9 天前
KVM虚拟机管理(X86/ARM)
arm·kvm·x86·虚拟机管理
村中少年11 天前
本地模型工具ollama配置使用openclaw指南
llm·nodejs·虚拟机·qwen·ollama·openclaw
DarkAthena12 天前
【ESXI】断电重启后NFS存储无法识别的修复方案
esxi·虚拟机·nfs
相思难忘成疾13 天前
《RHEL9虚拟机部署及SSH远程登录实践手册》
linux·运维·ssh·虚拟机
dlpay13 天前
vmbox虚拟机安装rknn-toolkit2,遇到illegal hardware instruction (core dumped) 需要avx指令支持
rknn·虚拟机·vmbox·rknntoolkit2·avx指令