深圳联通宽带 IPv6 是只给一段 /64 吗?

2020-11-06 15:01:21 +08:00
 rio

我现在的情况是:

  1. 用软路由( debian 10 )装 pppd 进行 PPPoE 拨号;
  2. 拨号成功后建立 ppp0 网卡,pppd 和局端协商到一个 IPv4 地址和一个 fe80::/10 的 IPv6 link-local 地址;
  3. 局端通过这个 fe80::/10 地址每十分钟给我个 Router Advertisement,里面包含一段 2408:8256:3075:BEEF::/64 ( BEEF 那段每次拨号会变)。

现在的问题是局端 RA 给我的 2408:8256:3075:BEEF::/64 这段地址只在 ppp0 网卡上存在(我猜是 pppd 给自动配上的?),此时我应该怎么办?直接分配这个 /64 给内网设备?如果是,用啥工具实现?

尝试过用 wide-dhcpv6-client 通过 ppp0 向局端再请求一个 /64,但是抓包显示局端回复 NoPrefixAvailable,是不是说局端就只给之前那个 /64 ?

8527 次点击
所在节点    宽带症候群
76 条回复
XiaoxiaoPu
2020-11-06 17:24:27 +08:00
@rio
你的 wide-dhcpv6 配置文件是按你找到的那个教程弄的吗?试试把 rapid-commit 去掉?

获取的是 link-local 地址,可能是因为脚本被拉起的比较早,这时候公网 IPv6 地址还没加上,可以考虑加个后台循环等待检测的逻辑
bubuyu
2020-11-06 17:27:33 +08:00
济南联通是 /60
rio
2020-11-06 18:34:06 +08:00
@XiaoxiaoPu 诶改了下配置,再用 wide-dhcpv6-client 似乎可以获取单独再获取一段 /64 了…… 要点似乎是要把 sla-len 8 改成 sla-len 0 才行
XiaoxiaoPu
2020-11-06 18:46:56 +08:00
@rio 看了下文档,sla-id 跟获取的前缀组合在一起,会作为往 interface 通告的前缀 (sla-len 是 sla-id 的 bit 长度)。你获取的前缀就是 /64 的,所以 sla-len 需要设为 0 。
XiaoxiaoPu
2020-11-06 18:47:40 +08:00
如果你的运营商给你 /48,那么是可以把 sla-len 设为 8 的。
rio
2020-11-06 19:33:46 +08:00
@XiaoxiaoPu 嗯,而且 sla-len 不写的话默认值是 16 很迷……

现在更加奇怪的是我在 ppp0 上抓包看不到任何 wide-dhcpv6-client 发起的 dhcpv6 pd 的请求,不知道它从哪里变出来一块 /64 来放到了 lan 网卡上😂
zwy100e72
2020-11-06 19:41:23 +08:00
之前在推特上我一直认为可以用 DHCP-PD + SLAAC 的方式配置 ... 那现在看到 NoPrefixAvailable 感觉是不太行了

要么就是请求的 prefix 太大超过了限制,这种情况的话考虑调小一点 sla-len 可能有用 [2][2]

还有一种方式,就是我说的转发 RA + NA + NS,也就是[这里][1] 提到的 relay 模式

[1]: https://openwrt.org/docs/guide-user/network/ipv6/start "Router Advertisement & DHCPv6"
[2]: https://openwrt.org/docs/guide-user/network/ipv6/dhcp6c "Interface Settings"
zwy100e72
2020-11-06 19:48:47 +08:00
默认配置 sla-len = 16 是因为,ipv6 network id 长度是 48 bit [1]. 建议尝试下 sla-len = 4,看看能不能分到 /60 的 prefix

[1]: https://ipcisco.com/lesson/subnetting-in-ipv6/
rio
2020-11-06 19:55:11 +08:00
@zwy100e72 sla-len=4 试过了不行,分配不到。现在完全抓不到 dhcpv6 相关的包了,太奇怪了……
matrix67
2020-11-06 20:06:29 +08:00
@rio 说到光猫,楼主吟诗的光猫原因找到没有,hackernews 上说是 huawei 的一个专利,专门查有没有环路的。感觉还是国内论坛上可能有华为的工程师知道原委,哈哈。

感觉这样的行为是工程师最极致的浪漫,不亚于 linus 把他 3 个女儿[1]生日硬编码到内核中啊。

[1] 程序员生女儿这个梗在他身上比较明显。
cwbsw
2020-11-06 20:08:12 +08:00
大家基础知识掌握得不行啊,RA 宣告的前缀正常情况下是不能继续往下游分割的,非要用这个前缀的话需要 NDP Proxy 转发 ND 报文,类似于 ARP Proxy 。
rio
2020-11-06 20:34:52 +08:00
@cwbsw /64 一定要分割么?可不可以不分割直接分给内网设备?
rio
2020-11-06 20:35:16 +08:00
@matrix67 上海贝尔的听众朋友去问去了,还没反馈😂
zwy100e72
2020-11-06 21:00:33 +08:00
@rio 你拿到的 /64 应该是一个地址而不是一个前缀,前缀可以继续分下去,地址不行。地址只是 /64 网段中的一个地址,这时候如果想要别的地址,那就得通过 NDP Proxy 来转发 ND 报文才行。
XiaoxiaoPu
2020-11-06 21:36:42 +08:00
@cwbsw 楼主的设备就是软路由,IPv6 网络是 PPP 拨号来的,不是 RA 来的
dndx
2020-11-06 21:43:35 +08:00
既然都有了 /64,直接给内网设备 SLAAC 就可以,这样最简单。如果 ISP 给的段比 /64 再小才需要用 DHCPv6 来分配 /128 。

ROS 上这个很好配置。我写过一个文章就是把 ISP PD 给用户的 /64 用 Router Advertisements (RA) 在内网上广播,内网上的机器就会自动根据 prefix 分配地址。Linux 上看了一下应该可以用 radvd 来生成 RA 广播。

ROS 可以参考: https://idndx.com/routeros-meets-comcast-ipv6/
dndx
2020-11-06 21:46:15 +08:00
不管你的 /64 是怎么来的,只要 ISP 把整个 /64 都路由到了你这一端,直接跑 radvd 给内网宣告就行。如果 ISP 变态只路由了一个单独的地址到你这那就无解了。(最起码我们这边的电信不是这样的,因为不符合 RFC 和最佳实践)
cwbsw
2020-11-06 23:15:28 +08:00
@rio 可以不分割啊,但问题是你没前缀啊。

@XiaoxiaoPu 一样的。
mrtqiangqiang
2020-11-06 23:41:58 +08:00
问下 深圳 联通 ipv4 是公网吗
zro
2020-11-06 23:48:24 +08:00
@dndx #36 想核实一下,DHCPv6 w/Prefix Delegation 里的 w/是 with 的缩写吗? Thank you.

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

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

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

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

© 2021 V2EX