TP-LINK TL-R470GP-AC WAN口改LAN口
电信升级之后换了光猫,加了一个FTTR从设备,光猫带了自组网功能。为了跟之前的网络兼容,需要让新的光猫拨号,路由器作为5口交换机和AC控制3个AP。 也就是说,把路由器的WAN口改成LAN口使用。打开TP-LINK的后台发现“企业级”的路由器居然不能关闭路由功能,也不能修改端口定义。查阅资料发现, 这个路由器的固件是基于OpenWRT的,可以通过修改配置文件来实现。
尝试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
- backup
- backconf_tmp
- cfg_save
- tmp
修改配置文件
修改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超时的日志了,也恢复了正常的网络连接。
后面还有问题接着观察。