CentOS7 如何设置 DHCPv6 客户端的 DUID 类型为 Link-Layer?

72 天前
 username1919810

想用 CentOS 做个软路由,结果接到光猫上之后一直获取不到 PD 前缀,OP 则正常。
我的 ISP 限制了必须使用 DUID-LL 的方式请求,对两个系统抓 DHCPv6 包做分析之后发现 CentOS 的 DUID-Type 是 LLT ,而 OP 是 LL

dhclient 有一个参数-D 根据说明设置为 LL 就可以使用 DUID-LL 的方式了,但我直接运行 dhclient -6 -D LL eth0 抓包发现仍在使用 DUID-LLT 。
请问 CentOS 大神如何修改 centos 的 DHCPv6 客户端的请求方式?

1323 次点击
所在节点    宽带症候群
43 条回复
username1919810
70 天前
@ranaanna 我直接运行 dhclient -6 -P -D p2p1 后抓包数据看到正常发出了 IA_PD 请求,NTT 服务器也回复了带前缀的 reply 消息。但是 p2p1 没有被分配 IP ,而我在 ifcfg-p2p1 里设置的 DHCPV6C_OPTIONS=-P 无效。
username1919810
70 天前
@ttvast 应该是支持的,我这里是 4.2.5 ,加参数 P 可正常发出 PD 前缀请求
username1919810
70 天前
@ranaanna 这个是 network-scripts 里的配置,sysctl.conf 目前没有关于 IPV6 的配置项
ranaanna
70 天前
几个问题:
1. IPV6_AUTOCONF=no 确定 p2p1 不是通过 neighbor discovery 获得 ipv6 地址?
2. DHCPC6C=yes 确定 p2p1 是通过 dhcp 获得 ipv6 地址?
3. DHCPV6C_OPTIONS="-P" 确定 p2p1 通过 dhcp 获得 stateful 地址?如果是 stateless ,需要用-S ,并且用-S 缺省就是用 DUID-LL 。总之,还是要搞清楚 wan 侧地址的获取方式。另外还有两个问题:
4. 做路由器,没有 IPV6FORWARDING=yes?
5. IPV6INIT=yes 似乎应为 no ,因为之后并不需要手工设置 p2p1 的 address 和 gateway
ttvast
70 天前
@username1919810 发出 pd 请求有什么用,怎么分配 pd ?使用了 pd 以后,wan 口的 v6 地址其实是可有可无的。因为 lan 口也能分配公网 v6 地址。
ranaanna
70 天前
所以现在的问题就是出于这个配置,dhclient 在请求 PD 的同时还用 DUID-LLT 请求 stateful 地址,当然,就得不到地址了
username1919810
70 天前
@ranaanna #24 因为目前没有第二个网卡,所以需求是路由器自身能上网就可以了,所以不开启 forwarding 。NTT 的 IPoE 确定是通过纯 DHCPv6 ,stateful 的方式拿到一个 PD 前缀,拿不到 IPv6 地址。IPV6INIT 的话是给这个接口开启 V6 吧 如果不写应该是直接关闭 V6 ?
username1919810
70 天前
@ttvast #25 拿到后 centos 给自身分配 IP ,DHCPv6 Server 那边是不给地址的,单提供一个 PD 前缀
ranaanna
70 天前
@username1919810 #32 那就自己用拿到的 prefix 给网卡手工分配地址呗。不过运营商不通过 slaac 给个地址也是一件奇葩的事,这应该是举手之劳都算不上。也不知道 openwrt 是如何做到适配的。记得前几年 openwrt 在 ipv6 配置上似乎还饱受诟病的。IPV6INIT 如果是 slaac 是不需要 yes 的,缺省也是 no
ttvast
70 天前
@username1919810 上海电信可以给 ppp0 分一个 ip 然后再给一个/56 的 pd ,wide 可以指定多个内网 lan ,每个 lan 口不同的 sla-id 。centos7 的 network-script 没有那么强大的功能
ranaanna
70 天前
@ttvast 严格来说是给一个/64 网段和一个/56 网段,可以让家宽用户最多组 1+2^8 个 ipv6 子网,不只给一个地址的
username1919810
70 天前
@ranaanna #29 这边 NTT 就像是有大病。。千兆宽带只给一个/64 的地址,万兆宽带只给一个/56 前缀。。
千兆宽带可以手动配静态地址,万兆不行。我试过万兆手动指定地址是不通的。老哥有联系方式吗?有偿帮忙看看?😂
username1919810
70 天前
@ranaanna #29 最奇怪的问题是,我换了 Ubuntu 、Debian 几个不同的系统镜像,换了 wide 、dhcpcd 、dhclient 几个不同的 DHCPv6 客户端,抓包监视发现都能正确完成 DHCPv6 solicit 、advertise 、request 、reply 的过程,但是执行 ip a 发现除了 Debian12 能在网卡上成功分配 IP 成功路由(但是没有 DNS 信息,能 ping 通网关,持续不到 10s 就掉线),其他都在完成 DHCPv6 请求之后网卡上没 IP ,手动设置静态 IP 路由也不通。 @ttvast
ranaanna
70 天前
@username1919810 #32 其实同意 @ttvast #25 ,有了 PD 的 prefix ,就可以给其他网卡分配 ipv6 地址和默认网关,wan 侧的地址其实可有可无,但是你这里又是单网卡,要分配地址,目前能想到的是用虚拟网卡,其他也想不出有什么办法。所以正如前面网友说的,既然 openwrt 能用就用呗,或者直接用运营商的 ONU 以及“国产”路由器,插上就有网,反正是单栈 ipv6 ,完全不用折腾都是公网 ip ,岂不更好
username1919810
70 天前
@ranaanna #34 主要是想做一个 NAT0 的 V4 环境( V4 走 4in6 隧道),如果在 openwrt 路由器上那最好的情况也就是 NAT1 吧。实现 centos 本机能通过 IPv6 上网就行了。

