0x00: 背景
SoftBank 光想要启用 IPv6 IPoE 上网来避开 PPPoE 高峰期的不稳定就必须租赁 ISP 专用路由器 “BB 单元”。但 BB 单元在性能和固件方面都存在明显的缺陷,最重要的是它不支持 NAT LOOPBACK:在局域网内访问域名绑定的服务只能通过修改 hosts 来将自己域名指向局域网 IP 地址来访问。
如果不使用 BB 单元将普通路由器直接连接到 ONU 则采用 IPoE 的方式只能访问纯 IPv6 互联网,IPv4 互联网只能通过 PPPoE 的方式访问,而由于 NTT 的历史包袱 PPPoE 的稳定性并不好。日本市面上出售的路由器目前还没有能直接支持 SoftBank 光采用的 4in6 隧道的产品。互联网上关于 SoftBank 光配置 IPoE IPv6 + IPv4 教程也非常有限,大部分教程都是建议启用 DMZ 和 IPv6 passthrough,同时关闭 Wi-Fi 信号发射来实现桥接。
然而,这并不是一个优雅的使用固定 IPv4 地址和稳定 IPv4 互联网的解决方案。经过一段时间的摸索实现了在 OpenWrt 上配置 IPv6 高速ハイブリッド,本文将简单介绍这一配置过程,希望能为其他同样面临这一问题的 SoftBank 光用户提供帮助。

2、即使在 OpenWrt 上设置了 IPv6 高速ハイブリッド,也不能免除每个月的 ISP 路由器租金。SoftBank 光 IPv6 高速ハイブリッド与 BB ユニットレンタル是捆绑在一起的オプション,解约后不能使用 IPv6 方式上网。
0x01: 事前准备
需要准备的东西:BB 单元和 NTT 的 ONU;1 台安装有 kmod-ip6-tunnel 和 ip-full 包的 OpenWrt 路由器;1 台支持端口镜像(Port Mirroring)的交换机;1 台 Windows 电脑;Wireshark 数据包捕获软件;SSH 客户端。
0x02: 抓包获取 IPv4 over IPv6 隧道配置参数
SoftBank 光使用的 4over6 协议并不是所谓 “4rd/SAM”。这是一个广泛流传在日本社交网络上的谣言,已被 SoftBank 官方否认。事实上 BB 单元内置的 4over6 功能与 JPIX 的 v6 プラス中固定 IP 契约是相同的,它们均使用 RFC2473 标准的 IPIP 隧道。区别在于使用 JPIX 提供 IPv4 over IPv6 服务的 ISP 会将隧道的配置信息提供给用户,用户可使用对应账号密码在未来隧道参数发生变化时通过 HTTP Request 请求新参数,而 SoftBank 光则是使用非公开的认证信息(并非 PPPoE 拨号的 S-ID)通过 BB 单元内置的 RADIUS 客户端向服务器请求隧道配置参数。笔者在测试过程中发现理论上只要不取消 IPv6 高速ハイブリッド IP 地址就不会发生变化,基本可以认为是固定 IP。
RAIDUS 认证目前仅用于请求隧道参数不直接影响 IPIP 通信,因此我们不关心认证的具体实现,直接对 BB 单元进行抓包来获取隧道配置的参数。


在电脑上运行 Wireshark,点击 PC 网卡对应的网络适配器开始抓包。然后将 BB 单元上电,等待 Wireshark 中出现抓包数据。BB 单元成功联网之后点击停止按钮停止抓包。

应用显示过滤器里输入 “RADIUS” 过滤出与 RADIUS 有关的数据包,找到 Info 为 Access-Accept 的包,展开 Attribute Value Pairs,找到 VSA: t=Unknown-Attribute(204) 和 VSA: t=Unknown-Attribute(207),这两项分别是以 16 进制表示的终端 IPv4 地址和 Peer IPv6 地址。

