iStoreos/OpenWRT给不同IP的设备分配不同的网关、旁路由

OpenWRT默认的DHCP Server服务器是Dnsmasq,借助Dnsmasq可以实现根据网址段分配不同网关(旁路由),也可以实现根据MAC地址/IP地址分配不同网关。

iStoreOS 设置步骤

应用场景

我家里目前是使用iStoreOS作为主路由(192.168.0.1),另外nas上虚拟了一个iStoreOS作为旁路由(192.168.0.2)作为科学上网使用,你懂的。以前的做法是,在需要科学上网的设备上使用静态IP,然后网关处设置成旁路由网关(192.168.0.2),这样就能实现科学上网,但如果某些设备不支持静态IP设置,或者操作起来比较麻烦,就不太容易实现了,于是有了这个教程和记录,在DHCP端实现给不同IP的设备分配不同的网关。

具体操作如下

  1. 打开“网络”-“接口”,在“lan”后面点击编辑,在弹出的对话框选择“DHCP 服务器”-“高级设置”,其中的“DHCP 选项”增加两条“3,192.168.0.1”和“6,192.168.0.1”,其中“3,192.168.0.1”表示指派192.168.0.1 作为网关(注意3和英文逗号),“6,192.168.0.1”表示指派 192.168.100.1 作为 DNS 服务器(注意6和英文逗号)。这里的设置是其他不需要科学的设备走的是主路由的网关和DNS。PS:如果iStoreOS作为主路由,不提供科学服务,由旁路由提供科学等服务,内网部分主机需要科学,大部分主机都不需要科学,这一步忽略(因为默认网关就是主路由)。
    938279989.png|1200

104469694.png|1200

  1. 打开“网络”-“DHCP/DNS”-“标签”,在“添加”按钮左边输入“t_proxy”,点击“添加”按钮,然后也是“DHCP 选项”输入两条“3,192.168.0.2”和“6,192.168.0.2”,保存应用。这里设置的是标签为“t_proxy”的设备走的是旁路由的网关和DNS。

3018434870.png|1200

1946790070.png|1200

  1. 打开“网络”-“DHCP/DNS”-“静态地址分配”,点击“添加”(如果之前已经配置了要科学的主机,那编辑相应条目即可),输入主机名称(可以用英文大小写,数字,下划线,必填),选择要科学的主机的MAC;如果不需要固定IP,“IPv4地址”可以选择未指定;最关键的是在“标签”选项中选择“t_proxy”(如果没出现,保存下刷新页面再回来选)。然后保存应用即可。
    1837044190.png|1200

3998580133.png|1200

对于每一个需要科学的设备都要添加。内网主机重新插网线或连wifi,应该就会获取到指定的网关和DNS了。

Openwrt 设置步骤

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

应用场景

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

一般来说,在特定设备有「看看外面」的需求时,只需要在对应设备上将网关与 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 实现)。

设置方法

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

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

1、打开 DHCP 配置

vim /etc/config/dhcp

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

# 主路由网关 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 服务

/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

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

查看对应的配置

/etc/init.d/dnsmasq restart

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

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 配置文件,但是红米 AX6S 重启会重置该配置文件(倒也可以解决),大家注意就好了。

配置示例:

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

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

也可在客户端中测试,如:
image.png|1200