Linux_ipv6_无状态_设置为_eui64_有状态ipv6更改后缀
转载注明来源: 本文链接 来自osnosn的博客,写于 2019-08-22.
目的
- 设置eui64,是为了更安全的开放内网服务,设置防火墙的ipv6转发。
见【设置openwrt路由器的防火墙_允许从外网访问_ipv6服务_ipv4端口映射】 - 设置ddns,见【Linux中获取本机的最新IPv6地址_更新ddns的脚本_获取openwrt的IP地址】
- 【Debian/Mint/Raspbian/Ubuntu - How to force SLAAC EUI64 IPv6 autoconfiguration】
说明:无状态的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
能看到,
但 eui64实际的 valid_lft 远小于 604800,prefered_lft 远大于 86400。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地址的 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
中的配置项slaac
为slaac 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
,
重启dhclientservice 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 不要手工修改,重启后可能导致进不了系统。
- How can I change my Ubuntu's IPv6 DUID , 可以在配置文件
- 没有使用 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 eth0
和iface 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的博客