原来是通过路由器做端口映射,这样就可以从其他地方访问家里的home assistant和nas,昨天想到干脆把那台一直开机的Ubuntu机器直接DMZ到外网,然后设置UFW和fail2ban,没想到原来好好的天猫精灵就此出了问题。
在端口映射的情况下,天猫精灵通过oAuth2验证访问家里的home assistant,就可以实现语音控制家里的电器;在DMZ+主机ufw+fail2ban的情况下,天猫精灵死活没办法通过oAuth2验证。
真是奇怪得很,映射下的端口我通过ufw全部开放,没有任何差别,怎么会有这个问题,会不会是ufw有什么问题?
试了另外一个防火墙csf,也是存在同样的问题,开启csf之后精灵oAuth2就没法工作。再仔细想了想,可能是因为home assistant是通过容器安装(docker),docker完全honor宿主机的防火墙策略,导致oAuth2没法工作。
于是开启home assistant的debug模式,再次测试精灵,日志显示http/https有问题,想到我并没有开启80/443的端口(开了也没法外部访问,电信根本就不开这两个端口),于是就让ufw开启80/443试试看,没想到一打开这两个端口,oAuth2就开始工作了。