ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

chnroute-linux — 中国大陆 IP 段每日自动更新 + 「仅允许国内访问」落地

chnroute-linux — 中国大陆 IP 段每日自动更新 + 「仅允许国内访问」落地 chnroute-linux — 中国大陆 IP 段每日自动更新 「仅允许国内访问」落地在 Linux 上每天自动拉取中国大陆CNIPv4/IPv6 地址段清洗聚合后原子写入内核配合入站白名单实现「仅允许国内 IP 访问」同时可导出 ipset / nftables /RouterOS三种格式用于多 WAN 出口策略路由PBR与国内外分流。本方案是chnroute思路的工程化落地版chnroute源自 Linux 社区本质是「中国大陆 CIDR 数据库」用于在无 BGP 能力的边缘设备上实现近似 BGP 的按目标选路。一、实测结果2026-09-30国内家宽APNIC 官方源 v48792 段 v62043 段 约 300 秒国际出口慢 chnroutes2 聚合源 v43898 段 1.7 秒 china-operator-ip v46207 段 1.7 秒 china-operator-ip6 v63414 段 1.7 秒 ... ───────────────────────────────────────────────────────── 聚合结果 IPv4 5714 段 / 346,035,968 地址约 3.46 亿与 CNNIC 统计吻合 IPv6 2247 段 ISP 分组 电信 2843 段 / 移动 1003 段 / 联通 1733 段 / 教育网 85 段两个模式模式命令耗时说明全量默认--sources all~300sAPNIC 官方 聚合源最权威快速--sources aggregate~74s只用 jsdelivr 镜像聚合源国内网络推荐GitHub 源可达性实测这决定脚本必须做镜像回退镜像结果cdn.jsdelivr.net✅ 96 KB / 1.7 sghproxy.net✅ 96 KB / 2.0 sraw.githubusercontent.com❌ 超时国内直连不通raw.gitmirror.com❌ DNS 解析失败二、文件清单文件作用update_chnroute.py主脚本抓取 → 清洗 → 聚合 → 多格式导出 → 原子写入内核apply-whitelist.sh启用「仅允许国内访问」入站白名单自带防自锁自动回滚install.sh一键部署装文件、建目录、注册定时任务、首次运行chnroute-update.service/.timersystemd 每日定时更新单元README.md本文档三、快速开始# 0) 依赖Debian/Ubuntu 示例sudoaptupdatesudoaptinstall-ypython3 ipset iptables# 1) 一键安装同时立即跑一次只生成数据、不动内核sudo./install.sh --with-timer# 2) 确认数据合理应为 4000~8000 段、覆盖 3.4 亿 地址head-5/var/lib/chnroute/chnroute-v4.txtcat/var/lib/chnroute/state.json# 3) 原子写入内核 ipset可反复执行更新过程不断流sudo/usr/local/bin/update_chnroute.py--outdir/var/lib/chnroute--apply# 4) 启用「仅允许国内访问」echo你的公网出口IP|sudotee-a/etc/chnroute/whitelist.txtsudo/usr/local/sbin/apply-whitelist.sh# 应用300 秒后自动回滚# ↑ 立刻另开一个终端验证 SSH 是否还通sudo/usr/local/sbin/apply-whitelist.sh--commit# 确认无误取消回滚永久生效四、三个真正重要的工程细节1. 白名单不会把你锁在门外防自锁三重保险白名单一旦生效境外 IP包括你此刻的 SSH 跳板会立刻被拒。所以apply-whitelist.sh自动豁免回环、内网10/8、172.16/12、192.168/16、本机全部公网 IP、当前所有已建立 TCP 会话的对端也就是你正在用的那条 SSH 连接、/etc/chnroute/whitelist.txt自定义列表 —— 全部自动进豁免集合自动回滚生效后立刻调度一个 300 秒的定时回滚优先systemd-run退化到at再退化到后台进程。规则就算写错最多断 300 秒机器会自己恢复显式提交你在窗口期内确认 SSH 正常执行--commit取消回滚策略才永久生效。2. 数据更新是原子的不丢包不乱序用「影子集合 swap」而不是「删除重建」ipset create cn4-tmp ... ← 灌入新数据到影子集合线上集合仍在正常工作 ipset restore -exist chnroute-ipset.v4 集合名改写为 cn4-tmp ipset swap cn4-tmp cn4 ← 内核里一次指针交换瞬时生效零空窗 ipset destroy cn4-tmp如果新数据抓取失败或校验不过cn4保持原样 —— 白名单永远不会变成空集合。3. 完整性守卫防止数据源异常导致白名单塌陷白名单塌陷 灾难所有国内用户被拒之门外。所以每次落地前强制校验绝对下限IPv4 ≥ 2000 段、≥ 1 亿地址实测约 5714 段 / 3.46 亿绝对上限IPv4 ≤ 15 亿地址超过说明把非 CN 网段并进来了相对变化较上次条目数/IP 数骤降超 20%直接拒绝骤增 3 倍以上也拒绝命中即退出码2文件与内核都不改动保留上一次的可用数据确认数据源无误时用--force跳过五、脚本能力速查# 常用python3 update_chnroute.py--outdir/var/lib/chnroute# 只生成数据python3 update_chnroute.py--sourcesaggregate--apply# 快速模式 写内核python3 update_chnroute.py--isp--ros-pbr--formatall--apply# 全格式 ISP 分组 ROS PBR 模板python3 update_chnroute.py--backendnft --nft-tableinet filter--applypython3 update_chnroute.py --dry-run--apply# 只演示不落地python3 update_chnroute.py --log-file /var/log/chnroute/update.log参数说明--sources all|apnic|aggregate数据源组合默认all--isp追加电信/移动/联通/教育网/科技网/鹏博士分组--format txt,ipset,nft,ros输出格式all表示全部--set-prefix cnipset 集合前缀 →cn4/cn6--ros-list CN/--ros-pbrRouterOS list 名 / 生成 PBR 模板--apply/--backend原子写入内核 / 选 ipset 或 nft--force跳过完整性守卫危险--quiet/--log-file静默 / UTF-8 日志落盘输出文件--format allchnroute-v4.txt / chnroute-v6.txt 纯 CIDR带元信息头通用格式 chnroute-ipset.v4 / .v6 ipset restore 格式原子 swap 用 chnroute.nft nftables set 定义nft -f 单事务加载 chnroute-ros.rsc RouterOS address-list 批量导入脚本 chnroute-ros-pbr.rsc RouterOS 策略路由模板国内直连 / 境外分流 chnroute-diff.txt 与上次更新的差异新增/移除各 200 条 state.json 本次摘要段数、地址数、各源状态 cn-chinanet.txt / cn-cmcc.txt / ... ISP 分组--isp 时生成六、三种落地方式A) ipset iptables推荐兼容性最好sudoupdate_chnroute.py--outdir/var/lib/chnroute--formatall--applysudoapply-whitelist.sh--commitsudoapply-whitelist.sh--status# 查看链与集合sudoapply-whitelist.sh--rollback# 随时撤销生成的 IPv4 链结构IPv6 同理走ip6tablesCHNROUTE-IN: 1. -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT ← 放行已建立连接响应包 2. -i lo -j ACCEPT ← 回环 3. -m set --match-set chnroute-wl4 src -j ACCEPT ← 豁免集合内网/本机/活跃会话/自定义 4. -m set --match-set cn4 src -j ACCEPT ← 中国大陆 5. -j DROP ← 其余拒绝MODEloose 时改为 RETURN挂到INPUT首位-I INPUT 1优先于既有规则。可用环境变量覆盖sudoSET4cn4MODEstrictROLLBACK_DELAY600WHITELIST_FILE/etc/chnroute/whitelist.txt ./apply-whitelist.shB) nftablessudoupdate_chnroute.py--backendnft --nft-tableinet filter--formatnft--applynft -f chnroute.nft整文件是一个事务同名 set 被原子替换。在你自己的规则里引用nft add rule inet filter input ip saddr cn4 accept注意nftables 的 set 与引用它的规则必须在同一张表内所以用--nft-table指定你的表名默认inet filter。C) RouterOS多 WAN 策略路由python3 update_chnroute.py--outdir./out--formatros--isp--ros-pbr# 把 chnroute-ros.rsc 上传到设备 /file然后# /import file-namechnroute-ros.rsc生成的chnroute-ros-pbr.rsc是可直接改用的模板国内直连、境外走代理线路/ip firewall mangle add chainprerouting src-address-listLAN dst-address-listCN actionmark-routing new-routing-markto-cn passthroughyes add chainprerouting src-address-listLAN dst-address-list!CN actionmark-routing new-routing-markto-overseas passthroughyes /ip route add dst-address0.0.0.0/0 gateway国内WAN routing-markto-cn distance1 check-gatewayping add dst-address0.0.0.0/0 gateway海外WAN routing-markto-overseas distance1 check-gatewayping配合--isp生成的CN-CHINANET/CN-CMCC/CN-UNICOM列表还能做运营商级精细分流三网互联互通瓶颈是实打实的电信用户访问移动 IDC 绕行会显著抬高 RTT 与丢包。check-gatewaypingdistance分级实现链路健康感知与自动备份。七、定时更新sudo./install.sh --with-timer# systemd每天 04:30 随机 30 分钟自动 --applysudo./install.sh --with-cron# 无 systemd 时用 crontabsystemd 单元要点RandomizedDelaySec1800打散触发时间避免与其他定时任务叠加Persistenttrue关机/休眠错过时间点后开机补跑TimeoutStartSec900超时视为失败旧 ipset 不受影响日志落/var/log/chnroute/update.log检查systemctl list-timers chnroute-update.timer journalctl-uchnroute-update.service-n50tail-f/var/log/chnroute/update.log八、常见问题QAPNIC 源太慢约 5 分钟能快吗用--sources aggregate~74 秒。它走 jsdelivr 镜像上的 BGP 聚合数据段数更少、覆盖一致。也可以把 systemd 单元的--format all改成加--sources aggregate。Q用户访问国内 CDN 但 CDN 回源在境外会不会被误封白名单只判源 IP。国内 CDN 边缘节点在国内源 IP 就是国内的不受影响。Q白名单生效后出站请求的响应包会被丢吗不会。链首放行ESTABLISHED,RELATED你主动发起的连接响应包照常进来。Q要不要同时放行 UDP / DNS白名单基于 address-list协议无关。但如果只给国外用户开 DNS那么他们连域名都解析不了 ——若确有境外用户请把他们加进/etc/chnroute/whitelist.txt而不是开放端口。Q误封了自己怎么救等 300 秒自动回滚如果还没--commit云控制台 VNC/串口执行sudo /usr/local/sbin/chnroute-rollback.sh事先把出口 IP 写进/etc/chnroute/whitelist.txt是唯一可靠的预防手段。QIPv6 要不要一起管要。只做 v4 白名单时境外用户仍可经 IPv6 进来。脚本默认 v4/v6 一起生成若服务器没有 IPv6加--no-ipv6。Q想撤掉全部策略sudo /usr/local/sbin/apply-whitelist.sh --rollback完全卸载sudo ./install.sh --uninstall。九、数据源与合规说明APNIC 官方统计文件delegated-apnic-latest含 CN 的allocated/assigned记录权威、只增不减。IPv4 记录以「地址个数」表示脚本用summarize_address_range正确转 CIDR例如 300 个地址 →/24 /27 /29 /30已单测验证。china-operator-ipBGP 路由表聚合附带 ISP电信/移动/联通/教育网等归属。chnroutes2已聚合的最小 CIDR 集体积小、速度快。以上均为公开的 RIR/BGP 数据派生品用于网络运维与访问控制请遵守当地法律法规及所在单位的网络管理规定。
返回列表