将得到的两组数据进行转换。
假设 204 的字符串为 7e723304,
将其分成 4 个字节(每两个十六进制字符一个字节):7e, 72, 33, 04
将每个字节从十六进制转换为十进制:126, 114, 51, 4
得到终端 IPv4 地址:126.114.51.4
假设 207 的字符串为 2400200000040000a000000000001919,
将这个字符串分为 8 组,每组 4 个字符:2400, 2000, 0004, 0000, a000, 0000, 0000, 1919
转换为 IPv6 的格式:2400:2000:0004:0000:a000:0000:0000:1919
化简得到 Peer IPv6:2400:2000:4:0:a000::1919
记录这两个地址备用。
2023 年 9 月 21 日更新:加载字典(dictionary.softbank)可直接解析出终端 IPv4 和 Peer IPv6 无需手算转换。
0x03: 配置 OpenWrt
移除 BB 单元,将 OpenWrt 路由器 WAN 口 eth1(后续 eth1 均代表 WAN 口)直接连接到 ONU。
确认 OpenWrt 已经安装软件包 kmod-ip6-tunnel、ip-full。
访问 OpenWrt 的 Web LuCI 页面。(后续步骤可能因 luci 版本不同而不同,请根据你的固件版本自行修改)
点击 [Network] – [Devices],点击设备 eth1 的 [Configure…] 按钮将 MAC address 设置为 BB 单元的 WAN 口 MAC 地址
点击 [Network] – [Interfaces],删除 WAN 接口,编辑 WAN6 接口
点击 [General Settings] 将 Protocol 设置为 DHCPv6 Client
点击 [Advanced Settings] 将 Override MAC address 设置为 BB 单元的 WAN 口 MAC 地址。
点击 [Physical Settings] 确保 Bridge interfaces 为未选中状态(OFF)并将 Interface 设置为 eth1
点击 [Firewall Settings] 将 Create / Assign firewall-zone 设置为 wan
点击 [Network] – [Global network options],删除 IPv6 ULA-Prefix
点击 [Save & Apply]
参考任意教程配置 IPv6 Passthrough 使 LAN 侧设备能够正常获取 IPv6 地址。
如果一切正常,此时 WAN6 能够获取到一个长度为 64 的 IPv6 地址。可访问 https://ip.sb/ 测试能否正常连接到 IPv6 互联网。
这里假设地址为:2400:2410:abcd:ef00:021a:2bff:fe3c:4d5e/64,记录该 IPv6 的前缀备用。

使用 SSH 登录 OpenWrt,
编辑 /etc/rc.local,增加如下内容,其中:
1、INTERFACE: WAN6 的物理接口;
2、IPV6_PEER: 之前通过网络抓包得到的 Peer IPv6 地址;
3、IPV4_ENDPOINT: 之前通过网络抓包得到的终端 IPv4 地址;
4、IPV6_ENDPOINT: 由 WAN6 IPv6 地址的前缀来组成的终端 IPv6 地址。例如前缀是 2400:2410:abcd:ef00::/64,将后 64 位填充 1 从而得到完整的终端 IPv6 地址 2400:2410:abcd:ef00:1111:1111:1111:1111。
※ 可以在写入 /etc/rc.local 之前手动运行这些指令以及后续步骤来测试能否正常使用。
INTERFACE=eth1 IPV6_PEER="2400:2000:4:0:a000::1919" IPV4_ENDPOINT="126.114.51.4" IPV6_ENDPOINT="2400:2410:abcd:ef00:1111:1111:1111:1111" ip -6 addr add $IPV6_ENDPOINT dev $INTERFACE ip -6 tunnel add ip6tnl1 mode ipip6 remote $IPV6_PEER local $IPV6_ENDPOINT dev $INTERFACE encaplimit none ip addr add $IPV4_ENDPOINT dev ip6tnl1 ip route add default dev ip6tnl1 ip link set dev ip6tnl1 up
编辑 /etc/config/network,增加如下内容,其中 ipaddr 为终端 IPv4 地址。
config interface 'sbb_wan' option ifname 'ip6tnl1' option _orig_ifname 'ip6tnl1' option _orig_bridge 'false' option proto 'static' option ipaddr '126.114.51.4' option netmask '255.255.255.255' option dns '8.8.8.8'
保存并执行 /etc/init.d/network restart 使配置生效。
点击 [Network] – [Interfaces],编辑刚刚新建的 sbb_wan 接口,点击 [Firewall Settings] 将 Create / Assign firewall-zone 设置为 wan。
点击 [Save & Apply]。
重启路由器。
0x04: 确认配置正常
理论上重启路由器后就能正常上网了。可以访问 https://ip.sb/ 或访问其他 IPv4 网站进行确认。
可点击 [Status] – [Realtime Graphs] – [Connections] 观察是否成功建立 Protocol 为 IPENCAP 的 IPv6 连接。

