Openwrt

0x00 ⚠️注意⚠️

  1. 做这件事的初衷,是因为不想多接一个我本来就有,而且性能、功能都无法满足我需求的机器,费电又碍事。
  2. 这是一篇鼓捣的记录,不能算教程。并且就算配置好了也不能让你免掉BB单元的500块/月的租赁费用,因为不契约BB单元的话无法获得IPv6,只能用PPPoE走IPv4。

所以如果现在用着没问题,速度够快延迟够低的话不用折腾。

0x01 起因

前几天闲的没事把家里网换成了SB光,被强行加了一个BB单元(BBユニット,其实就是一个路由器)。我以为全日本都能痛痛快快的直接插线IPoE呢,回家一试发现不用他的路由器获不到IPv4,好多网站打不开💩。

0x02 研究

2.1 BB的配置页面,没什么有用的

能看到本机的IPv6,其他没发现什么特别有用的信息,本来想传个Shell试试,或者从哪把配置文件拿出来,找了一圈也没有能上传或下载的地方。但有一个值得注意的是:代码里有"Radius"字样。心想不都是IPoE了么用Radius干嘛,没想到Radius才是重点。

2.2 抓包看看,有大发现

既然从外边看不到什么有用的信息,那就看看内部吧。因为手里没有能做端口镜像的交换机,想抓BB和UNO之间的流量还是着实费了一番工夫,手搓了一根Passive Lan Tap。

PassiveLanTap

蓝线是一根能正常通信的568B线序的100Base-tx线。在百兆线中,实际参与通信的只有4根线(蓝线也只接了这4根线,其他4根剪了)

颜色 作用
TX 发信 +
TX 发信 -
绿 RX 受信 +
绿 RX 受信 -

白线分成了两段,一段白线只接蓝线的发信端,另一段白线只接蓝线的受信端。这样的话,蓝线连接BB和ONU,用任意一段白线接到电脑上就能实现部分数据包的(对于这次抓包够用了)监听了。

2.2.1 IPIP隧道包

IPIP包

抓着包正常使用了一会儿,查看抓包结果发现有大量目标是自己的IPIP(特征很明显,有两层IP协议包着,外层v6内层v4)包。这时的配置思路就已经很清晰了,因为这个包里已经有所有需要的配置信息了:对端的IPv6、自己的IPv6、自己的IPv4。而且经过多次重启,发现IPv6和IPv4都是不会变的,剩下的就是填到OpenWrt的WAN口就行了。

2.2.2 RADIUS包

那么RADIUS是在做什么呢

RADIUS-Access-Accept

在查看RADIUS响应数据包时发现一个比较可疑的值

1
VSA: t=Unknown-Attribute(207) l=18 val=2400200000040000a000000000000001

这个值化简一下不就是IPIP对端地址么

2400:2000:0004:0000:a000:000000000001 👉 2400:2000:4:0:a000::1

按着这个思路,RADIUS仅用于获取IPIP隧道的配置信息,所以分配的IPv4应该也在这个响应里。果不其然,204就是IPv4,不过是用十六进制表示的,一眼看不出来。

1
2
VSA: t=Unknown-Attribute(204) l=6 
val=7e******

2.3 这还没完

因为用的时间短,还不能确定IP就是固定的,所以心里不是很踏实。万一哪天突然开始变了,我不能每回都把BB再拿出来重新抓一次包重新配置。所以就打起了自己做RADIUS认证,自己拿配置的主意。

在之前的抓包过程中发现,RADIUS认证用了CHAP,所以没法通过简单重放来获得配置了。

RADIUS-Access-Request

但也就是说,BB里肯定存了一个预共享密钥来做CHAP认证,所以……

I AM THE LAW

事实证明这个方法也是可行的,可以自己从认证服务器拿到隧道信息。不过目前看起来IP应该是不会变,这个就当一个后备的手段吧。