AD Time
【点击加载Telegram群链接】
有想讨论日本宽带相关话题的朋友可以加huggy佬的TG群交流
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单元进行抓包来获取隧道配置的参数。

按照接线图将ONU的UNI口连接PORT1,BB单元的WAN口连接PORT2,电脑网卡连接PORT3,在你的交换机上设置Mirror source port为PORT2,设置Mirror monitor port为PORT3。※ 更新:可直连ONU抓包,参考评论区。

在电脑上运行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,增加如下内容,其中:
INTERFACE: WAN6的物理接口。IPV6_PEER: 之前通过网络抓包得到的Peer IPv6地址。IPV4_ENDPOINT: 之前通过网络抓包得到的终端IPv4地址。IPV6_ENDPOINT: 由WAN6 IPv6地址的前缀来组成的终端IPv6地址。例如前缀是2400:2410:abcd:ef00::/64,将后64位填充1从而得到完整的终端IPv6地址2400:2410:abcd:ef00:1111:1111:1111:1111。
※ 可以在写入/etc/rc.local之前手动运行这些指令以及后续步骤来测试能否正常使用。
※2024-10更新:OpenWrt 23.05.3 (Released: Fri, 22 Mar 2024) 后ds-lite包增加了IPIP6隧道接口配置,可直接在webui配置以上内容。
| |
编辑/etc/config/network,增加如下内容,其中ipaddr为终端IPv4地址。
| |
保存并执行/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地址了。
然后用ipv6.nxt == 4,更简单可以过滤到。GPT告诉我的嘿嘿
最后看包数据中ipv6的部分的源地址就可以拿到隧道对方的地址了
10G有一个解决不掉的致命问题就暂时搁置了∠( ᐛ 」∠)_
"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 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.
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)
算了我还是只用ipv4吧,反正桥接得到一个公网也挺适合搭服务器的😭
现在最新版的openwrt内置了ipip6协议,想问一下这个可以直接用吗。
我研究了两三天也没搞明白[捂脸]
另外SB光1G理论上最多可以拿到4个IP来着(PPPoE 3个+IPoE 1个)
2.NTT在部分地区友提供学术研究用公用PPPOE账号的,方便再提供一些信息吗?我目前是使用NTT系列BIGLOBE的回线,另外通过CAF番号在NTT的后台契约了マルチセッション3拨,每月另外付费990日元,加上原有的就5拨了,照你的意思是其实不用契约也可以多播的意思吗
2、https://www.softether.jp/7-news/2020.03.06 只能在茨城、东京使用;マルチセッション 增加的是CAF号下的总pppoe session数,不花钱印象里最多3拨
网络方面我不是很懂,想请教一下
1G 和 10G 的光,如果想要实现 nat loopback 的话,只能是通过修改 DMZ 实现吗?
我是日本人,但我一直想更换bbunit和用其他"企业"路由器。(例如,YAMAHA RTX、NEC UNIVERGE。)
我终于扔掉了bbunit。非常感谢
咨询 softbank 回答不能手动换 ip。只有解约这一条路可以走了吗 ?😭