RHEL7 未将链路本地 IPv6 地址分配给新的网络接口

RHEL7 未将链路本地 IPv6 地址分配给新的网络接口

我已经为新设备编写了 Linux 网络驱动程序。我希望新接口在驱动程序时获得 IPv6 链路本地地址insmod。这在 Debian10、CentOS8 和各种 Ubuntu 机器上运行良好。但 RHEL7 似乎没有为接口分配 IPv6 地址。

新接口0在下面的输出中。

到目前为止,我已经在 Google 上搜索过“如何在 RHEL7 上禁用 IPv6”,并检查了机器上是否应用了任何设置 - 一切似乎都很好。我已经grep进行了搜索ipv6/etc一切似乎都很好。一些接口确实获得了 IPv6 LL 地址,这很奇怪。

[root@midgar ~]# ip -6 a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 fe80::4bd5:baeb:2ac7:c94a/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
[root@midgar ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether a0:8c:fd:c1:37:d8 brd ff:ff:ff:ff:ff:ff
    inet 172.17.78.82/24 brd 172.17.78.255 scope global noprefixroute eno1
       valid_lft forever preferred_lft forever
    inet6 fe80::4bd5:baeb:2ac7:c94a/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
8: new_interface0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 06:2f:9c:75:46:d4 brd ff:ff:ff:ff:ff:ff
    inet 169.254.9.3/16 brd 169.254.255.255 scope link new_interface0:avahi
       valid_lft forever preferred_lft forever
[root@midgar ~]# modprobe ipv6
[root@midgar ~]# echo $?
0

以下是该设备的网络配置/proc/sys/net/ipv6/conf/new_interface0/

accept_dad 1
accept_ra 0
accept_ra_defrtr 0
accept_ra_pinfo 0
accept_ra_rt_info_max_plen 0
accept_ra_rtr_pref 0
accept_redirects 1
accept_source_route 0
autoconf 1
dad_transmits 1
disable_ipv6 0
enhanced_dad 1
force_mld_version 0
force_tllao 0
forwarding 0
hop_limit 64
keep_addr_on_down 0
max_addresses 16
max_desync_factor 600
mc_forwarding 0
mldv1_unsolicited_report_interval 10000
mldv2_unsolicited_report_interval 1000
mtu 1500
ndisc_notify 0
optimistic_dad 0
proxy_ndp 0
regen_max_retry 3
router_probe_interval 60
router_solicitation_delay 1
router_solicitation_interval 4
router_solicitations 3
temp_prefered_lft 86400
temp_valid_lft 604800
use_optimistic 0
use_tempaddr 0

我怀疑有两种可能性:

  • 我没有在驱动程序代码中设置一些标志,以便 RHEL7 能够自动分配 IPv6 链接本地地址
  • RHEL7 中的一些配置会阻止新接口获取 IPv6 地址。到目前为止,我在 Google 上搜索还没有任何结果。

请注意,如果我手动分配 IPv6 本地链接,它就可以正常工作。我只在这台普通的 RHEL7 机器上看到这一点。

答案1

经过大量调查,一位同事找到了解决方案。这是 NetworkManager 的一些问题,导致接口无法获取链路本地 IPv6 地址。解决方法是:

nmcli --wait 0 device connect new_interface0

此操作只需运行一次,即可创建/etc/NetworkManager/system-connections/new_interface0文件,此后系统可以自动为该新接口分配一个链路本地 IPv6 地址。此操作在重新安装和重启后仍然有效。

相关内容