首页
关于
Search
1
git lg彩色显示日志
29 阅读
2
在 Ubuntu 22.04 LTS 中安装 Docker
19 阅读
3
CentOs/Ubuntu搭建上网x-ui
18 阅读
4
git使用多个源和多个分支
15 阅读
5
git保存账号密码
15 阅读
默认分类
网站搭建
Windows
Linux
Docker
OpenWrt
Hackintosh
Git
Python
Web开发
JavaScript
FFmpeg
Demo
工具
刷机
油猴脚本
Excel
Chrome Extension
登录
Search
标签搜索
Pandas
读取
时区
Chrome
centos8
求和
Nginx
Typecho
404
csv
国际站
询盘导出
油猴脚本
bbr
Ubuntu
远程桌面
日志
log
数据清洗
打印机
野生程序猿
累计撰写
155
篇文章
累计收到
0
条评论
首页
栏目
默认分类
网站搭建
Windows
Linux
Docker
OpenWrt
Hackintosh
Git
Python
Web开发
JavaScript
FFmpeg
Demo
工具
刷机
油猴脚本
Excel
Chrome Extension
页面
关于
搜索到
12
篇与
的结果
2026-03-31
OpenWrt PPPoE 自动检测 CGNAT 并重拨
OpenWrt PPPoE 自动检测 CGNAT 并重拨(精简版 v3)适用于:PPPoE 拨号用户目标:避免获取 100.x.x.x(CGNAT)IP特点:只检测 WAN IP,无公网出口检测,适合配合 OpenClash 使用🚀 功能特点✅ 自动检测 WAN IP 是否为私网 / CGNAT✅ Hotplug 实时触发(ifup + ifupdate)✅ Cron 定时兜底✅ 防死循环(最大重试次数)✅ 防并发(文件锁)✅ 冷却时间,避免频繁重拨✅ 日志清晰🧩 一、主脚本路径:/root/wan_auto_redial.sh内容:#!/bin/sh # ====== 锁(防并发)====== LOCK_FILE="/tmp/wan_redial.lock" exec 200>$LOCK_FILE flock -n 200 || { logger -t WAN-REDIAL "Another instance is running, exit" exit 0 } # ====== 配置 ====== INTERFACE="wan" MAX_RETRY=3 COOLDOWN=60 # 重拨最小间隔(秒) COUNT_FILE="/tmp/wan_redial_count" LAST_REDIAL_TIME_FILE="/tmp/last_redial_time" # ====== 获取当前时间 ====== NOW=$(date +%s) # ====== 冷却机制 ====== LAST_TIME=$(cat $LAST_REDIAL_TIME_FILE 2>/dev/null || echo 0) if [ $((NOW - LAST_TIME)) -lt $COOLDOWN ]; then logger -t WAN-REDIAL "Cooldown active, skip" exit 0 fi # ====== 获取WAN IP ====== WAN_IP=$(ubus call network.interface.$INTERFACE status | jsonfilter -e '@["ipv4-address"][0].address') logger -t WAN-REDIAL "WAN IP: $WAN_IP" [ -z "$WAN_IP" ] && exit 0 # ====== 判断私网IP(CGNAT) ====== is_private_ip() { echo "$1" | grep -qE '^(100\.|10\.|192\.168\.|172\.(1[6-9]|2[0-9]|3[0-1])\.)' } NEED_REDIAL=0 if is_private_ip "$WAN_IP"; then logger -t WAN-REDIAL "Detected private/CGNAT IP, will redial" NEED_REDIAL=1 fi # ====== 重拨逻辑 ====== if [ "$NEED_REDIAL" -eq 1 ]; then COUNT=$(cat $COUNT_FILE 2>/dev/null || echo 0) if [ "$COUNT" -lt "$MAX_RETRY" ]; then COUNT=$((COUNT+1)) echo $COUNT > $COUNT_FILE echo $NOW > $LAST_REDIAL_TIME_FILE logger -t WAN-REDIAL "Redial attempt $COUNT/$MAX_RETRY..." ifdown $INTERFACE sleep 5 ifup $INTERFACE else logger -t WAN-REDIAL "Max retries reached, stop redial" fi else # 正常 WAN IP → 重置计数 echo 0 > $COUNT_FILE logger -t WAN-REDIAL "WAN IP OK, no redial needed" fi🔧 二、赋予执行权限chmod +x /root/wan_auto_redial.sh⚡ 三、Hotplug 触发路径:/etc/hotplug.d/iface/99-wan-redial内容:#!/bin/sh [ "$INTERFACE" = "wan" ] || exit 0 [ "$ACTION" = "ifup" -o "$ACTION" = "ifupdate" ] || exit 0 logger -t WAN-REDIAL "Hotplug triggered: ACTION=$ACTION" /root/wan_auto_redial.sh权限:chmod +x /etc/hotplug.d/iface/99-wan-redial⏱️ 四、Cron 兜底(5分钟一次)crontab -e添加:*/5 * * * * /root/wan_auto_redial.sh📊 五、日志查看查看日志:logread | grep WAN-REDIAL实时查看:logread -f | grep WAN-REDIAL🧠 六、工作流程拨号成功 / WAN IP 变化 ↓ hotplug 触发(ifup / ifupdate) ↓ 脚本执行(带锁) ↓ 检测 WAN IP 是否私网 ↓ 满足条件 → 执行 ifdown/ifup 重拨 ↓ 最多 3 次 + 冷却控制✅ 七、特性总结(精简版)只检查 WAN IP 是否私网(100.x / 10.x / 172.16-31 / 192.168.x)冷却机制防止频繁重拨最大 3 次重拨防死循环Hotplug + Cron 双触发,保证稳定性文件锁防止并发执行适合 OpenClash 出口管理备注:公网 IP 检测已去掉,所有判断基于 WAN IP 本地信息即可。
2026年03月31日
1 阅读
0 评论
0 点赞
2025-09-08
利用静态路由与去 NAT 实现主路由OpenClash统一分流
主路由设置静态路由表把各子路由中 WiFi 的 IP 段对应设置到该子路由的 WAN 口 IP。静态路由保证了主路由能正确把返回的包发回去,不会丢包。启用 OpenClash 并基于 SRC-IP-CIDR 分流主路由能识别每个终端的真实源 IP。不同子路由、不同设备,可以按 IP 段实现精确分流。SRC-IP-CIDR,192.168.2.0/24,Proxy SRC-IP-CIDR,192.168.3.0/24,DIRECT子路由设置WAN 口设置静态地址,网关和DNS都指向主路由 IP 地址,保证所有流量都经过主路由转发。防火墙 WAN 关闭动态伪装 (MASQUERADE),让设备的真实 IP 直接暴露给主路由,避免 NAT 隐藏源地址。效果主路由统一跑 OpenClash,所有子设备的访问请求都能被精确识别和分流。子路由只负责下挂设备的接入和网段隔离,不再做 NAT 出口。注意事项两个同品牌子路由接入同一主路由要注意wan口的mac地址是否相同,否则造成冲突示例拓扑: Internet │ 主路由 OpenWrt 192.168.1.1 (OpenClash) │ ┌───────────┴───────────┐ │ │ 子路由1 子路由2 WAN:192.168.1.2 WAN:192.168.1.3 LAN:192.168.2.1 LAN:192.168.3.1 WiFi网段 WiFi网段 192.168.2.0/24 192.168.3.0/24允许子路由设备互访修改 wan 区域的基本设置在弹出的编辑界面中,找到“基本设置”,进行如下修改:入站数据 (Input): 从 拒绝 改为 接受 (允许外网访问路由器本身,如登录后台)。转发 (Forward): 从 拒绝 改为 接受 (允许外网流量穿过路由器到达 LAN 下的设备)。允许流量发往 lan在同一个编辑页面的下方,找到 允许转发到目标区域 (Allow forward to destination zones):勾选 lan。
2025年09月08日
4 阅读
0 评论
0 点赞
2024-02-16
Tailscale实现两个局域网互通
网络A主路由安装OpenWrt根据项目安装程序 https://github.com/adyanth/openwrt-tailscale-enabler安装这个版本https://github.com/adyanth/openwrt-tailscale-enabler/releases/tag/v1.36.1-fb2f6cf-autoupdatewget https://github.com/adyanth/openwrt-tailscale-enabler/releases/download/v1.36.1-fb2f6cf-autoupdate/openwrt-tailscale-enabler-v1.36.1-fb2f6cf-autoupdate.tgz tar x -zvC / -f openwrt-tailscale-enabler-v1.36.1-fb2f6cf-autoupdate.tgz /etc/init.d/tailscale start tailscale up --accept-routes=true --accept-dns=false --advertise-routes=10.0.0.0/24注意需要添加--accept-routes=true参数才能开启局域网下设备向另外一个局域网访问 tailscale up --accept-routes=true --accept-dns=false --advertise-routes=10.0.0.0/24网络B主路由安装老毛子固件在扩展功能-ShadowSocks-taiscale中,运行自定义参数tailscale up --advertise-routes=192.168.122.0/24 --accept-routes=true --accept-dns=false --advertise-exit-node --reset可实现两个局域网内任意设备用原始ip互相访问。Docker部署实例,更多设置参考 https://tailscale.com/kb/1282/docker# 群晖环境 docker run -d \ --name=tailscaled \ --network=host \ -v /volume1/docker/tailscale:/var/lib/tailscale \ -v /dev/net/tun:/dev/net/tun \ -e TS_AUTHKEY=tskey-auth-kX7xxxTRL-ASHZkSkSxxxxxDDLkgq1 \ -e TS_ROUTES=192.168.3.0/24 \ -e TS_STATE_DIR=/var/lib/tailscale \ -e TS_EXTRA_ARGS=--accept-routes=true \ --cap-add=NET_ADMIN \ --cap-add=NET_RAW \ tailscale/tailscale
2024年02月16日
8 阅读
0 评论
0 点赞
2024-01-19
OpenWrt开源变体ImmortalWrt
项目地址: immortalwrt下载地址: ImmortalWrt Firmware Selector查看支持的包名:https://downloads.immortalwrt.org/releases/23.05.1/packages/x86_64/luci/Packages下载下来的镜像格式为img.gz使用命令 gunzip xxxx.img.gz 解压得到img的镜像文件
2024年01月19日
3 阅读
0 评论
0 点赞
2023-08-23
OpenClash在fake-ip模式下无法打开解析到公网的内网设备
开启fake-ip模式后,如果内网需要通过解析到公网IP的域名来访问内网设备时,会无法打开。解决方法:在OpenClash插件中 -> 覆写设置 -> DNS设置 -> Fake-IP-Filter加入解析到公网的域名参考链接:https://github.com/vernesong/OpenClash/issues/1119
2023年08月23日
1 阅读
0 评论
0 点赞
1
2
3