这些年来我有一个问题在我看来一直没有被很好地解决:我的家庭内网中有很多的设备,不少设备还跑着不同的服务,应该如何设置这些设备的域名解析?
- 直接使用 IP 地址是挺讨厌的;
- 把 IP 地址和设备名添加到
/etc/hosts
感觉回到了远古还没有 DNS 的时代; - 如果自己拥有一个购买的域名的话,可以直接配置即可全网生效。比如域名为 example.com,群晖的 IP 地址为
192.168.0.167
。 那么只需要在域名管理处添加一条 A 记录即可:rpi.example.com -> 192.168.0.167
。 不过我觉得这样挺麻烦的,一来是不方便维护,二来是名字比较长、三来是涉及到配置同步。 - 另有一个我挺疑惑的点是,为什么大多数路由器都支持像是: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。
➜ ~ ssh [email protected] -p 22
[email protected]'s password:
admin@TUF-AX3000-6128:/tmp/home/root# uname -a
Linux TUF-AX3000-6128 4.1.52 #2 SMP PREEMPT Mon Oct 26 10:28:59 CST 2020 armv7l Merlin_Koolshare_TUF-AX3000
系统概览
对这个输出有几个关注点:
- 登录上去的 home 目录居然在 /tmp 目录下?
- 这是一个 4.1.52 版本的 Linux 内核;
- 这是一块 armv7l 的 构架;
内存信息:
admin@TUF-AX3000-6128:/tmp/home/root# free
total used free shared buffers cached
Mem: 512184 305020 207164 5484 15200 55596
-/+ buffers/cache: 234224 277960
Swap: 524284 0 524284
根目录:
admin@TUF-AX3000-6128:/tmp/home/root# ls -lh /
drwxrwxr-x 2 admin root 9.6K Oct 26 2020 bin
drwxr-xr-x 2 admin root 160 Oct 26 2020 cifs1
drwxr-xr-x 12 admin root 0 Jan 1 1970 cifs2
drwxr-xr-x 2 admin root 472 Jan 1 1970 data
lrwxrwxrwx 1 admin root 16 Oct 26 2020 debug -> sys/kernel/debug
drwxr-xr-x 6 admin root 3.6K Jul 15 17:02 dev
lrwxrwxrwx 1 admin root 7 Oct 26 2020 etc -> tmp/etc
lrwxrwxrwx 1 admin root 8 Oct 26 2020 home -> tmp/home
drwxr-xr-x 14 admin root 4.0K Jul 15 17:06 jffs
lrwxrwxrwx 1 admin root 16 Oct 26 2020 koolshare -> /jffs/.koolshare
drwxrwxr-x 5 admin root 5.3K Oct 26 2020 lib
drwxr-xr-x 2 admin root 160 Oct 26 2020 mmc
lrwxrwxrwx 1 admin root 7 Oct 26 2020 mnt -> tmp/mnt
drwxrwxr-x 3 admin root 864 Oct 26 2020 opt
dr-xr-xr-x 160 admin root 0 Jan 1 1970 proc
drwxr-xr-x 7 admin root 2.5K Oct 26 2020 rom
lrwxrwxrwx 1 admin root 13 Oct 26 2020 root -> tmp/home/root
drwxr-xr-x 2 admin root 11.5K Oct 26 2020 sbin
dr-xr-xr-x 12 admin root 0 Jan 1 1970 sys
drwxr-xr-x 2 admin root 160 Oct 26 2020 sysroot
drwxrwxrwx 21 admin root 1.5K Jul 15 17:06 tmp
drwxr-xr-x 12 admin root 880 Oct 26 2020 usr
drwxrwxrwt 18 admin root 500 Jul 15 17:05 var
drwxr-xr-x 16 admin root 23.1K Oct 26 2020 www
居然 etc
,home
,opt
,var
,root
这类常用目录都被挂在了 /tmp
下,我猜是因为这样可以做到重启后恢复这些临时数据。
再通过 df
及 mount
看到了根目录下有一个名为 jffs
的持久存储:
admin@TUF-AX3000-6128:/tmp/home/root# df -h
Filesystem Size Used Available Use% Mounted on
ubi:rootfs_ubifs 78.3M 68.6M 9.7M 88% /
devtmpfs 250.0M 0 250.0M 0% /dev
tmpfs 250.1M 396.0K 249.7M 0% /var
tmpfs 250.1M 4.8M 245.3M 2% /tmp/mnt
ubi1:data 4.5M 64.0K 4.2M 1% /data
tmpfs 250.1M 4.8M 245.3M 2% /tmp/mnt
tmpfs 250.1M 4.8M 245.3M 2% /tmp
/dev/sda1 28.2G 616.8M 26.2G 2% /tmp/mnt/sda1
/dev/sda1 28.2G 616.8M 26.2G 2% /jffs
/dev/mtdblock9 47.0M 29.4M 17.6M 63% /cifs2
admin@TUF-AX3000-6128:/tmp/home/root# mount
ubi:rootfs_ubifs on / type ubifs (ro,relatime)
devtmpfs on /dev type devtmpfs (rw,relatime,size=255988k,nr_inodes=63997,mode=755)
proc on /proc type proc (rw,relatime)
tmpfs on /var type tmpfs (rw,relatime)
tmpfs on /tmp/mnt type tmpfs (rw,relatime,size=16k,mode=755)
sysfs on /sys type sysfs (rw,relatime)
debugfs on /sys/kernel/debug type debugfs (rw,relatime)
devpts on /dev/pts type devpts (rw,relatime,mode=600)
ubi1:data on /data type ubifs (rw,relatime)
tmpfs on /tmp/mnt type tmpfs (rw,relatime,size=16k,mode=755)
tmpfs on /tmp type tmpfs (rw,relatime)
/dev/sda1 on /tmp/mnt/sda1 type ext4 (rw,nodev,relatime,data=ordered)
/dev/sda1 on /jffs type ext4 (rw,nodev,relatime,data=ordered)
/dev/mtdblock9 on /cifs2 type jffs2 (rw,noatime)
域名解析
Busybox 的 netstat
不支持 -p
参数使得我不能知道是谁监控了 53 号端口,但是通过 grep 我找到了路由器的 DNS 服务是 dnsmasq 提供的。
admin@TUF-AX3000-6128:/tmp/home/root# netstat -ntl | grep :53
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN
tcp 0 0 192.168.0.1:53 0.0.0.0:* LISTEN
tcp 0 0 ::1:53 :::* LISTEN
tcp 0 0 2409:8a55:3c82:9ea0::1:53 :::* LISTEN
tcp 0 0 fe80::7e10:c9ff:fe14:6128:53 :::* LISTEN
admin@TUF-AX3000-6128:/tmp/home/root# ps | grep -i dns
6631 nobody 2380 S dnsmasq --log-async
11136 admin 3224 S grep -i dns
以下是 dnsmasq 的配置文件:
admin@TUF-AX3000-6128:/tmp/home/root# cat /etc/dnsmasq.conf
pid-file=/var/run/dnsmasq.pid
user=nobody
bind-dynamic
interface=br0
interface=pptp*
no-dhcp-interface=pptp*
no-poll
no-negcache
cache-size=1500
min-port=4096
dhcp-range=lan,192.168.0.2,192.168.0.254,255.255.255.0,86400s
dhcp-option=lan,3,192.168.0.1
dhcp-option=lan,252,"\n"
ra-param=br0,10,600
enable-ra
quiet-ra
dhcp-range=lan,::,constructor:br0,ra-stateless,64,600
dhcp-option=lan,option6:23,[::]
dhcp-authoritative
script-arp
conf-dir=/jffs/configs/dnsmasq.d
no-resolv
server=127.0.0.1#23453
由于配置文件中没有 no-hosts
语句,所以其是会解析 /etc/hosts
文件的。 所以我直接到 /etc/hosts
文件中测试加入了以下几行(后面一行):
admin@TUF-AX3000-6128:/tmp/home/root# cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.0.1 TUF-AX3000-6128. TUF-AX3000-6128 TUF-AX3000-6128.local
192.168.0.1 TUF-AX3000-6128.local
192.168.0.1 router.asus.com
192.168.0.1 www.asusnetwork.net
192.168.0.1 www.asusrouter.com
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
2409:8a55:3c82:9ea0::1 TUF-AX3000-6128. TUF-AX3000-6128
2409:8a55:3c82:9ea0::1 TUF-AX3000-6128.local
192.168.0.243 dsm2.hideonheart.top
然后发信号让 dnsmasq 重新加载配置:
admin@TUF-AX3000-6128:/tmp/home/root# ps | grep [d]ns
6631 nobody 2380 S dnsmasq --log-async
admin@TUF-AX3000-6128:/tmp/home/root# kill -SIGHUP 6631
然后访问我的nas设备,居然都成功了(重启 dnsmasq 之前是不成功的)!说明都生效了
配置的持久化
因为 /etc/
是被挂载到 /tmp
下的,那么 /etc/dnsmasq.conf
配置文件在重启后肯定就没了。
这里添加到 /jffs/configs/hosts
文件中即可,然后重启dnsmasq
admin@TUF-AX3000-6128:/tmp/home/root# vi /jffs/configs/hosts
admin@TUF-AX3000-6128:/tmp/home/root# service restart_dnsmasq
Done.
admin@TUF-AX3000-6128:/tmp/home/root# cat /etc/hosts
192.168.0.167 hideonheart.top
192.168.0.167 gpt.hideonheart.top
192.168.0.167 dsm.hideonheart.top
192.168.0.243 dsm2.hideonheart.top
192.168.0.243 img.hideonheart.top
192.168.0.243 mysql.hideonheart.top
192.168.0.167 memos.hideonheart.top
192.168.0.243 harbor.hideonheart.top
192.168.0.243 jenkins.hideonheart.top
192.168.0.167 bing.hideonheart.top
都加载到了,重启一切ok
评论区