V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
piero66
V2EX  ›  宽带症候群

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

  •  1
     
  •   piero66 · 108 天前 via Android · 5418 次点击
    这是一个创建于 108 天前的主题,其中的信息可能已经有所发展或是发生改变。
    ![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 条附言  ·  108 天前
    补充:安卓也可以设置静态后缀,需要 root 权限,在 shell 里面输入

    ip token set ::1234/64 dev wlan0

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

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

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

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

    提供一份源码和编译后的 ipk 、bin 文件(直接替换 /usr/sbin/odhcp6c ),有兴趣的可以试试,记得备份原来的文件
    xiaoxiang69460
        59
    xiaoxiang69460  
       103 天前
    @cnyang
    @Techzero
    是我菜了,那个代码默认下来是 master 分支,编译时忘记切换到 prefix-request 分支了,所以我自己编译了个和原版一样的 odhcp6c ,切换到正确的分支后在编译就没有遇到 invalid argument 错误了。
    但是实测江西电信不支持。折腾结束
    cnyang
        60
    cnyang  
       102 天前
    @xiaoxiang69460
    @Techzero 多换几个前缀试试,不同时间也试试,我这换了上百个相邻的并加上:0000 才成功找到两个,凌晨成功率更高,只要重拨断线时间不太长就一直能用
    amyw495062
        61
    amyw495062  
       101 天前
    这么厉害
    xiaoxiang69460
        62
    xiaoxiang69460  
       100 天前
    @cnyang
    发现了,如果设置成他分配的 PD ,重播后暂时没有改。以前 IPv6-PD 重播必定改变。
    FastAce
        63
    FastAce  
       99 天前 via Android
    @xiaoxiang69460 联通目前稳定,特意多次拨号,中断好几个小时拨号,都可以指定好几天前的 PD
    piero66
        64
    piero66  
    OP
       99 天前 via Android
    @FastAce 还是看地区看 bras 设备,昨天帮苏州的朋友用 ROS 弄了下,中兴 m6000 ,可惜固定不了。我这里华为 me60 ,移动电信都随便固定
    huaxie1988
        65
    huaxie1988  
       87 天前
    测试成功,但是感觉有了 ddns 也没多大用然后关了
    piero66
        66
    piero66  
    OP
       87 天前 via Android
    @huaxie1988 有私有云用处就大了
    NoInternet
        67
    NoInternet  
       56 天前
    标记一下,还挺有用的,谢谢大佬
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3081 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 13:12 · PVG 21:12 · LAX 05:12 · JFK 08:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.