今年二月份的时候在朋友的多次安利下终于下单买了个华硕的 AC68U 路由器(挺古董了),替换了早在 2016 年花几十块钱购买的 TP-LINK 路由器。 TP-LINK 的 UI 做得还是算漂亮、现代的,不过,由于网口带宽只有 100M,内网数据传输、看看电影什么的,有时竟然有点卡,所以还是决定更换设备。
这些年来我有一个问题在我看来一直没有被很好地解决:我的家庭内网中有很多的设备,不少设备还跑着不同的服务,应该如何设置这些设备的域名解析?
- 直接使用 IP 地址是挺讨厌的;
- 把 IP 地址和设备名添加到
/etc/hosts
感觉回到了远古还没有 DNS 的时代; - 如果自己拥有一个购买的域名的话,可以直接配置即可全网生效。比如域名为 example.com,树莓派的 IP 地址为
192.168.1.6
。 那么只需要在域名管理处添加一条 A 记录即可:rpi.example.com -> 192.168.1.6
。 不过我觉得这样挺麻烦的,一来是不方便维护,二来是名字比较长、三来是涉及到配置同步。 - 另有一个我挺疑惑的点是,为什么大多数路由器都支持像是:MAC与IP地址绑定、端口映射等功能,却没有一种路由器支持手动设置域名解析? 即便我们内网的设备连上路由器后通过 DHCP 拿到了 IP 地址、网关 和 DNS 地址,后两者都是路由器本身。 我尝试直接 ping 我的设备名基本都不通(除了 Mac 外,因为它支持 mDNS),这就让我很崩溃。
发现 SSH 服务
今天在折腾 AC68U 的时候,居然发现在“高级设置”、“系统管理”、“系统设置”、“服务” 这里看到一项 “启用 SSH”。这是什么?难道是能直接登上路由器的系统?如下图所示:
我本来还是不太确定的,因为华硕的配置页面(比如:http://192.168.1.1/Advanced_System_Content.asp)是以 “.asp” 结尾的,话说这不是 Windows 上的服务吗?
我一直以为华硕路由器是个嵌入式类的 Windows 系统。直到我 ssh -p 65534 192.168.1.1
,它居然提示我输入密码!!!
在使用网页上路由器的管理员用户名和密码登录上去以后,我震惊了!确认这是个 Linux。
1 2 3 4 |
|
系统概览
对这个输出有几个关注点:
- 登录上去的 home 目录居然在 /tmp 目录下?
- 这是一个 2.6.36 版本的 Linux 内核;
- 这是一块 armv7l 的 构架;
- 操作系统是 ASUSWRT(开源的,在这里的操作系统中选择“其它”可以下载源代码);
内存信息:
1 2 3 4 5 |
|
根目录:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
居然 etc
,home
,opt
,var
,root
这类常用目录都被挂在了 /tmp
下,我猜是因为这样可以做到重启后恢复这些临时数据。
再通过 df
及 mount
看到了根目录下有一个名为 jffs
的持久存储:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
域名解析
Busybox 的 netstat
不支持 -p
参数使得我不能知道是谁监控了 53 号端口,但是通过 grep 我找到了路由器的 DNS 服务是 dnsmasq 提供的。
1 2 3 4 5 6 7 |
|
以下是 dnsmasq 的配置文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
由于配置文件中没有 no-hosts
语句,所以其是会解析 /etc/hosts
文件的。
所以我直接到 /etc/hosts
文件中测试加入了以下几行(后面几行):
1 2 3 4 5 6 7 8 9 |
|
然后发信号让 dnsmasq 重新加载配置:
1 2 3 4 |
|
然后在我的手动上尝试通过 raspberrypi
和 alpine
连接在两个树莓派上的服务,居然都成功了(重启 dnsmasq 之前是不成功的)!说明都生效了,爽!
配置的持久化
因为 /etc/
是被挂载到 /tmp
下的,那么 /etc/dnsmasq.conf
配置文件在重启后肯定就没了。
我在网上搜索了相关问题,发现没有好办法。早期的时候,路由器在启动的时候会自动加载一些 /jffs
目录内的用户脚本,后来这些功能被干掉了,不知为何。
鉴于路由器重启是非常低频的操作,我暂时没有折腾了。我只是写了个脚本自动同步这个配置到路由器。