我们正在开发一款在 Linux 上运行并使用 NFS 安装来辅助开发的嵌入式设备。我们在两个私有网络空间(172.16.x.y
和192.168.0.n
)中工作。192
网络包含40Mb/s
设备所需的多播流量,但为了不淹没网络,172
网络流量由 Windows 2008 R2 服务器生成。Windows Server 2008 机箱有 2 个 NIC - 一个用于192
(由其上的 DHCP 服务器生成),一个用于172
网络(Windows 机箱上的默认网关指向网关172
)
在我们的开发环境中,我们有以下连接:
Device 172.16.50.100 (static)]----[Gateway (172.16.15.200)]----[Ubuntu Linux Server 172.16.10.100]
该设备能够在172.16.10.100
服务器上安装并执行代码。
但是,当我们将设备移动到 Windows Server 网络时:
Device 192.168.0.2(dhcp)]---[Server 2008 (192.16.0.1)(dhcp server) NIC2(172.16.50.200)]---[Ubuntu Linux Server 172.16.10.100]
现在设备无法挂载 NFS 目录:
\$ mount -t nfs 172.16.10.100:<path> hd
mount: 172.16.10.100:<path> failed, reason given by server: Permission denied
mount: mounting 172.16.10.100:<path> on hd failed: Bad file descriptor
我们可以 ping 服务器:
\$ ping -c 1 172.16.10.100
PING 172.16.10.100 (172.16.10.100): 56 data bytes
64 bytes from 172.16.10.100: seq=0 ttl=64 time=1.231 ms
--- 172.16.10.100 ping statistics ---
1 packets transmitted, 1 packets received, 0% packet loss
round-trip min/avg/max = 1.231/1.231/1.231 ms
因此,设备在192
网络上时可以正常看到 Ubuntu 服务器,但无法挂载 NFS。
我们也禁用了 Windows Server 2008 防火墙。
我们如何让 NFS 数据通过服务器?
谢谢。
答案1
@tigran - 谢谢你的帮助。你提出了一些非常重要的观点。
这里的问题实际上是端口号。
在第一种情况下:
Device 172.16.50.100 (static)]----[Gateway (172.16.15.200)]----[Ubuntu Linux Server 172.16.10.100]
该设备请求:
authenticated mount request from 172.16.50.100:709
^^^
然而,在第二种情况下:
Device 192.168.0.2(dhcp)]---[Server 2008 (192.16.0.1)(dhcp server) NIC2(172.16.50.200)]---[Ubuntu Linux Server 172.16.10.100]
Windows Server 正在更改端口号:
refused mount request from 172.16.50.217 for <path> (/home): illegal port 62441
^^^^^
根据导出文件的帮助页面:
secure
This option requires that requests originate on an Internet port less
than IPPORT_RESERVED (1024). This option is on by default. To turn it
off, specify insecure.
^^^^^^^^^^^^^^^^
鉴于这是一个封闭的私人网络,我们更新了/etc/exports
文件以包含以下内容:
/home *(rw,no_root_squash,async,no_subtree_check,insecure)
^^^^^^^^
作为参考,调试行来自于将文件/var/log/syslog
更改/etc/default/nfs-kernel-server
为包含以下内容之后:
RPCMOUNTDOPTS="--manage-gids --debug all"