0x05: 参考资料
RFC 2473 – Generic Packet Tunneling in IPv6 Specification (ietf.org)
IPv6 高速ハイブリッド IPv6 IPoE + IPv4 はどのようにして IPv4 over IPv6 を実現しているのか – rokoucha (scrapbox.io)
【風前の灯火】IPv6 スレ ver10【IPv4NAT に完敗】 (5ch.net)
OCN 総合スレ 126 回線目 [無断転載禁止]©2ch.net (5ch.net)
0x06: 特别感谢
- kruton
- yomai
- xfoxfu
测试了一下,有个更简便的方法:
先提前从 bbunit 拿到自己的 IPv6 地址(结尾 1111 的那个),配置到网卡上,然后网线直连光猫抓包,这时候应该能抓到 ipip6 隧道的包,就可以从里面拿到隧道对方的 IPv6 地址了。
是的,可以抓到 destination 是自己 WAN IPv4 的 IPIP6 包
所以最后博主是放弃了 10G 契约,换成 1G 契约了么()
这倒不是,1G 契约用的人更多所以就写了 1G 的教程
10G 有一个解决不掉的致命问题就暂时搁置了∠(ᐛ 」∠)_
I want to connect SoftBank 光 10Gbps with OpenWRT Router.
“SoftbankBB RADIUS dictionary” seems XG-100NE, which is used in SoftBank 光 10Gbps Service.
But You said 10G had a fatal problem that could not be solved.
What is the problem?
The DHCPv6 client in OpenWrt isn’t compatible with Flet’s Hikari Cross, and when the IPv6 prefix lifetime expires, odhcp6c will not actively send a renew message, which results in WAN6 losing connection for about 20s.
The prefix lifetime of Flet’s Hikari Cross is only 4 hours, causing frequent network disruptions. Flet’s Hikari Next has a prefix lifetime of a month, so the issue isn’t easily noticed.
This bug was reported by someone 3 years ago, but it still hasn’t been fixed.
Ummm… That’s a serious problem.
I found a issue you wrote.
https://github.com/openwrt/openwrt/issues/13454
From issue comment, As a temporary solution, I will send odhcp6c send Renew Message using crontab…
So if I make odhcp6c send Renew Message every 3 hours, will the problem be solved? (temporary solution)
Try this script: https://gist.github.com/missing233/3dafb6ee549ed2271c20bd700b88a9cd
使用的路由器是 unifi dream machine SE 抓包总是抓不到 RADIUS pppoe 也抓不到。能出个视频详细讲解一下如何干掉 Softbank 的路由器吗,实现自己的路由器和 NTT 连接。ntt 直连路由器 wan 口 是任何网络都没有 要设置哪些东西啊。日语不好真的头疼。。。
上面有评论提到可以直接 NTT 光猫直连 PC 抓远程 BR 服务器发来的数据包喔。视频就不放了,毕竟这个严格来说是不合法的
谢谢大佬
ax11000 最新固件好像已经支持 sb 光的 ipv4+ipv6
哦?具体是哪个品牌的 AX11000?支持的是 IPoE IPv6 + IPv4 over IPv6 方式还是 IPoE IPv6 + PPPoE IPv4?
网络这块我也不太懂。我自己的路由器是华硕的 ax11000 之前一直用的 au 光没怎么更新过固件这次换到 sb 的网。一通瞎操作整的上不了网索性恢复出厂设置后再升级了固件。然后看到 ipv6 里多了很多选项。。用 onu 直连 ipv4 那里还是 pppoe。ipv6 那里选了 passthrough。重启路由器后有 ipv4+ipv6.ipv6 test 也能测到有 ipv6 不过会出现你的浏览器不愿意使用 ipv6。
正常的,SB 光 1G 在开通 BB 单元之后可以通过 DHCPv6 拿到 IPv6,另外本身它自带 PPPoE IPv4。本文探讨的是 IPv4 over IPv6 的方式获取 IPv4