dnsmasq 按需分配分配网关与 DNS(旁路由)

一个主路由下有多个旁路由,如何在主路由上针对不同的连接设备,指定其使用的旁路由是哪一个?

应用场景

由于家里是用旁路由的模式来实现按需科学上网的。

一般来说,在特定设备有「看看外面」的需求时,只需要在对应设备上将网关与 DNS 都手动设置为旁路由的 IP 就行了。

BUT,

家里的雷鸟电视,买的时候看它是「极客的新选择」,但是到手却发现这家伙的设置里,连静态 IP 都没法设置,更别提指定网关和 DNS 了。

官方论坛看大家在 21 年就在吐槽了,而看官方的态度,这个 Android 本身就自带的功能,他们是不准备支持了。

那么,

我们就绕开 client 端的设置,从 server 端入手吧,通过在主路由配置 dnsmasq 来实现按设备分配网关和 DNS

Dnsmasq 为小型网络提供网络基础设施:DNS、DHCP、Router Advertisement 和 Network boot。它设计轻巧,资源占用少,适用于资源有限的路由器和防火墙。它还被广泛用于在智能手机和便携式热点上,并支持虚拟化框架中的虚拟网络。支持的平台包括 Linux ( 带有 glibc 和 uclibc ) 、Android、*BSD 和 Mac OS X. Dnsmasq 包含在大多数 Linux 发行版以及 FreeBSD、OpenBSD 和 NetBSD 的端口系统中。Dnsmasq 提供全面的 IPv6 支持。

基础要求

  1. 既然是配置旁路由为网关,因此必然是要求旁路由和主路由处于同一个网段(例如处于 192.168.1.0/24 中的两个地址,可以互相访问)。
  2. 主路由必须作为 DHCP Server(lan 接口启用 DHCP。在小米系的官方固件以及 OpenWRT 中,该服务是默认都是由 Dnsmasq 实现)。

设置方法

以下以 红米 AX6000 路由器版本为例,路由器固件为官方固件,版本为 1.0.48。

首先需要通过 ssh 进入路由器,还没解开 ssh 的话自行网上搜索解决吧。

1、打开 DHCP 配置

1
vim /etc/config/dhcp

2、按 MAC 地址配置静态 ip 并设置 tag,并对指定 tag 设置网关与 DNS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 主路由网关 192.168.1.1,旁路由网关 192.168.1.2
# 主路由 DNS 192.168.1.1,旁路由 DNS 192.168.1.2

config dhcp 'lan'
list dhcp_option '3,192.168.1.1'
list dhcp_option '6,192.168.1.1'

config host
option ip '192.168.1.100'
option mac 'aa:bb:cc:dd:ee:ff'
option tag 'bypass'

config tag 'bypass'
option dhcp_option '3,192.168.1.2 6,192.168.1.2'
option force '1'

3,192.168.xxx.xxx 这前面的 3 是自定义网关,6 是自定义 DNS

3、重启 DHCP 服务

1
/etc/init.d/dnsmasq restart

如果出现下面的报错,不用管

cp: can’t stat ‘/etc/dnsmasq.d/*’: No such file or directory
sh: out of range

4、验证是否生效

可以直接在终端上查看网关与 DNS 的配置是否正确了。

也可以通过确认 dnsmasq 的配置是否生效,如下

先用 ps 命令查看一下当前 dnsmasq 正在使用的配置文件路径,这里的就是 /var/etc/dnsmasq.conf.cfg01411c

1
/usr/sbin/dnsmasq --user=root -C /var/etc/dnsmasq.conf.cfg01411c -k -x /var/run/dnsmasq/dnsmasq.cfg01411c.pid

查看对应的配置

1
cat /var/etc/dnsmasq.conf.cfg01411c

可以看到刚刚我们在 /etc/config/dhcp 里配置的已经生成在这个配置里

1
2
3
4
5
6
7
dhcp-option=lan,3,192.168.1.1
dhcp-option=lan,6,192.168.1.1

dhcp-host=aa: bb: cc: dd: ee: ff,set: bypass,192.168.1.100

dhcp-option-force=tag: bypass,3,192.168.1.2
dhcp-option-force=tag: bypass,6,192.168.1.2

补充:

也可以直接改 /etc/dnsmasq.conf 配置文件,但是红米 AX6000 重启会重置该配置文件(倒也可以解决),大家注意就好了。

配置示例:

根据网址段分配不同网关与 DNS

1
2
3
dhcp-range=set: bypass,192.168.1.100,192.168.1.200
dhcp-option=tag: bypass,3,192.168.1.2
dhcp-option=tag: bypass,6,192.168.1.2

参考

dnsmasq 配置文件手册:https://openwrt.org/zh/docs/guide-user/base-system/dhcp

DHCP Option 常见取值及含义

Options 序号 Options 作用
1 设置子网掩码选项。
3 设置网关地址选项。
6 设置 DNS 服务器地址选项。
12 设置域名选项。
15 设置域名后缀选项。
33 设置静态路由选项。该选项中包含一组有分类静态路由(即目的地址的掩码固定为自然掩码,不能划分子网),客户端收到该选项后,将在路由表中添加这些静态路由。如果存在 Option121,则忽略该选项。
44 设置 NetBios 服务器选项。
46 设置 NetBios 节点类型选项。
50 设置请求 IP 选项。
51 设置 IP 地址租约时间选项。
52 设置 Option 附加选项。
53 设置 DHCP 消息类型。
54 设置服务器标识。
55 设置请求参数列表选项。客户端利用该选项指明需要从服务器获取哪些网络配置参数。该选项内容为客户端请求的参数对应的选项值。
58 设置续约 T1 时间,一般是租期时间的 50%。
59 设置续约 T2 时间。一般是租期时间的 87.5%。
60 设置厂商分类信息选项,用于标识 DHCP 客户端的类型和配置。
61 设置客户端标识选项。
66 设置 TFTP 服务器名选项,用来指定为客户端分配的 TFTP 服务器的域名。
67 设置启动文件名选项,用来指定为客户端分配的启动文件名。
77 设置用户类型标识。
121 设置无分类路由选项。该选项中包含一组无分类静态路由(即目的地址的掩码为任意值,可以通过掩码来划分子网),客户端收到该选项后,将在路由表中添加这些静态路由。
148 EasyDeploy 中 Commander 的 IP 地址。
149 SFTP 和 FTPS 服务器的 IP 地址。
150 设置 TFTP 服务器地址选项,指定为客户端分配的 TFTP 服务器的地址。

dnsmasq 按需分配分配网关与 DNS(旁路由)
https://www.haoyizebo.com/posts/d461b93f/
作者
一博
发布于
2023年1月8日
许可协议