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
,增加如下内容,其中:
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
之前手动运行这些指令以及后续步骤来测试能否正常使用。
※2024-10更新:OpenWrt 23.05.3 (Released: Fri, 22 Mar 2024) 后ds-lite包增加了IPIP6隧道接口配置,可直接在webui配置以上内容。
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
我是忍受不了自己楼的VDSL电话线拉了一条nuro光,nuro狗的是光猫不能改桥接,超级管理员密码在网上也没有一点线索,不过看到了一个博主的帖子接了vsol光猫,可是抽象的是桥接模式下怎么都要不到ipv6地址🥲各种方式都试过了。。。就是不行。。。。
算了我还是只用ipv4吧,反正桥接得到一个公网也挺适合搭服务器的😭
NURO 2G 光猫的超级账户已经被禁用了,如果是 sony 光猫的话根本没有设计桥接功能,只能用第三方光猫替换。至于 IPv6,2G 我不太清楚,10G 的话和 NTT 一样只通过纯 DHCPv6 分配一个 PD 前缀,地址需要路由器自己分配。
IPoE设置好了的话可以和PPPoE组多播吗[狗头]
https://downloads.openwrt.org/releases
现在最新版的openwrt内置了ipip6协议,想问一下这个可以直接用吗。
我研究了两三天也没搞明白[捂脸]
啊,那个ipip6就是我提交的。把本文里抓到的参数填进去就好了。
另外SB光1G理论上最多可以拿到4个IP来着(PPPoE 3个+IPoE 1个)
那难道可以组四拨[狂喜]。那另外两个PPPoE怎么获取呢,也是直接填同样的认证ID吗
用SB光的SID可以双拨拿到2个IP,然后NTT在部分地区有提供一个学术研究用的公共PPPoE账号
厉害厉害,感谢大佬
用代码的方式配置好重启之后是成功了,不过测速只有BB单元的一半⌇●﹏●⌇
使用luci的方式也成功了,不过wan6要配置成静态地址,ipv6地址设为路由器1111的,网关设置为作为DHCP客户端时获取的网关。不过测速还是很慢。。。。
重新配置了一下,不知怎么就好了,速度也上去了
老板您好,
网络方面我不是很懂,想请教一下
1G 和 10G 的光,如果想要实现 nat loopback 的话,只能是通过修改 DMZ 实现吗?
大佬你好,我最近遇到一个问题,我现在在用的路由器是日版华硕AX89X,家中的网络环境是ビッグローブ10ギガ,只能使用ipv6オプション协议,但是在华硕路由器wan选项中只有v6プラス。我的AX89X没有办法进行上网认证。我该如何解决这个问题?该刷openwrt吗?刷openwrt之后的ipv6オプション又该如何配置呢?望大佬解答,谢谢!
与V6プラス设置方法差不多,都是MAPE。日文社区有很多教程了。不过印象里华硕只有Merlin固件可以用,那个好像不能设置MAPE吧。
感谢您非常有用的指导。
我是日本人,但我一直想更换bbunit和用其他”企业”路由器。(例如,YAMAHA RTX、NEC UNIVERGE。)
我终于扔掉了bbunit。非常感谢
softbank的ipv4公网地址用了这个方法会有影响吗