piero66

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

  •  1
     
  •   piero66 · Sep 2, 2024 via Android · 10569 views
    This topic created in 793 days ago, the information mentioned may be changed or developed.
    ![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 不支持有状态)
    Supplement 1  ·  Sep 2, 2024
    补充:安卓也可以设置静态后缀,需要 root 权限,在 shell 里面输入

    ip token set ::1234/64 dev wlan0

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

    这是是 ula 针对 lan 配置的
    FastAce
    FastAce
    Sep 4, 2024
    15
    @rulagiti 多谢大佬解惑~
    FastAce
    FastAce
    Sep 4, 2024❤️1
    16
    @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
    rulagiti
    Sep 4, 2024
    17
    @FastAce 感谢
    flybird08765
    flybird08765
    Sep 4, 2024
    18
    @FastAce @rulagiti 我编译了一下似乎不能正常工作,卡住了,帮忙确认下是这么用的吗?

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

    我们这边移动不能选靓号,联通可以。
    FastAce
    FastAce
    Sep 4, 2024
    39
    @flybird08765 666~~~
    FastAce
    FastAce
    Sep 4, 2024
    40
    @piero66 OP 可以置顶 WRT 的用法么?
    piero66
    piero66
    OP
    Sep 4, 2024 via Android
    41
    @flybird08765 试试子网 id 那四位的规律,我们这电信最后一位必须要是 0 ,也就是 1000 、2000 这样的格式允许
    FastAce
    FastAce
    Sep 5, 2024
    42
    @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
    FastAce
    Sep 5, 2024
    43
    @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
    flybird08765
    Sep 5, 2024
    44
    @FastAce 按你的步骤回复下:
    1. 我配置的 prefix 在 br-lan 上;
    2. 我是直接改的配置,Luci 的校验只包含数字,没法从 web 上保存;
    3. 单独执行是会报错,我昨天下午在这里纠结了很久,但是发现根本原因不在这里,应该是 env 不是 sh 的原因导致某些脚本和命令找不到;
    4. 我直接修改的-P 参数传值,没有动上面 config 变量,因为这个变量里面又是冒号又是斜杠,担心出现字符串切割问题
    FastAce
    FastAce
    Sep 5, 2024
    46
    @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
    FastAce
    Sep 5, 2024
    47
    @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
    flybird08765
    Sep 5, 2024
    48
    @FastAce 哈哈,恭喜,低调使用,不建议贡献代码,懂技术的按照上面的讨论步骤自然可以搞定。门槛降低很有可能运营商会禁用这个功能。
    allenby
    allenby
    Sep 6, 2024 via Android
    49
    @FastAce #16 不知道为啥 openwrt 很久没有合并 odhcpd 了
    FastAce
    FastAce
    Sep 6, 2024 via Android
    50
    @allenby 可能觉得没啥大的 bug ,能用就行
    tpsxiong
    tpsxiong
    Sep 6, 2024
    51
    同是 op 系统,按照操作下来,ps 看进程的前缀参数是正确的,但分配的依然是其他的前缀。说明上游不支持吗?
    FastAce
    FastAce
    Sep 6, 2024 via Android
    52
    @tpsxiong 可以拿历史分配的,手动指定再次 pppoe 拨号,看看
    tpsxiong
    tpsxiong
    Sep 6, 2024 via Android
    53
    @FastAce 也试过 依然分配新的
    FastAce
    FastAce
    Sep 6, 2024 via Android
    54
    @tpsxiong 那估计不支持
    xiaoxiang69460
    xiaoxiang69460
    Sep 7, 2024
    55
    修改/lib/netifd/proto/dhcpv6.sh ,替换编译的 odhcp6c 之后疯狂报错 user.err : invalid argument: '240e:xxxx:xxxx:abcd::/60',不知道是哪里的问题
    bigtwo
    bigtwo
    Sep 7, 2024
    56
    @xiaoxiang69460 不用这么麻烦,各种教程都教复杂了,直接编译最新源码后新装或替换/usr/sbin/odhcp6c 就行,openwrt 那个 reqprefix 参数本身就支持 64 位以下字符,直接填前缀就行
    Techzero
    Techzero
    Sep 7, 2024
    57
    最新的源码编译替换测试了一下,南京电信不行,ps -w | grep odhcp6c ,查看参数已经带上-P 前缀了,实际每次拨号还是会变,还是看地区吧

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