电信升级之后换了光猫,加了一个FTTR从设备,光猫带了自组网功能。为了跟之前的网络兼容,需要让新的光猫拨号,路由器作为5口交换机和AC控制3个AP。 也就是说,把路由器的WAN口改成LAN口使用。打开TP-LINK的后台发现“企业级”的路由器居然不能关闭路由功能,也不能修改端口定义。查阅资料发现, 这个路由器的固件是基于OpenWRT的,可以通过修改配置文件来实现。:signal_strength:

尝试SSH登录

打开调试开关后,发现ssh端口不是默认的port 22,经查发现是port 33400。然而,最新固件的root密码无法使用论坛里的方法破解。 查阅资料时发现SSH端口是通过提取配置文件找到的。且资料显示通过SSH直接修改系统文件的尝试在重启后都会被复原,或是使用了只读文件系统。 因此,怀疑能否通过修改配置文件的方式修改接口定义。

导出配置文件

  • 登录路由器后台
  • 点击“系统工具”-“本机管理”
  • 定位到“备份与导入配置”-“备份配置信息”
  • 点击“备份”按钮,下载配置文件

配置文件名类似:config-YYYY-MM-DD-HH_MM-SS.bin,以下记为config.bin

解密配置文件

根据资料尝试使用7z,tar等工具解压失败,资料提到新固件使用了DES加密,但找得到的密钥均无法解压。发现一篇博客提到可以用qemu用户模式运行固件里的二进制文件,故配置了Kali虚拟机环境。

  • 从TP-Link官网下载路由器同版本的固件包,解压bin文件,以下记为firmware.bin
    root-[.]-# sudo apt install qemu-user-static  # 安装qemu
    root-[.]-# binwalk -e firmware.bin  # 解压固件,得到名为_firmware.bin.extracted的文件夹
    root-[.]-# cd ./_firmware.bin.extracted/squashfs-root  # 进入固件文件系统
    root-[./_firmware.bin.extracted/squashfs-root]-# sudo cp /usr/bin/qemu-mipsel-static .  # 复制qemu二进制文件,该路由器cpu为小端序mips架构
    root-[./_firmware.bin.extracted/squashfs-root]-# sudo chroot . qemu-mipsel-static /bin/sh  # 进入路由器的sh环境
    /-# des_crypt -d -i config.bin -o config  # 解密bin文件得到一个gzip压缩包
    
  • 解压config文件,得到结构如下的配置文件目录:
    • tmp
      • cfg_save
        • backconf_tmp
          • backup
            • non_uci.tar.gz
            • uc.conf
            • uc_conf.tar.gz
          • md5_sum_conf
          • product_name_conf
          • tmp_conf.tar.gz

修改配置文件

修改vlan

在OpenWRT中,要修改接口配置,需要修改交换机的VLAN,把原本的WAN口放到与LAN口相同的VLAN中。 解压所有上述目录中的*.tar.gz文件,用vlan关键词检索整个配置目录,发现解压后的uc.conf.tar.gz文件中的/tmp/backup/un_conf/vlan中有一系列VLAN配置,原始配置以及修改后的如下:

config switch 'switch0'

config vlan '4084'
	option name 'Guest_Switch1'
	option note 'Guest_Switch1'
	option reference '1'
	list tagged_ports '1'
	list tagged_ports '2'
	list tagged_ports '3'
	list tagged_ports '4'

config vlan '1'
	option name 'LAN_Switch1'
	option note 'LAN_Switch1'
	option reference '1'
	list untagged_ports '1'
	list untagged_ports '2'
	list untagged_ports '3'
	list untagged_ports '4'

config vlan '4093'
	option name 'LAN_Switch1'
	option note 'LAN_Switch1'
	option reference '1'
	option status 'disable'

config vlan '10'
	option name 'WAN1_Switch1'
	option note 'WAN1_Switch1'
	list untagged_ports '5'
	option reference '1'
config switch 'switch0'

