完全禁用 NFS 服务器上的 rpc 的 IPv6 - Ubuntu 12.04 LTS

完全禁用 NFS 服务器上的 rpc 的 IPv6 - Ubuntu 12.04 LTS

我正在尝试在我的 NFS 服务器(Ubuntu 12.04 LTS 精确版)上完全禁用 IPv6,但似乎仍然有一些 IPv6 端口在监听,如我运行 netstat -lp 时显示的那样:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 *:60377                 *:*                     LISTEN      -               
tcp        0      0 *:49115                 *:*                     LISTEN      1744/rpc.mountd 
tcp        0      0 *:nfs                   *:*                     LISTEN      -               
tcp        0      0 *:54658                 *:*                     LISTEN      1744/rpc.mountd 
tcp        0      0 *:sunrpc                *:*                     LISTEN      450/rpcbind     
tcp        0      0 *:55730                 *:*                     LISTEN      709/rpc.statd   
tcp        0      0 *:48181                 *:*                     LISTEN      1744/rpc.mountd  
tcp6       0      0 [::]:37004              [::]:*                  LISTEN      -               
udp        0      0 *:55738                 *:*                                 1744/rpc.mountd 
udp        0      0 *:43533                 *:*                                 -               
udp        0      0 *:43687                 *:*                                 709/rpc.statd   
udp        0      0 *:sunrpc                *:*                                 450/rpcbind          
udp        0      0 *:615                   *:*                                 450/rpcbind     
udp        0      0 localhost:885           *:*                                 709/rpc.statd   
udp        0      0 *:50206                 *:*                                 1744/rpc.mountd 
udp        0      0 *:54380                 *:*                                 1744/rpc.mountd 
udp        0      0 *:nfs                   *:*                                 -               
udp6       0      0 [::]:46857              [::]:*                              -               

我已在 /etc/sysctl.d/ipvf-disable.conf 中在内核级别禁用 IPv6:

#disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

/etc/netconfig 中也有:

udp        tpi_clts      v     inet     udp     -       -
tcp        tpi_cots_ord  v     inet     tcp     -       -
#udp6       tpi_clts      v     inet6    udp     -       -
#tcp6       tpi_cots_ord  v     inet6    tcp     -       -
rawip      tpi_raw       -     inet      -      -       -
local      tpi_cots_ord  -     loopback  -      -       -
unix       tpi_cots_ord  -     loopback  -      -       -

完成这些更改后,我重新启动,上面的 netstat 输出没有变化。打开的 UDP6 和 TCP6 端口似乎是内核端口(因此缺少 PID),当我运行 /etc/init.d/nfs-kernel-server stop 时它们消失了。

我发现了以下错误报告:https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=648635符合我的问题,但似乎没有任何回复。我是不是漏掉了什么,还是这是一个错误?

编辑 - 澄清一下,有些代码无法很好地与任何 IPv6 配合使用(是的,这是糟糕的代码,而且无法轻易更改),因为它会读取 netstat 并中断。任何有关如何从 netstat 中删除 IPv6 引用的想法都将不胜感激。

答案1

为了完整起见,我设法找到了针对这种特定情况的解决方案,即创建一个“netstat”shell 脚本,该脚本从现有的 netstat 中解析 IPv6,并向应用程序提供包含该脚本的替代 PATH。

注意 - 这显然不是一个好主意,但对我来说没有更好的选择,它似乎有效。

答案2

在你的启动配置中设置 ipv6.disable=1

通常,编辑 /etc/default/grub 并将其添加到 GRUB_CMDLINE_LINUX 中的选项列表中,然后运行 ​​grub_mkconfig -o /boot/grub2/grub.cfg

相关内容