You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

OpenWRT基于目标IP所属国家的多WAN端口路由配置问题(附异常脚本)

OpenWRT基于目标IP所属国家的多WAN端口路由配置问题(附异常脚本)

嘿,我太懂这种按国家分流多WAN的需求了——比如国内IP走专线、境外IP走另一条线路,体验直接拉满!不过你说PBR模块不稳定,手里的脚本还跑不起来,这俩问题咱们一个个捋清楚。

先说说PBR模块“不稳定”可能的诱因:

  • 是不是IP地址库没及时更新?PBR里的国家IP段如果是旧的,就会出现部分IP路由错误的情况
  • 规则优先级搞反了没?要是默认路由的优先级比PBR规则还高,那PBR的分流规则根本不会生效
  • 有没有给PBR规则绑定正确的“目标IP组”?要是组里的IP段不完整,也会显得整个模块“不稳定”

再看你贴的这个脚本,一眼能看到几个致命问题:

  1. 脚本里的转义字符乱套了——比如TARGET_URL="http://www.ipdeny.com/ipblocks/data/countries/cn.zone"这里的"是HTML转义后的双引号,在shell脚本里必须换成正常的",不然脚本根本识别不了这个URL参数
  2. 脚本是截断的,到if awk -v...就没下文了,这部分本来是要把下载的IP段转换成ipset或nftables能识别的格式,缺了核心处理逻辑,脚本肯定跑不起来
  3. 脚本混用了ipsetnft命令,要是你的OpenWRT版本比较新(比如21.02之后),默认用nftables替代了iptables,ipset的命令可能会出现兼容性问题

给你两个可行的解决方向:

方向一:抢救现有脚本

  • 先全局替换脚本里的所有"为正常双引号,把所有HTML转义的符号修正
  • 补全截断的awk处理逻辑,举个例子,这部分应该是把下载的每行CIDR格式的IP段,转换成nftables能导入的命令:
    awk -v set="$TARGET_IPSET" '{print "add element inet fw4 " set " " $0}' "$TARGET_DL_FILE" > "$TARGET_NFT_FILE"
    
  • 先分步测试脚本的单步命令:比如手动跑uclient-fetch --no-check-certificate -qO- 目标IP段URL > /etc/pbr_tmp_cn_ip_ranges,看看能不能正常下载IP段文件;再检查ipset list $TARGET_IPSET能不能正常调用,排除命令不存在的问题

方向二:换更稳妥的官方工具流

要是不想折腾脚本,直接用OpenWRT自带的工具组合实现:

  1. 手动下载对应国家的IP段文件,转换成ipset格式的IP组
  2. 打开PBR模块,新建路由规则:目标IP属于这个IP组的流量,指定走对应WAN口
  3. 给这个规则设置最高优先级,再添加一个定时任务(比如每周一次),自动下载最新的IP段文件并更新ipset,保证IP段的时效性

要是你能把脚本的完整内容贴出来,还能帮你揪出更多细节上的问题哦~

备注:内容来源于stack exchange,提问作者Damien

火山引擎 最新活动