config vlan '4084'
	option name 'Guest_Switch1'
	option note 'Guest_Switch1'
	option reference '1'
	list tagged_ports '1'
	list tagged_ports '2'
	list tagged_ports '3'
	list tagged_ports '4'

config vlan '1'
	option name 'LAN_Switch1'
	option note 'LAN_Switch1'
	option reference '1'
	list untagged_ports '1'
	list untagged_ports '2'
	list untagged_ports '3'
	list untagged_ports '4'
	list untagged_ports '5'

config vlan '4093'
	option name 'LAN_Switch1'
	option note 'LAN_Switch1'
	option reference '1'
	option status 'disable'

config vlan '10'
	option name 'WAN1_Switch1'
	option note 'WAN1_Switch1'
	option reference '1'

可以看到WAN口为port 5,位于VLAN 10;LAN口为port 1-4,位于VLAN 1。将list untagged_ports '5'移动到config vlan '1'下即可。 其中,vlan 4084应该是访客Wi-Fi所处的VLAN,因为我没有使用相关功能,故没有修改。

除了修改VLAN的配置,还需要修改端口配置,及对应的pvid,搜索发现/tmp/backup/un_conf/ports文件中有相关配置,原始配置和修改后的如下:

config mirror 'mirror_1'
	option enable 'off'
	option mode 'both'
	option mirror_port '1'
	list mirrored_port '5'

config port 'port_1'
	option flowcontrol_enable 'on'
	option cfg_speed 'auto'
	option cfg_duplex 'auto'
	option ratelimit_ingress_enable 'off'
	option ratelimit_ingress_mode 'all'
	option ratelimit_ingress '1000'
	option ratelimit_egress_enable 'off'
	option ratelimit_egress '1000'
	option pvid '1'

config port 'port_2'
	option flowcontrol_enable 'on'
	option cfg_speed 'auto'
	option cfg_duplex 'auto'
	option ratelimit_ingress_enable 'off'
	option ratelimit_ingress_mode 'all'
	option ratelimit_ingress '1000'
	option ratelimit_egress_enable 'off'
	option ratelimit_egress '1000'
	option pvid '1'

config port 'port_3'
	option flowcontrol_enable 'on'
	option cfg_speed 'auto'
	option cfg_duplex 'auto'
	option ratelimit_ingress_enable 'off'
	option ratelimit_ingress_mode 'all'
	option ratelimit_ingress '1000'
	option ratelimit_egress_enable 'off'
	option ratelimit_egress '1000'
	option pvid '1'

config port 'port_4'
	option flowcontrol_enable 'on'
	option cfg_speed 'auto'
	option cfg_duplex 'auto'
	option ratelimit_ingress_enable 'off'
	option ratelimit_ingress_mode 'all'
	option ratelimit_ingress '1000'
	option ratelimit_egress_enable 'off'
	option ratelimit_egress '1000'
	option pvid '1'

config port 'port_5'
	option flowcontrol_enable 'off'
	option ratelimit_ingress_enable 'off'
	option ratelimit_ingress_mode 'all'
	option ratelimit_ingress '1000'
	option ratelimit_egress_enable 'off'
	option ratelimit_egress '1000'
	option pvid '10'
	option cfg_speed '1000M'
	option cfg_duplex 'Full'
config mirror 'mirror_1'
	option enable 'off'
	option mode 'both'
	option mirror_port '1'
	list mirrored_port '5'

config port 'port_1'
	option flowcontrol_enable 'on'
	option cfg_speed 'auto'
	option cfg_duplex 'auto'
	option ratelimit_ingress_enable 'off'
	option ratelimit_ingress_mode 'all'
	option ratelimit_ingress '1000'
	option ratelimit_egress_enable 'off'
	option ratelimit_egress '1000'
	option pvid '1'

