禁用 IPv6 时 rpc 绑定错误

禁用 IPv6 时 rpc 绑定错误

ipv6.disable=1我在引导加载程序 (systemd boot) 中使用内核命令行参数来禁用 IPv6。然而,有了这个选项,我现在在启动后会在日志中收到这些错误。

Jul 09 02:38:48 arch rpcbind[645]: cannot create socket for udp6
Jul 09 02:38:48 arch rpcbind[645]: cannot create socket for tcp6
Jul 09 02:38:48 arch rpc.statd[649]: Failed to create listener xprt (statd, 1, udp6)
Jul 09 02:38:48 arch rpc.mountd[642]: Could not make a socket: (97) Address family not supported by protocol

这是 Arch Linux 4.14.53-1-lts #1 SMP 7 月 3 日星期二 16:27:18 CEST 2018 x86_64 GNU/Linux

这些错误会产生什么后果?如何在禁用 IPv6 的情况下解决此问题?

更多信息:rpcinfo -p

program vers proto   port  service
100000    4   tcp    111  portmapper
100000    3   tcp    111  portmapper
100000    2   tcp    111  portmapper
100000    4   udp    111  portmapper
100000    3   udp    111  portmapper
100000    2   udp    111  portmapper
100005    1   udp  20048  mountd
100005    1   tcp  20048  mountd
100005    2   udp  20048  mountd
100024    1   udp  48386  status
100005    2   tcp  20048  mountd
100024    1   tcp  47193  status
100005    3   udp  20048  mountd
100005    3   tcp  20048  mountd
100003    3   tcp   2049  nfs
100003    4   tcp   2049  nfs
100227    3   tcp   2049  nfs_acl
100021    1   udp  54818  nlockmgr
100021    3   udp  54818  nlockmgr
100021    4   udp  54818  nlockmgr
100021    1   tcp  42833  nlockmgr
100021    3   tcp  42833  nlockmgr
100021    4   tcp  42833  nlockmgr

答案1

这里是一个对我有用的解决方案。

此消息使人们感到困惑,认为问题是由 rpcbind 引起的,而实际上问题是其他问题。

为了谷歌用户的利益,要禁用此消息,请编辑文件 /etc/netconfig,并禁用这两行(在开头添加“#”字符),以便它们现在如下所示:

#udp6       tpi_clts      v     inet6    udp     -       -
#tcp6       tpi_cots_ord  v     inet6    tcp     -       -

保存文件,重新启动计算机,您将不再看到“rpcbind:无法为 udp6 创建套接字”消息。

如上所述,它有效,而且似乎是最正确的解决方案。然而,我并不完全理解这个问题的所有细微差别,所以欢迎评论。

答案2

手动指定绑定ip。

man rpc.statd:

   -n, --name ipaddr | hostname
          Specifies  the  bind address used for RPC listener sockets.  The
          ipaddr form can be expressed as either an IPv4 or an  IPv6  pre‐
          sentation  address.   If this option is not specified, rpc.statd
          uses a wildcard address as the transport bind address.

相关内容