本帖最后由 XCray 于 2021-10-17 09:20 编辑
前几天手贱在手机app上升级了小米AX1800固件,导致了之前配置好的玩法失效,只好手动降级重新配置,顺便总结记录一下。
以前说过,小米的路由器看着很高大上,硬件也确实不差,但软件做的实在太垃圾,IPv6几乎形同虚设(之前发过帖子)。如果有合适的可以直接运行原生OpenWRT的更为理想。
0. 效果/目标
- HA和群晖的远程接入,基于IPv6
- 对WAN口状态进行监控,在警戒状态下异常断网时自动发短信告警
- HA中增加路由器CPU温度传感器
本文所述方法/思路适用于小米AX3600/AX1800/AX5/AC2100等型号,其实大部分基于OpenWRT的路由器都可以参考。
1. 恢复固件版本1.0.378,以便开启SSH,确认取消app侧的固件自动升级。最新版1.0.385已修补开启ssh所用的漏洞。
2. 开启ssh。参考https://www.right.com.cn/forum/f ... ypeid%26typeid%3D44 。
在浏览器地址栏输入:
http://x.x.x.1/cgi-bin/luci/;stok=<STOK>/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=xcray&ssid=-h%3B%20nvram%20set%20ssh_en%3D1%3B%20nvram%20commit%3B%20sed%20-i%20's%2Fchannel%3D.*%2Fchannel%3D%5C%22debug%5C%22%2Fg'%20%2Fetc%2Finit.d%2Fdropbear%3B%20%2Fetc%2Finit.d%2Fdropbear%20start%3B
复制代码
回车即可
3. 计算root密码,或者干脆直接修改root密码:
http://x.x.x.1/cgi-bin/luci/;stok=<STOK>/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=xcray&ssid=-h%3B%20echo%20-e%20'admin%5Cnadmin'%20%7C%20passwd%20root%3B
复制代码
4. 确认开启IPv6并设置为Native模式,然后修改防火墙规则,以实现外网接入:
ssh登录后修改/etc/config/firewall,打开特定端口的转发(反对简单粗暴的关闭ipv6防火墙的做法,不安全):
config rule
option src 'wan'
option family 'ipv6'
option target 'ACCEPT'
option dest 'lan'
list proto 'tcp'
option name 'Allow-5080'
option dest_port '5080'
复制代码
示例端口号根据需要修改,可以开放多个端口。
然后,/etc/init.d/firewall reload一下,就可以从外网访问内网主机的相应端口了。(最近发现移动宽带已经不行了,即使把ipv6防火墙都关了也无法实现外网访问,可气! )。
20210414修正:其实不是宽带的问题,还是自己学艺不精,在群晖技术支持的帮助下解决了——可能是群晖版本升级修改了默认值,导致ipv6默认网关丢失,从而导致ddns无法获取ipv6地址以及无法从外网访问的现象。
5. wan口状态监控
5.1 在HA配置中增加wan口状态传感器:
binary_sensor:
- platform: mqtt
state_topic: "openwrt/pppoe-wan"
json_attributes_topic: "openwrt/wan-ip"
name: internet
device_class: connectivity
复制代码
5.2 在路由器/etc/hotplug.d/iface目录下增加一个文件,比如99-wan_mon,内容如下:
#!/bin/sh
MQTTSVR=x.x.x.x
date >> /tmp/hotp.log
[ "$INTERFACE" = "wan_6" ] && [ "$ACTION" = "ifupdate" ] && (
wanip=$(ifconfig pppoe-wan | awk '/inet addr/{print substr($2,6)}')
lan6ip=$(ifconfig br-lan | grep Scope:Global | awk '{print $3}' | cut -d'/' -f1)
mosquitto_pub -h $MQTTSVR -t openwrt/wan-ip -m "{"wan-ip":""$wanip"","lan-ip6":""$lan6ip""}" -r
mosquitto_pub -h $MQTTSVR -t openwrt/pppoe-wan -m ON -r
echo "ipv6 updated: $wan6ip" >>/tmp/hotp.log )
[ "$INTERFACE" = "wan" ] || exit 0
[ "$ACTION" = "ifdown" ] && ( mosquitto_pub -h $MQTTSVR -t openwrt/pppoe-wan -m OFF -r;echo 'wan down'>>/tmp/hotp.log )
[ "$ACTION" = "ifup" ] && ( mosquitto_pub -h $MQTTSVR -t openwrt/pppoe-wan -m ON -r;echo 'wan up'>>/tmp/hotp.log )
[ "$ACTION" = "ifupdate" ] && (
wanip=$(ifconfig pppoe-wan | awk '/inet addr/{print substr($2,6)}')
lan6ip=$(ifconfig br-lan | grep Scope:Global | awk '{print $3}' | cut -d'/' -f1)
mosquitto_pub -h $MQTTSVR -t openwrt/wan-ip -m "{"wan-ip":""$wanip"","lan-ip6":""$lan6ip""}" -r
mosquitto_pub -h $MQTTSVR -t openwrt/pppoe-wan -m ON -r
echo "ip updated: $wanip" >>/tmp/hotp.log )
复制代码
-r设置为保留消息,便于ha重启后状态的保持。
别忘了修改MQTTSVR的IP地址。然后给这个文件增加可执行权限。
原理:
OpenWRT的Hotplug机制,在发生网络接口变动事件后,会自动执行/etc/hotplug.d/iface目录下的所有可执行文件。
当然,还有其他类型的事件,比如USB等
6. 路由器CPU温度监控
6.1 在HA中增加相应传感器:
sensor:
- platform: mqtt
name: rtTemp
icon: 'mdi:thermometer'
state_topic: 'openwrt/temp'
device_class: temperature
unit_of_measurement: °C
复制代码
6.2 在路由器/etc/crontabs/root中增加一行:
*/5 * * * * mosquitto_pub -h x.x.x.x -t openwrt/temp -m `cat /sys/class/thermal/thermal_zone0/temp`
复制代码
意为每5分钟读取一次CPU温度并通过mqtt发布
7. 其他
实现远程接入,还有一个必不可少的要素就是DDNS,我是利用群晖实现的。
近期发现不行了,群晖最新版本下无法自动获取本机ipv6地址,也就无法自动刷新ddns,等群晖技术支持的答复。。。(已解决,见前文)
恢复出厂设置后即使用原来正确的备份恢复,IPv6也仍然会保持关闭状态(即没有被正确备份),需手动重新开启。