OpenWrt桥接ONU设置SoftBank光IPv6高速ハイブリッド「IPv6 IPoE + IPv4」

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光用户提供帮助。

OpenWrt桥接ONU设置SoftBank光IPv6高速ハイブリッド「IPv6 IPoE + IPv4」插图

注意
1、本文不含对ひかり電話等非上网服务的配置。

2、即使在OpenWrt上设置了IPv6高速ハイブリッド,也不能免除每个月的ISP路由器租金。SoftBank光IPv6高速ハイブリッド与BBユニットレンタル是捆绑在一起的オプション,解约后不能使用IPv6方式上网。

0x01: 事前准备

需要准备的东西:BB单元和NTT的ONU;1台安装有kmod-ip6-tunnelip-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单元进行抓包来获取隧道配置的参数。

OpenWrt桥接ONU设置SoftBank光IPv6高速ハイブリッド「IPv6 IPoE + IPv4」插图1
按照接线图将ONU的UNI口连接PORT1,BB单元的WAN口连接PORT2,电脑网卡连接PORT3,在你的交换机上设置Mirror source port为PORT2,设置Mirror monitor port为PORT3。

OpenWrt桥接ONU设置SoftBank光IPv6高速ハイブリッド「IPv6 IPoE + IPv4」插图2

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

OpenWrt桥接ONU设置SoftBank光IPv6高速ハイブリッド「IPv6 IPoE + IPv4」插图3

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

OpenWrt桥接ONU设置SoftBank光IPv6高速ハイブリッド「IPv6 IPoE + IPv4」插图4

将得到的两组数据进行转换。

假设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-tunnelip-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的前缀备用。

OpenWrt桥接ONU设置SoftBank光IPv6高速ハイブリッド「IPv6 IPoE + IPv4」插图5

使用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连接。

OpenWrt桥接ONU设置SoftBank光IPv6高速ハイブリッド「IPv6 IPoE + IPv4」插图6
本文是对SoftBank光(1Gbps)的配置教程,基于笔者与使用1Gbps网络的朋友共同测试的回忆整理而来。笔者使用的网络配置方式与之并不相同,因此可能存在谬误。如果您在配置过程中出现任何问题请留言,以便于笔者对文中可能出现的失误进行修正。

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

评论

  1. lqs
    5月前
    2023-9-27 13:54:35

    测试了一下,有个更简便的方法:
    先提前从bbunit拿到自己的IPv6地址(结尾1111的那个),配置到网卡上,然后网线直连光猫抓包,这时候应该能抓到ipip6隧道的包,就可以从里面拿到隧道对方的IPv6地址了。

    • Missing
      博主
      lqs
      5月前
      2023-9-27 14:33:53

      是的,可以抓到destination是自己WAN IPv4的IPIP6包

  2. Thorn
    5月前
    2023-10-05 20:26:00

    所以最后博主是放弃了10G契约,换成1G契约了么()

    • 博主
      Thorn
      5月前
      2023-10-06 22:56:05

      这倒不是,1G契约用的人更多所以就写了1G的教程
      10G有一个解决不掉的致命问题就暂时搁置了∠( ᐛ 」∠)_

      • Missing
        4月前
        2023-11-18 0:08:45

        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?

        • 博主
          tomo0611
          4月前
          2023-11-18 5:51:01

          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.

          • Missing
            3月前
            2023-11-20 10:38:56

            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)

          • 博主
            tomo0611
            3月前
            2023-11-21 9:12:16

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