config port 'port_2'
	option flowcontrol_enable 'on'
	option cfg_speed 'auto'
	option cfg_duplex 'auto'
	option ratelimit_ingress_enable 'off'
	option ratelimit_ingress_mode 'all'
	option ratelimit_ingress '1000'
	option ratelimit_egress_enable 'off'
	option ratelimit_egress '1000'
	option pvid '1'

config port 'port_3'
	option flowcontrol_enable 'on'
	option cfg_speed 'auto'
	option cfg_duplex 'auto'
	option ratelimit_ingress_enable 'off'
	option ratelimit_ingress_mode 'all'
	option ratelimit_ingress '1000'
	option ratelimit_egress_enable 'off'
	option ratelimit_egress '1000'
	option pvid '1'

config port 'port_4'
	option flowcontrol_enable 'on'
	option cfg_speed 'auto'
	option cfg_duplex 'auto'
	option ratelimit_ingress_enable 'off'
	option ratelimit_ingress_mode 'all'
	option ratelimit_ingress '1000'
	option ratelimit_egress_enable 'off'
	option ratelimit_egress '1000'
	option pvid '1'

config port 'port_5'
	option flowcontrol_enable 'off'
	option ratelimit_ingress_enable 'off'
	option ratelimit_ingress_mode 'all'
	option ratelimit_ingress '1000'
	option ratelimit_egress_enable 'off'
	option ratelimit_egress '1000'
	option pvid '1'
	option cfg_speed '1000M'
	option cfg_duplex 'Full'

将port 5的pvid改为1即可。

制作配置文件

重新压缩uc.conf.tar.gz

root-[./config/tmp/cfg_save/backconf_tmp/backup]-# tar -czvf uc.conf.tar.gz tmp/backup/uc_conf/
root-[./config/tmp/cfg_save/backconf_tmp/backup]-# cd ../../../../
root-[./config]-# tar -czvf tmp_conf.tar.gz tmp/cfg_save/backconf_tmp/backup
root-[./config]-# md5sum tmp_conf.tar.gz

将算出的md5替换掉./config/tmp/cfg_save/backconf_tmp/md5_sum_conf中的md5值。

root-[./config]-# tar -zcvf config-new tmp/cfg_save/backconf_tmp  # 重新压缩config文件
/-# des_crypt -e -i config-new -o config-new.bin  # 加密bin文件

导入配置文件

在路由器后台导入配置文件,重启路由器,即可看到WAN口已经变成了LAN口。

需要关闭DHCP,打开IPv6桥模式设置,让光猫分配IP地址。

由于TP-LINK固件的一些原因,导入配置文件后,路由器的后台会出现一些问题,目前发现的如下:

  • 运行状态-接口信息
    • 只能显示4个LAN口的连接状态,WAN口无法显示
  • 终端管理
    • 所有的AP会显示为无线接入,且看不到其他接入设备(可以在光猫后台看到)
  • 基本设置
    • WAN设置 里的所有内容均失效
    • LAN设置 的 接口设置 需要自己设置一个IP地址
    • LAN设置 的 客户端列表 无法显示(可以在光猫后台看到)
  • 系统工具
    • 时间设置 无法从网络获取时间,猜测只能通过WAN口访问网络

后记

几天之后的早上突然断网了,我看到路由器port 5和光猫对应端口的指示灯都没亮,但是WiFi是正常的,很奇怪。 进路由器后台之后发现,日志里面全是

wan1_eth:DHCP发送DHCP-DISCOVER超时.

每隔12秒一条,看来仅仅修改了vlan和port还是不够的,固件里还有一些代码依然认为port 5是wan1口,例如这里的WAN IP获取。 留意到WAN设置里的连接方式是动态IP,且获取到的IP是0.0.0.0,猜测可能是此处问题。 把连接方式修改为静态IP,地址设置为一个与LAN网段不同的地址即可。 观察日志发现一条:

wan1_eth:DHCP释放IP地址0.0.0.0成功.

随后就没有再出现DHCP超时的日志了,也恢复了正常的网络连接。

后面还有问题接着观察。