piero66
V2EX  ›  宽带症候群

家宽固定 ipv6 前缀实现静态公网

By piero66 at 2024 年 9 月 2 日 · 10194 次点击
![1000013040.webp]( https://j.teno.cx/root/2024/09/01/66d47e29cf906.webp)

虽然之前有人发了,但实在太神奇所以再补充下,原理可以看参考资料:,https://www.v2ex.com/t/1014864



方法就是打开 prefix hint 功能,

![1000013041.webp]( https://j.teno.cx/root/2024/09/01/66d47f8d48c53.webp)

输入当前 IP 前缀或者按照 bras 的前缀写全尝试也可以,也就是可以调靓号,也可以全 0 补全,(如图上就是 0 补全)如果报错就是 bras 拒绝了手动的前缀

实测本地移动全 0 最短前缀可以,/48 ~/60 的子网部分 随便改靓号,电信如果改的太短或者太靓号会强制修改几个位,没法全 0 最短前缀,但只要分配给我了就可以一直用

# 此方法修改后重拨号前缀固定,理论上只要 bras 方这段前缀不过期就可以一直用,算静态 ipv6 体验卡



关于如何 win 系统用短 ipv6 ,

win 系统要把 ipv6 临时地址和 ra 通告给禁用了,适配器里面再改成手动获取 ipv6 地址

实现 12 位超短 ipv6 地址

linux 系统更简单,直接配置静态 ipv6 即可,

安卓只支持 slaac 短不了一点,iOS MacOS 似乎没法静态 ipv6 ,用有状态 dhcpv6 可以分固定 v6 ,(但 ROS 不支持有状态)
第 1 条附言  ·  2024 年 9 月 2 日
补充:安卓也可以设置静态后缀,需要 root 权限,在 shell 里面输入

ip token set ::1234/64 dev wlan0

设置后缀为 1234 ,重启下 wifi 即可生效,入站可用,出站怎么改优先级不走 slaac 地址还不得知
第 2 条附言  ·  2024 年 9 月 4 日
第三十四楼,openwrt 也得到了固定前缀的支持
70 条回复  •  2025-12-20 00:01:05 +08:00
rulagiti
   1
rulagiti  
   2024 年 9 月 2 日
这个不错,openwrt 怎么指定呢
creepersssss
   2
creepersssss  
   2024 年 9 月 2 日
我测试的是,可以固定现在拿到的地址,但是不能自己指定改地址
piero66
   3
piero66  
OP
   2024 年 9 月 2 日 via Android
@rulagiti 无解
piero66
   4
piero66  
OP
   2024 年 9 月 2 日 via Android
@creepersssss 多试几次,可以先把拨号断了再改
yyyb
   5
yyyb  
   2024 年 9 月 2 日   ❤️ 1
上周折腾了半天把家里的 debian 软路由开了 ipv6 ,又搞了个纯 v6 小鸡,一切都弄好以后发现 x 、github 好多网站不支持 ipv6 就又滚回去了
nlzy
   6
nlzy  
   2024 年 9 月 2 日
@rulagiti 自己改 odhcp6c 的源代码,其实不算复杂,我改过。
piero66
   7
piero66  
OP
   2024 年 9 月 2 日 via Android
@nlzy 如果可用的话麻烦分享出来,很有用的功能
MuJian
   8
MuJian  
   2024 年 9 月 2 日
我说呢,我这有个华为的 f30 fttr 设备就是固定公网 ipv6 ,无论停电几小时重连还是这个 prefix
allenby
   9
allenby  
   2024 年 9 月 2 日 via Android
@MuJian #8 华为的是会这样,用其他牌子的就不会
glassesliu
   10
glassesliu  
   2024 年 9 月 2 日
ipv6 其实方便多了,我现在的 nas 就是用 ipv6 ,v4 从来是不想的了
piero66
   11
piero66  
OP
   2024 年 9 月 2 日 via Android
@MuJian 自查
FastAce
   12
FastAce  
   2024 年 9 月 4 日
https://openwrt.org/docs/guide-user/network/ipv6/configuration#protocol_static_ipv6

看官方文档是支持的,不知道怎么配置
ip6hint prefix hint (hex) no (none) Hint the subprefix-ID that should be delegated as hexadecimal number (see Downstream configuration below)

@rulagiti
piero66
   13
piero66  
OP
   2024 年 9 月 4 日 via Android
@FastAce op 这个设计是给 lan 分子网 id ,ros 反过来找上游要前缀,原理应该一样,改源码是需要的
rulagiti
   14
rulagiti  
   2024 年 9 月 4 日
@FastAce

这是是 ula 针对 lan 配置的
FastAce
   15
FastAce  
   2024 年 9 月 4 日
@rulagiti 多谢大佬解惑~
FastAce
   16
FastAce  
   2024 年 9 月 4 日   ❤️ 1
@rulagiti
@piero66
https://github.com/themiron/odhcp6c/tree/prefix-request

最新的源码这里有,

相关 PR 的说明:

odhcp6c: allow to request specific ipv6 prefix
Expand -P option with optional exact ipv6 prefix format.
This allows to keep the IPv6 prefix in some cases, for example
if the prefix is issued dynamically on upstream.

Examples:
-P <length>
-P <prefix/length>


odhcp6c:允许请求特定的 IPv6 前缀

代码 Github 大佬写好了,只需编译,ROS 部分地区的 Vbras DUID 不规范拿不到 IPV6 (确切的说 ROS 检查 DUID 比较严格),OPENWRT 编译 应该 即解决 ROS DUID 的问题,也不仅仅再局限于使用 ROS
rulagiti
   17
rulagiti  
   2024 年 9 月 4 日
@FastAce 感谢
flybird08765
   18
flybird08765  
   2024 年 9 月 4 日
@FastAce @rulagiti 我编译了一下似乎不能正常工作,卡住了,帮忙确认下是这么用的吗?

root@OpenWrt:~# odhcp6c -P "2409:xxxx:xxxx:xxxx::/60" br-lan
flybird08765
   19
flybird08765  
   2024 年 9 月 4 日
这版改的有点神奇,不支持/60 这样的字段了,会报错:odhcp6c: invalid argument: '/60'
FastAce
   20
FastAce  
   2024 年 9 月 4 日 via Android
@flybird08765 我还没编译,只找到了源码🤣
FastAce
   21
FastAce  
   2024 年 9 月 4 日
@flybird08765 -P2400:X:X:X::/XX 这样看看
flybird08765
   22
flybird08765  
   2024 年 9 月 4 日
我发现核心原因是卡在/lib/netifd/dhcpv6.script 这个脚本里面,这个脚本写的好复杂,得研究哪里出了问题 @FastAce
FastAce
   23
FastAce  
   2024 年 9 月 4 日
@flybird08765 琢磨出来了,麻烦贴下步骤,造福下 V 友
Satansickle
   24
Satansickle  
   2024 年 9 月 4 日
爱快能这样搞吗
FastAce
   25
FastAce  
   2024 年 9 月 4 日
@Satansickle 不行,不能指定前缀(类似 prefix hint )
piero66
   26
piero66  
OP
   2024 年 9 月 4 日 via Android
@Satansickle 不可能有,这种东西动了运营商蛋糕了,开源 OpenWrt 改源码还有希望
FastAce
   27
FastAce  
   2024 年 9 月 4 日 via Android
@piero66 已经有源码了,有空再折腾下
FastAce
   28
FastAce  
   2024 年 9 月 4 日
@flybird08765 编译的可以发下吗?我琢磨下 dhcpv6.script ,或者有完整镜像也可以
flybird08765
   29
flybird08765  
   2024 年 9 月 4 日
追踪到了/lib/netifd/proto/dhcpv6.sh ,是这里调用的 odhcpv6 ,有没有大佬一起研究研究
flybird08765
   30
flybird08765  
   2024 年 9 月 4 日
@FastAce http://142.171.30.131/odhcp6c
flybird08765
   31
flybird08765  
   2024 年 9 月 4 日 via Android
@FastAce 可以加 tg 吗?同步下我这边进展 https://t.me/yaozhizhao
flybird08765
   32
flybird08765  
   2024 年 9 月 4 日 via Android
openwrt 搞定了,不过好像没办法挑靓号
piero66
   33
piero66  
OP
   2024 年 9 月 4 日 via Android
@flybird08765 折腾出来麻烦发出来造福 v 友吧
FastAce
   34
FastAce  
   2024 年 9 月 4 日
@flybird08765 修改 lib/netifd/proto/dhcpv6.sh 文件大概第 7 行 proto_dhcpv6_init_config()函数的 reqprefix 这行的属性域为 ip6addr 。
proto_config_add_string 'reqprefix:ip6addr'
FastAce
   35
FastAce  
   2024 年 9 月 4 日
@flybird08765 可以固定了?先不说靓不靓
flybird08765
   36
flybird08765  
   2024 年 9 月 4 日 via Android
就是 34 楼的方法,改 reqprefix 变量 @FastAce
FastAce
   37
FastAce  
   2024 年 9 月 4 日
@flybird08765 没得 TG ,抱歉,目前是 OK 了?
flybird08765
   38
flybird08765  
   2024 年 9 月 4 日 via Android
统一回复下。
1. 我静态编译了 odhcp6c x86 版本,替换/usr/sbin 下面同名文件。
2. 修改/lib/netifd/proto/dhcpv6 .sh 里面的 reqprefix 变量,如 2409:xxxx:xxxx:100::/60 。
3. 重新拨号即可。

我们这边移动不能选靓号,联通可以。
FastAce
   39
FastAce  
   2024 年 9 月 4 日
@flybird08765 666~~~
FastAce
   40
FastAce  
   2024 年 9 月 4 日
@piero66 OP 可以置顶 WRT 的用法么?
piero66
   41
piero66  
OP
   2024 年 9 月 4 日 via Android
@flybird08765 试试子网 id 那四位的规律,我们这电信最后一位必须要是 0 ,也就是 1000 、2000 这样的格式允许
FastAce
   42
FastAce  
   2024 年 9 月 5 日
@flybird08765
有空了赶紧回家搞,结果好像不符合预期,不知道哪里没搞对
1.IPV6 配置如下(指定了请求前缀)(配置之后,Luci 页面重启 pppoe-wan6 )
![image]( https://imgur.com/yyenVwE.png)
2.查看 Luci IP 信息(查到的前缀不是指定的前缀,重复实验,按照截图的前缀获取(运营商下发的) 都不可以)
![image]( )
3.单独执行 odhcp6c -s /lib/netifd/dhcpv6.script -P2408:9:8:7::/64 pppoe-WAN (有以下报错,难道是编译差异?我直接拿你的二进制替换的,还是使用姿势不对)
![image]( )
4.DHCPV6.sh 变量配置如下(不知道这样写和你的有啥差别吗):
![image]( )

辛苦有空帮忙看看,咱两操作上有啥区别么,或者 方不方便 直接打包下你的 openwrt 的镜像,万分感谢
FastAce
   43
FastAce  
   2024 年 9 月 5 日
@flybird08765

执行了

ps w|grep odhcp6c

5035 root 1272 S odhcp6c -s /lib/netifd/dhcpv6.script -Ntry -P2408:XXXX:1234:5678::/60 -k -t120 pppoe-WAN

看执行过程实际执行了 我指定的前缀配置,但是实际运营商给的始终不是这个 IPV6 PD (不知道是不是运营商的锅)
flybird08765
   44
flybird08765  
   2024 年 9 月 5 日
@FastAce 按你的步骤回复下:
1. 我配置的 prefix 在 br-lan 上;
2. 我是直接改的配置,Luci 的校验只包含数字,没法从 web 上保存;
3. 单独执行是会报错,我昨天下午在这里纠结了很久,但是发现根本原因不在这里,应该是 env 不是 sh 的原因导致某些脚本和命令找不到;
4. 我直接修改的-P 参数传值,没有动上面 config 变量,因为这个变量里面又是冒号又是斜杠,担心出现字符串切割问题
flybird08765
   45
flybird08765  
   2024 年 9 月 5 日
FastAce
   46
FastAce  
   2024 年 9 月 5 日
@flybird08765 妥了,我是在 PPPOE_WAN 上配置的,没有问题了,br_lan 上死活拿不到 IPV6
[root@KWrt:01:09 PM ~] # ps w|grep odhcp6c
63973 root 1272 S odhcp6c -s /lib/netifd/dhcpv6.script -P2408:XXXX:XXXX:780::/60 -t120 pppoe-wan
65110 root 1200 S grep odhcp6c
[root@KWrt:01:09 PM ~] # curl ip.sb
2408:XXXX:XXXX:780::1
[root@KWrt:01:09 PM ~] # curl 6.ipw.cn
2408:XXXX:XXXX:780::1
FastAce
   47
FastAce  
   2024 年 9 月 5 日
@flybird08765 更正
产看了一下终端
br-lan: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 00:15:5d:c2:99:0d brd ff:ff:ff:ff:ff:ff
inet 192.168.199.198/24 brd 192.168.199.255 scope global br-lan
valid_lft forever preferred_lft forever
inet6 2408:XXXX:XXXX:780::1/64 scope global deprecated dynamic
valid_lft 6718sec preferred_lft 0sec

是 br-lan 拿到了这个 IP ,只不过在 Luci 上不展示(完美
flybird08765
   48
flybird08765  
   2024 年 9 月 5 日
@FastAce 哈哈,恭喜,低调使用,不建议贡献代码,懂技术的按照上面的讨论步骤自然可以搞定。门槛降低很有可能运营商会禁用这个功能。
allenby
   49
allenby  
   2024 年 9 月 6 日 via Android
@FastAce #16 不知道为啥 openwrt 很久没有合并 odhcpd 了
FastAce
   50
FastAce  
   2024 年 9 月 6 日 via Android
@allenby 可能觉得没啥大的 bug ,能用就行
tpsxiong
   51
tpsxiong  
   2024 年 9 月 6 日
同是 op 系统,按照操作下来,ps 看进程的前缀参数是正确的,但分配的依然是其他的前缀。说明上游不支持吗?
FastAce
   52
FastAce  
   2024 年 9 月 6 日 via Android
@tpsxiong 可以拿历史分配的,手动指定再次 pppoe 拨号,看看
tpsxiong
   53
tpsxiong  
   2024 年 9 月 6 日 via Android
@FastAce 也试过 依然分配新的
FastAce
   54
FastAce  
   2024 年 9 月 6 日 via Android
@tpsxiong 那估计不支持
xiaoxiang69460
   55
xiaoxiang69460  
   2024 年 9 月 7 日
修改/lib/netifd/proto/dhcpv6.sh ,替换编译的 odhcp6c 之后疯狂报错 user.err : invalid argument: '240e:xxxx:xxxx:abcd::/60',不知道是哪里的问题
bigtwo
   56
bigtwo  
   2024 年 9 月 7 日
@xiaoxiang69460 不用这么麻烦,各种教程都教复杂了,直接编译最新源码后新装或替换/usr/sbin/odhcp6c 就行,openwrt 那个 reqprefix 参数本身就支持 64 位以下字符,直接填前缀就行
Techzero
   57
Techzero  
   2024 年 9 月 7 日
最新的源码编译替换测试了一下,南京电信不行,ps -w | grep odhcp6c ,查看参数已经带上-P 前缀了,实际每次拨号还是会变,还是看地区吧

提供一份源码和编译后的 ipk 、bin 文件(直接替换 /usr/sbin/odhcp6c ),有兴趣的可以试试,记得备份原来的文件
Techzero
   58
Techzero  
   2024 年 9 月 7 日
xiaoxiang69460
   59
xiaoxiang69460  
   2024 年 9 月 7 日
@cnyang
@Techzero
是我菜了,那个代码默认下来是 master 分支,编译时忘记切换到 prefix-request 分支了,所以我自己编译了个和原版一样的 odhcp6c ,切换到正确的分支后在编译就没有遇到 invalid argument 错误了。
但是实测江西电信不支持。折腾结束
bigtwo
   60
bigtwo  
   2024 年 9 月 8 日
@xiaoxiang69460
@Techzero 多换几个前缀试试,不同时间也试试,我这换了上百个相邻的并加上:0000 才成功找到两个,凌晨成功率更高,只要重拨断线时间不太长就一直能用
amyw495062
   61
amyw495062  
   2024 年 9 月 9 日
这么厉害
xiaoxiang69460
   62
xiaoxiang69460  
   2024 年 9 月 10 日
@cnyang
发现了,如果设置成他分配的 PD ,重播后暂时没有改。以前 IPv6-PD 重播必定改变。
FastAce
   63
FastAce  
   2024 年 9 月 10 日 via Android
@xiaoxiang69460 联通目前稳定,特意多次拨号,中断好几个小时拨号,都可以指定好几天前的 PD
piero66
   64
piero66  
OP
   2024 年 9 月 11 日 via Android
@FastAce 还是看地区看 bras 设备,昨天帮苏州的朋友用 ROS 弄了下,中兴 m6000 ,可惜固定不了。我这里华为 me60 ,移动电信都随便固定
huaxie1988
   65
huaxie1988  
   2024 年 9 月 23 日
测试成功,但是感觉有了 ddns 也没多大用然后关了
piero66
   66
piero66  
OP
   2024 年 9 月 23 日 via Android
@huaxie1988 有私有云用处就大了
NoInternet
   67
NoInternet  
   2024 年 10 月 24 日
标记一下,还挺有用的,谢谢大佬
wxhwz
   68
wxhwz  
   2025 年 1 月 5 日
@piero66 #64 一样,中兴 m6000 ,固定不了
titanium98118
   69
titanium98118  
   2025 年 1 月 7 日
请教一下友善 R5c 应该要怎么编译?
Linux r5c 5.15.167 #0 SMP PREEMPT Fri Sep 27 07:23:35 2024 aarch64 GNU/Linux
我从甲骨文 arm 上 make 出来的 odhcp6c 在 r5c 上运行不了
baring
   70
baring  
   2025 年 12 月 20 日 via Android
电信实测,pppoe 链接多次重启测试虽然路由器前缀没有变化而且下联 pc 的网卡页面也显示 ipv6 为 internet 正常连接状态但有概率实际拨号路由和电脑并不能 ping 通外网 ipv6 地址,必须设置回动态获取前缀后才 ipv6 正常通网
© 2026 V2EX · 60ms · 3.9.8.5