osnosn

  博客园 :: 首页 :: 博问 :: 闪存 :: :: 联系 :: 订阅 订阅 :: 管理 ::

Linux_ipv6_无状态_设置为_eui64_有状态ipv6更改后缀

转载注明来源: 本文链接 来自osnosn的博客,写于 2019-08-22.

目的

说明:无状态的ipv6有eui64和stable-privacy模式,

在家庭pppoe模式下,设置ipv6的ddns。发现ipv6的PD是会变化的。

  • eui64的ipv6地址后四段是固定的,只与网卡的MAC有关,不随前缀(PD)变化。方便设置防火墙规则。
  • stable-privacy的ipv6地址后四段是相对固定的,与uuid,PD都相关。前缀(PD)变化,后四段地址也会变。不利于防火墙规则的设置。

修改 ipv6 无状态地址的缺省模式 addr_gen_mode 为 eui64

  • 检查系统是否有 nmcli 命令。如果没有。-->网络是由内核直接管理的修改方法
  • 执行 nmcli net 检查 NetworkManager 是否启用。
    如果返回 disabled 即没启用,-->网络由内核直接管理的修改方法
    如果返回 enabled 即启用了。
  • 执行 nmcli device 查看对应的网卡设备是否由 NetworkManager 管理。
    显示绿色的 connected 就是由 NetworkManager 管理的。-->由 NetworkManager 管理的修改方法
    显示灰色的 unmanaged 是 NetworkManager 没有管理的。-->网络由内核直接管理的修改方法
  • 你也可以考虑,启用NetworkManager对此网卡的管理。 -->见文章后面的“让 NetworkManager 管理有线网卡”

网络由内核直接管理的,修改eui64方法

  • 网卡的网络配置文件在 /etc/network/interfaces , 这个文件中只能指定动态或静态ipv6地址,不能指定 eui64/privacy。
  • 看帮助 man interfaces
  • 无效。interfaces 中添加
    #测试过,无效
    iface eth0 inet6 auto
        privext 0
        dhcp 1
    
  • 直接修改内核变量,
    net.ipv6.conf.default.addr_gen_mode = 0
    或针对网卡设置net.ipv6.conf.eth0.addr_gen_mode = 0
    (=0 是eui64, =1是privacy)
    • 使用命令,比如sysctl -w net.ipv6.conf.eth0.addr_gen_mode=0
  • net.ipv6.conf.all.addr_gen_mode 修改这个变量,似乎没有用。你可以试试。
  • 如果想开机就生效,则修改 /etc/sysctl.conf ,把上面的内核变量的设置值写进去。

网络由 NetworkManager 管理的,修改eui64方法

  • CentOS7系统,改缺省无状态ipv6 为 eui64

  • 看帮助 man nm-settings-ifcfg-rh

    • 修改文件/etc/sysconfig/network-scripts/ifcfg-xxx
        IPV6INIT=yes
        IPV6_AUTOCONF=yes
      - IPV6_ADDR_GEN_MODE=stable-privacy
      + IPV6_ADDR_GEN_MODE=eui64
      
      或添加一行 IPV6_ADDR_GEN_MODE=eui64
  • Armbian或Debian系统,改缺省无状态ipv6 为 stable-privacy

    • 看帮助 man NetworkManager.conf
    • 修改 cd /etc/NetworkManager/system-connections/ 目录中对应网卡的文件。比如,Armbian_ethernet文件
        [ipv6]
      - addr-gen-mode=stable-privacy
      + #addr-gen-mode=stable-privacy
      + addr-gen-mode=eui64
        dns-search=
      
      Armbian_ethernet 文件中包含interface-name=eth0 , 所以这个文件是设置有线网卡的。
      如果要设置无线网卡为eui64,则去修改对应的包含interface-name=wlan0的配置文件。
    • 对eui64地址,valid_flt 和 preferred_lft 缺省值的修改。debian系统。(未测试)。
      • man systemd.network 有提到 ValidLifetimeSec=,PreferredLifetimeSec=
      • 另外,sysctl -a| grep _lft 能看到,
        net.ipv6.conf.all.temp_prefered_lft = 86400
        net.ipv6.conf.all.temp_valid_lft = 604800
        net.ipv6.conf.default.temp_prefered_lft = 86400
        net.ipv6.conf.default.temp_valid_lft = 604800
        
        但 eui64实际的 valid_lft 远小于 604800,prefered_lft 远大于 86400。
      • 对比 eui64地址的 lft,和路由器上 ipv6-prefix的 lft 基本一样,只差几秒。(2023-10测)
        可是,在路由上设置 IPv6 RA Settings -> RA Livetime 为 1800sec,对客户机eui64的两个 lft没影响。
  • CentOS 或 Debian 修改之后。 systemctl restart NetworkManager 重启服务,即可生效。

