目 录CONTENT

文章目录

华硕路由器及局域网域名解析

hideonheart
2023-07-15 / 0 评论 / 0 点赞 / 182 阅读 / 0 字

这些年来我有一个问题在我看来一直没有被很好地解决:我的家庭内网中有很多的设备,不少设备还跑着不同的服务,应该如何设置这些设备的域名解析?

  • 直接使用 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”。这是什么?难道是能直接登上路由器的系统?如下图所示:

image-20230715165838566

我本来还是不太确定的,因为华硕的配置页面(比如: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

居然 etchomeoptvarroot 这类常用目录都被挂在了 /tmp 下,我猜是因为这样可以做到重启后恢复这些临时数据。

再通过 dfmount 看到了根目录下有一个名为 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

参考:https://blog.twofei.com/866/

编辑

0

评论区