几天前,我将 OPnsense“路由器/网关”更新为 23.1,现在我的一台机器出现了问题。我有一台安装了 OPnsense 的机器,它充当我的私有子网 192.168.50.0/24 的基本 NAT 路由器。这台机器/路由器使用私有 IP 192.168.50.1
,这是我的网络的网关192.168.50.0/24
。
我有一台物理 KVM 机器,配备 1 个公共 NIC 和 1 个私有 NIC。在这台机器上,我运行着一台虚拟机,它还配备了 1 个公共 IP,然后是 1 个私有 IP,位于 192.168.50.0/24 子网中作为其私有网络。我正在尝试在此虚拟机上安装 NFS 共享。我有两个 NFS 共享,只有一个 NFS 共享成功安装,而第二个 NFS 共享拒绝安装。
NFS 挂载如下所示:
成功挂载
root@s-145-VM:~# mount -t nfs -vvv 102.165.XXX.YYY:/data/secondary /mnt/SecStorage/test
mount.nfs: timeout set for Thu Feb 16 14:07:58 2023
mount.nfs: trying text-based options 'vers=4.2,addr=102.165.XXX.YYY,**clientaddr=197.189.XXX.YYY**'
root@s-145-VM:~#
挂载失败:
root@s-145-VM:~# mount -t nfs 102.165.XXX.ZZZ:/data/secondary /mnt/SecStorage/test
mount.nfs: access denied by server while mounting 102.165.XXX.ZZZ:/data/secondary
root@s-145-VM:~# mount -t nfs -vvv 102.165.XXX.ZZZ:/data/secondary /mnt/SecStorage/test
mount.nfs: timeout set for Thu Feb 16 14:07:11 2023
mount.nfs: trying text-based options 'vers=4.2,addr=102.165.XXX.ZZZ,**clientaddr=192.168.50.53**'
mount.nfs: mount(2): Operation not permitted
mount.nfs: trying text-based options 'addr=102.165.XXX.ZZZ'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: trying 102.165.XXX.ZZZ prog 100003 vers 3 prot TCP port 2049
mount.nfs: prog 100005, trying vers=3, prot=17
mount.nfs: trying 102.165.XXX.ZZZ prog 100005 vers 3 prot UDP port 892
mount.nfs: mount(2): Permission denied
mount.nfs: access denied by server while mounting 102.165.XXX.ZZZ:/data/secondary
如您所见,在失败的挂载尝试中,VM192.168.50.53
在尝试挂载第二个 NFS 时传递的是其私有 IP 地址,而不是其公共 IP 197.189.XXX.YYY
。发生这种情况的原因是 VM 在每次重新启动后都会自动将以下行添加到其 IP 路由表中:
102.165.XXX.ZZZ via 192.168.50.1 dev eth1
当我从路由表中删除此条目时,NFS 成功挂载。OPnsense 路由器或 Linux 内核中的某些东西导致了这种行为,并使其在 IP 路由表中创建此条目。我不知道这可能是什么。令我困惑的是,它只为这个 IP 创建此条目,而不为其他 NFS 创建,这是成功的,它们基本上在同一个网络空间上102.165.XXX
我已经仔细检查了 Opnsense 服务器并多次重新启动它,但我仍然无法确定是什么导致了虚拟机中出现这种行为。
如有任何建议,我们将不胜感激。
编辑:
因此,经过进一步调查,添加的 IP 路由(通过 192.168.50.1 dev eth1 的 102.165.XXX.ZZZ)100% 正确且符合预期。当我从 IP 路由中删除此条目时,VM 会尝试通过公共 IP 的网关(默认路由)访问 NFS,然后就可以正常工作了。
因此,从本质上讲,这意味着我的路由器没有按要求传递流量。但如果我从路由器运行 ping 测试,它会成功,请参见此处:
# /sbin/ping -4 -S '192.168.50.1' -c '3' '102.165.XXX.YYY'
PING 102.165.XXX.YYY (102.165.XXX.YYY) from 192.168.50.1: 56 data bytes
64 bytes from 102.165.XXX.YYY: icmp_seq=0 ttl=60 time=1.140 ms
64 bytes from 102.165.XXX.YYY: icmp_seq=1 ttl=60 time=1.200 ms
64 bytes from 102.165.XXX.YYY: icmp_seq=2 ttl=60 time=1.348 ms
那么我遗漏了什么?我是否应该手动向 KVM 主机添加某种路由?