话说如果运营商那边不给地址,只下发 PD 前缀和 DNS 、路由信息的话是不是代表着不能直接上网?需要系统自己给自己从前缀里分配一个地址?
ranaanna
70 天前
@username1919810 debian 可以参考 https://wiki.debian.org/IPv6PrefixDelegation ,但前提是多网卡,单网卡如果是所述情况为真(只给一个/56 ),没用
ranaanna
70 天前
@username1919810 #35 是的需要自己给自己,但是估计被分配地址的那张网卡,不能是获取前缀的那张
username1919810
70 天前
@ranaanna #37 回头看了一眼抓的包,发现千兆宽带是用 SLAAC 直接分配了一个/64 前缀。。万兆是 DHCPv6 发一个 PD 前缀
这样的话感觉要自己虚拟一个网卡装 radvd 之类的包去从 PD 前缀里分配 IP 就行了?

明天试一下
Senorsen
69 天前
@ttvast 大概因为 openwrt 加了一些常见网络规则约束和 workaround 从而限制了灵活性,其实还是可以试试,毕竟是开箱即用,openwrt 也支持自定义 iptables/nftables 规则来增加一些自己的特定需求,如果不是特别复杂的话。
10 年前我也是用 Debian Linux 自己写 iptables 搭软路由+科学上网,后来迁移到 openwrt 了,因为 openwrt 上的科学上网插件越来越多和成熟了,自己去维护 Linux 里各种网络规则/端口映射/出入站 vpn 规则很麻烦,封装了几个脚本和轮子增加了约束又感觉做的没 openwrt 现成好。供参考
ttvast
69 天前
@Senorsen 前不久用小米万兆的 docker ,发现只要路由器工作在 ap 模式下,容器内部系统就无法联网。后来研究了好久,发现是 openwrt 的 firewall 规则,对于 masq 的配置,只能用于目标 zone ,也就是说,lan->wan 的 masq 是在 wan 里定义的。docker->lan 如果也要 masq ,必须在 lan zone 里定义 masq ,这样一来,岂不是变成 wan->lan 也要 masq 了? 实在不理解 wrt 为什么会犯那么低级的错误。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1022202

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX