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.