【原创】红米AX6路由器检测OpenWRT旁路由在线状态自动配置客户端网关及DNS

一、前言

     续上两篇文章(https://blog.youkuaiyun.com/p4server/article/details/151369740)在做完多操作安装启动引导后发现小主机的中还有可利用磁盘空间,便考虑使用有限的空间安装OpenWRT旁路由测试。希望达成的效果:

  1. 在OpenWRT旁路由开启时,特定客户端可以自动通过旁路由上网;而在旁路由(小主机)关闭或做其他系统应用时特定客户端自动通过主路由上网;
  2. 即使旁路由开启时也只有特定客户端才能获得网关及DNS配置,普通客户端直接通过主路由上网

针对以上要达成的效果,开始此次配置测试

二、测试设备及软件

主路由:红米AX6(已root),官方固件,版本1.1.14

旁路由:J4125 4G 64G小主机,千兆单网口无WIFI

旁路由软件:openwrt-24.10.3-x86-64-generic-ext4-combined-efi.img 官方固件

多台终端设备,其中部分设备需要动态上网

整体如下图(deepseek生成的将就看)

 

三、旁路由OpenWRT系统安装

 

小主机的64G SSD中已经有三个操作系统,分区情况如下:

sda1 vfat ---ESP 分区

sda2 ext4--- ubuntu系统分区

sda3 vfat --- Volumio启动分区

sda4 ext4 --- Volumio系统分区

sda5 ext4 --- Volumio_data 数据分区

sda6 ext4 ---DaphileBoot 系统分区

sda7 ext4 ---DaphileData数据分区

为了安装OpenWRT系统需要减少sda7 ext4 ---DaphileData数据分区的空间,腾出空间给OpenWRT系统

这里先启动小主机里边的ubuntu系统,用fdisk 查看openwrt-24.10.3-x86-64-generic-ext4-combined-efi.img

Device                                                  Start    End Sectors  Size Type
openwrt-24.10.3-x86-64-generic-ext4-combined-efi.img1     512  33279   32768   16M Linux filesystem
openwrt-24.10.3-x86-64-generic-ext4-combined-efi.img2   33280 246271  212992  104M Linux filesystem
openwrt-24.10.3-x86-64-generic-ext4-combined-efi.img128    34    511     478  239K BIOS boot

其中第一个是BOOT分区,第二个是系统分区,第三个是BIOS启动分区,要用GRUB引导,只需要前两个分区

这里首先要减少sda7 ext4 ---DaphileData数据分区,可使用parted、resize2fs 工具进行调整,这里调整到1.9G

然后用fdisk 建立新的分区,sda8--OpenWRT BOOT分区(16M) ,sda9--OpenWRT 系统分区(磁盘剩余空间)

用DD将两个分区分别拷入

sudo dd if=openwrt-24.10.3-x86-64-generic-ext4-combined-efi.img of=/dev/sda8 bs=512 skip=512 count=32768 status=progress

sudo dd if=openwrt-24.10.3-x86-64-generic-ext4-combined-efi.img of=/dev/sda9 bs=512 skip=33280 count=212992 status=progress

用resize2fs将所有分区空间都提供给OpenWRT 系统(也可以称之为扩容)

通过调整后可以看到分区是这样的

NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda      8:0    0  59.6G  0 disk
├─sda1   8:1    0     1G  0 part /boot/efi
├─sda2   8:2    0    49G  0 part /
├─sda3   8:3    0   171M  0 part
├─sda4   8:4    0   3.4G  0 part
├─sda5   8:5    0   185M  0 part
├─sda6   8:6    0     2G  0 part
├─sda7   8:7    0   1.9G  0 part
├─sda8   8:8    0    16M  0 part
└─sda9   8:9    0   1.9G  0 part

最后为OpenWRT配置启动

sudo nano /etc/grub.d/40_custom

添加以下内容:

menuentry 'OpenWRT' {
    insmod part_gpt
    insmod ext2
    set root='hd0,gpt8'  # 指向sda8(boot分区)
    echo 'Loading OpenWRT kernel...'
    linux /boot/vmlinuz root=/dev/sda9 rootwait console=tty0 console=ttyS0,115200n8 noinitrd
    echo 'Loading complete...'
}

保存后,执行:

sudo update-grub
sudo reboot

验证安装,启动顺序等其他调整见前期文章,这里不再赘述

OpenWRT启动后要关闭DHCP服务,IP地址为192.168.2.8,网关192.168.2.1,子网掩码和主路由保持一致255.255.255.0,删除网桥关闭IPv6并根据情况自行配置,在进行下一步前手工测试配置客户端IP地址,确保OpenWRT工作正常,打开SSH服务,设置端口地址为:2222

 

四、主路由红米AX6动态网关配置

    红米AX6路由器(主路由已ROOT并开启SSH)上实现根据旁路由状态动态切换特定客户端网关的功能。当旁路由运行OpenWrt系统时,特定客户端使用旁路由作为网关;当旁路由运行其他系统时,客户端自动切换回主路由网关。

1. 设备IP分配

主路由LAN口:

IP 192.168.2.1 子网掩码:255.255.255.0  DNS 可使用当地运营商提供的地址,在此文中使用的DNS是:61.139.2.69,218.6.200.139,DHCP要将192.168.2.1-8预留出,不被其他设备分配

旁路由LAN口:

IP 192.168.2.8子网掩码:255.255.255.0 

打开SSH服务,设置端口地址为:2222

 

2. 特定客户端地址绑定

登录主路由web管理界面,进行MAC地址和IP绑定

SSH登录主路由查看绑定情况

vi /data/etc/config/dhcp
config host '45c39731e83f'
        option mac '45:c3:97:31:e8:3f'
        option name '45c39731e83f'
        option ip '192.168.2.25'

# 以上是示例,如果绑定了多个客户端,可以看到多个配置

注意:这里的路径一定必须是/data/etc/config/

对特定客户端在下面增加一行

config host '45c39731e83f'
        option mac '45:c3:97:31:e8:3f'
        option name '45c39731e83f'
        option ip '192.168.2.25'
        option tag 'special_route'   #增加行,标记为 special_route

 

3. 建立OpenWRT状态检测及网关DNS配置脚本

使用命令建立脚本

vi /data/usr/check_openwrt_gateway.sh

这里使用了检测OpenWRT旁路由的SSH端口2222来确认旁路由是否在线

#!/bin/sh

SECONDARY_IP="192.168.2.8"
CONFIG_DIR="/data/etc/dnsmasq.d"
CONFIG_FILE="$CONFIG_DIR/special_route.conf"
STATE_FILE="/tmp/gateway_state"

mkdir -p $CONFIG_DIR

# 读取之前的状态
if [ -f "$STATE_FILE" ]; then
    PREVIOUS_STATE=$(cat "$STATE_FILE")
else
    PREVIOUS_STATE=""
fi

# 检测OpenWrt状态
if echo "" | nc "$SECONDARY_IP" 2222 2>&1 | head -n 1 | grep -q "SSH-2.0"; then
    CURRENT_STATE="openwrt_online"
    # 检查是否需要更新配置
    if [ ! -f "$CONFIG_FILE" ] || ! head -n 1 "$CONFIG_FILE" | grep -q "dhcp-option=tag:special_route,3,192.168.2.8"; then
        echo "dhcp-option=tag:special_route,3,192.168.2.8" > "$CONFIG_FILE"
        echo "dhcp-option=tag:special_route,1,255.255.255.0" >> "$CONFIG_FILE"
        echo "dhcp-option=tag:special_route,6,8.8.8.8,8.8.4.4" >> "$CONFIG_FILE"
        /etc/init.d/dnsmasq restart >> /tmp/gateway_detection.log 2>&1
        echo "$(date): Changed to openwrt_online config and restarted dnsmasq" >> /tmp/gateway_detection.log
    fi
else
    CURRENT_STATE="openwrt_offline"
    # 检查是否需要更新配置
    if [ ! -f "$CONFIG_FILE" ] || ! head -n 1 "$CONFIG_FILE" | grep -q "dhcp-option=tag:special_route,3,192.168.2.1"; then
        echo "dhcp-option=tag:special_route,3,192.168.2.1" > "$CONFIG_FILE"
        echo "dhcp-option=tag:special_route,1,255.255.255.0" >> "$CONFIG_FILE"
        echo "dhcp-option=tag:special_route,6,61.139.2.69,218.6.200.139" >> "$CONFIG_FILE"
        /etc/init.d/dnsmasq restart >> /tmp/gateway_detection.log 2>&1
        echo "$(date): Changed to openwrt_offline config and restarted dnsmasq" >> /tmp/gateway_detection.log
    fi
fi

# 检查状态是否变化
if [ "$CURRENT_STATE" != "$PREVIOUS_STATE" ]; then
    echo "$CURRENT_STATE" > "$STATE_FILE"
    echo "$(date): State changed from $PREVIOUS_STATE to $CURRENT_STATE" >> /tmp/gateway_detection.log
fi

设置执行权限:

chmod +x /data/usr/check_openwrt_gateway.sh

4. 配置定时任务

执行命令

crontab -e

在最下面一行添加:(每2分钟刷新一次旁路由OpenWRT状态)

*/2 * * * * /data/usr/check_openwrt_gateway.sh > /dev/null 2>&1

:wq写入退出 

5、配置说明

检测机制

  • 检测方法:通过2222端口SSH服务检测旁路由
  • 检测频率:每2分钟一次
  • 状态判断
    • SSH端口开放 → OpenWrt在线 → 网关:192.168.2.8
    • SSH端口关闭 → OpenWrt离线 → 网关:192.168.2.1

配置参数

参数

旁路由在线

旁路由离线

网关

192.168.2.8

192.168.2.1

子网掩码

255.255.255.0

255.255.255.0

DNS

8.8.8.8, 8.8.4.4

61.139.2.69, 218.6.200.139

五、 配置验证

重启主路由

reboot

在重启后SSH登录红米AX6路由器

查看

cat /tmp/dnsmasq.d/special_route.conf 

cat /tmp/dnsmasq.d/special_route.conf

如果在旁路由关闭的情况下special_route.conf 文件中对应网关是192.168.2.1:

dhcp-option=tag:special_route,3,192.168.2.1
dhcp-option=tag:special_route,1,255.255.255.0
dhcp-option=tag:special_route,6,61.139.2.69,218.6.200.139

如果在旁路由开启的情况下special_route.conf 文件中对应网关是192.168.2.8:

dhcp-option=tag:special_route,3,192.168.2.8
dhcp-option=tag:special_route,1,255.255.255.0
dhcp-option=tag:special_route,6,8.8.8.8,8.8.4.4

打开客户端联网,在旁路由关闭或开启的情况下可以获得不同的网关及DNS配置,有时更新比较慢可以执行下面指令刷新,也可以禁用/开启网络适配器/WIFI获得新的IP地址

ipconfig /renew # windows系统适用

六、其他

    在配置验证完成后要注意观察主路由 /data/usr/log 下文件大小的变化,并可以执行命令查询日志

# 查看dnsmasq的启动、重启、配置重载记录
grep -E "dnsmasq|DHCP" /data/usr/log/messages | tail -100

如系统无异常,只是大量日志增加,可以打开DHCP配置文件

vi /data/etc/config/dhcp

找到 config dnsmasq 段落下的 option logqueries '1' 这一行,将 '1' 改为 '0'

 

最后鸣谢deepseek在此过程的大量帮助

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值