还有一种情况,SLAAC由dhcpcd管理的,修改eui64方法

  • 修改 /etc/dhcpcd.conf 中的配置项slaacslaac hwaddr。有此项就修改它,没有这一项就添加它。

有状态的ipv6,后缀的更改 和说明

  • 通常 dhcpd6 提供的 ipv6 后缀,是与客户机的 DUID 相关。并且基本固定
  • 缺点: 有状态的 ipv6 有时会丢失。偶尔会发现,有10-30分钟内仅有无状态ipv6。也许是 openwrt 的 dhcpd6 的问题。
  • 如果想修改 dhcpd6 提供的 ipv6 的后缀。就需要修改客户机的 DUID。
  • 使用 NetworkManager 管理网络。
    • How can I change my Ubuntu's IPv6 DUID , 可以在配置文件/etc/NetworkManager/system-connections/eth0.xxx中指定 DUID,
        [ipv6]
      + dhcp-duid=00:01:00:01:23:01:a6:ec:18:31:bf:6d:0e:24
      
    • 或者 修改/删除/var/lib/NetworkManager/dhclient6-xxxxx-eth0.lease,
      重启dhclient service network-manager restart, 会换一个/或重新生成一个 DUID。(删除好像不会生成一个新的)
    • 或者 修改系统的 machine-id。此机的 DUID, client-id 都会改变。
      rm /etc/machine-id; rm /var/lib/dbus/machine-id; systemd-machine-id-setup; 然后 reboot 系统。
      /var/lib/dbus/machine-id 不要手工修改,重启后可能导致进不了系统
  • 没有使用 NetworkManager 管理网络。
    • 修改/删除/var/lib/dhcp/dhclient.eth0.leases, 重启dhclient, 会换一个/或重新生成一个 DUID。
  • 有了一个新的固定的 DUID 后,就会得到一个新的固定的 ipv6 后缀。
  • 参考:IPv6_configuration

Debian10 让 NetworkManager 管理有线网卡

  • NetworkManager , 解决network-manager中wired为unmanaged的问题
    • apt install network-manager
    • 让它管理网卡, Set managed=true in /etc/NetworkManager/NetworkManager.conf ,
      然后service network-manager restart/sbin/service NetworkManager restart.
      • 如果你是ssh远程连接修改的,为了防止失联。先把以下几步做完,再启用 NetworkManager.
    • nmtui 中,添加一个连接,设备填写 eth0。然后再注释掉 /etc/network/interfaces 中的 eth0。
      我的机器中,设备名是 eth0。 实际的网卡设备名,用 ip addr 查看。
    • 启用network-manager, 需要注释掉 /etc/network/interfaces 中 allow-hotplug eth0iface eth0 inet dhcp这两行。否则会分配两个IPv4, 并影响 ipv6 的 eui64 设置。(如果是静态指定IP,则不影响)
    • 如果你是ssh远程连接修改的。现在再改 managed=true 然后重启 NetworkManager.
    • 重启之后,可能被分配的IP和之前不同了。
    • 如果发现 /etc/resolv.conf没有更新,看man NetworkManager.conf中,关于rc-manager的说明。

转载注明来源: 本文链接 https://www.cnblogs.com/osnosn/p/11396868.html 来自osnosn的博客

posted on 2019-08-22 21:25  osnosn  阅读(11973)  评论(1编辑  收藏  举报