一、前言
续上两篇文章(https://blog.youkuaiyun.com/p4server/article/details/151369740)在做完多操作安装启动引导后发现小主机的中还有可利用磁盘空间,便考虑使用有限的空间安装OpenWRT旁路由测试。希望达成的效果:
- 在OpenWRT旁路由开启时,特定客户端可以自动通过旁路由上网;而在旁路由(小主机)关闭或做其他系统应用时特定客户端自动通过主路由上网;
- 即使旁路由开启时也只有特定客户端才能获得网关及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在此过程的大量帮助
1125

被折叠的 条评论
为什么被折叠?



