我正在尝试在 FreeBSD 上配置防火墙 (PF) 以允许 NFS 流量通过。我知道 NFS 使用 TCP 和 UDP 以及一堆使用随机端口号的守护程序来连接到客户端。 NFS服务器和客户端都是Ubuntu 10.04。我没有使用端口号进行过滤,而是简单地使用客户端和服务器的 IP 地址来允许连接。与 NFS 相关的规则pf.conf
是:
pass in log quick from external to NFS
pass out log quick from NFS to external
正如您所看到的,外部名称是客户端,NFS 是服务器。两者都解析为其 IP 地址。问题是某些数据包被 PF 停止,并出现以下错误:
11:38:52.440123 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 60)
NFS-lan0.sunrpc > External-lan1.38390: tcp 40 [bad hdr length 0 - too short, < 20]
What do I need to change to let these packets through?
答案1
NFS 是来自 Unix 黑暗时代的老恶魔。 ;-)
您的问题涉及 NFS 的每个防火墙设置(v2 和 v3 - 不确定 v4)。它使用 RPC 和端口映射器守护程序。
技巧是强制 NFS 服务器的端口映射器到特定端口或端口范围。
答案2
PF 告诉您为什么它会阻止数据包:
[bad hdr length 0 - too short, < 20]
您的 pf.conf 文件中是否启用了磨砂功能?