目录

  • 1.背景
  • 2.解决思路
  • 3.解决方案
    • 3.1 ssh登录openwrt
    • 3.2 创建处理的文件夹
    • 3.3 创建脚本
    • 3.4 设置原本配置中的固定ip的dst bypass
    • 3.5 运行脚本
    • 3.6 设置自动运行
  • 4.其他说明
    • 4.1 问题追踪
    • 4.2 ip数量问题
    • 4.3 其他

1.背景

在OpenWRT上使用shadowsocks-libev 时,只能设置指定的ip 或者ip 段到dst bypass上,主要是nftables/iptables只能操作ip地址,而不处理域名。但是,实际使用中可能会遇到部分域名需要强制bypass,同时由于域名较多,且时常会更换服务器地址,手动变更繁琐,且容易弄错。

2.解决思路

所以要解决问题,就需要手动查询对应dst域名的ip地址,合并整理后更新到shadowsocks-libev配置文件上去。

3.解决方案

3.1 ssh登录openwrt

略过……

3.2 创建处理的文件夹

mkdir -p /etc/config/autolookup

3.3 创建脚本

创建处理脚本update_dst.sh,用nano编辑该文件。(也可以用自己喜欢的文本编辑器)

cd /etc/config/autolookup
touch ./update_dst.sh
nano ./update_dst.sh

输入以下代码:
其中的urlist根据自己需要修改,多个域名用空格分隔即可

configpath=./shadowsocks-libev
selfconfigiplist=./selfconfigiplist
logpath=./autolookup/log
tmpconfigpath=/etc/config/autolookup/shadowsocks-libev
tmpiplist=/etc/config/autolookup/tmpiplist#获取ip列表
urlist="kp.m-team.cc tracker.m-team.cc springsunday.net on.springsunday.net hdchina.org tracker.hdchina.org"
touch -f $tmpiplist
echo '' > $tmpiplist
for url in $urlist
doecho "#$url" >> $tmpiplistiplist=`nslookup $url | sed -n '/Address:/p' | sed -n '2,$p' |sed 's/Address: //g'|sed -e '/:/d'`for ip in $iplistdoif [ `grep -c $ip $tmpiplist` -eq 0 ]; thenecho $ip >>$tmpiplistfidone
done
if [ -f $selfconfigiplist ];thencat $selfconfigiplist >> $tmpiplist
fi
#修改shadowsocks-libev配置文件
cp -f  $configpath "$tmpconfigpath.bk"
sed -e '/list dst_ips_bypass/d'  $configpath > $tmpconfigpath
line=$( sed -n '/list src_ips_bypass/=' $tmpconfigpath )
if [ $line -eq 0 ]; then$line=11
fi
let line="$line +1"
ips=$( sed '/^$/d' $tmpiplist | sed -e '/#/d' )
for ip in $ips
dosed -i "${line}i \\  list dst_ips_bypass ${ip}" $tmpconfigpathlet line="$line +1"
done
mv -f $tmpconfigpath $configpath
/etc/init.d/shadowsocks-libev reload
date "+%Y-%m-%d %H:%M:%S" >> $logpath

3.4 设置原本配置中的固定ip的dst bypass

由于自动更新会直接覆盖掉所有dst bypass,包括需要通过ip进行bypass设置的,所以需要留有设置。

touch ./selfconfigiplist
nano ./selfconfigiplist

输入需要按照ip设置bypass的地址,比如:

8.8.8.8
8.8.4.4

3.5 运行脚本

运行脚本前,需要设置该文件的可执行权限。

chmod a+x ./update_dst.sh

运行脚本,会看到一个tmpiplist文件,这是一个临时文件,会将这里的所有数据设置到ss 的dst bypass中。
比如上面的配置会得到下面这样的文件:


#kp.m-team.cc
172.67.73.8
104.26.12.50
104.26.13.50
#tracker.m-team.cc
#springsunday.net
104.21.66.50
172.67.201.30
#on.springsunday.net
192.155.86.107
198.98.48.123
209.141.58.83
149.56.244.138
#hdchina.org
198.251.84.91
#tracker.hdchina.org
104.24.58.213
8.8.8.8
8.8.4.4

3.6 设置自动运行

在openwrt的web界面,system=》Scheduled Tasks中,增加一行。比如,我需要每周日晚上8点更新一下。更新频率根据自己需要设置

0 20 * * 0 /etc/config/autolookup/update_dst.sh

4.其他说明

4.1 问题追踪

脚本在运行后会自动生成一个log文件,和一个shadowsocks-libev.bk文件。前者会记录每一次运行的时间,后者会将运行前的shadowsocks-libev文件备份一次。

4.2 ip数量问题

web界面中,dst bypass好像是有数量限制的,但是脚本是直接修改config文件,不知道超过10个ip会不会生效,我没有测试。

4.3 其他

该脚本仅供学习交流讨论。

OpenWRT上如何让 ss 设置指定域名dst bypass相关推荐

  1. openwrt上设置SAMBA4共享,并且指定用户密码

    尝试了好久,最后使用网友的配置文件成功. 也许这些操作与成功有关:OPENWRT上增加用户和密码,SAMBA上增加相同的用户密码. 共享的磁盘要格式化为EXT4格式 修改/etc/samba/smb. ...

  2. OpenWrt路由器设置IPv6域名动态解析,同时实现IPv4设备访问IPv6节点

    文章目录 0.前言 1.准备工作 2.详细步骤 2.1.OpenWrt路由器软件包安装 2.2.防火墙放行入站数据(修改为"接受"并保存应用) 2.3.路由器做好ipv6设置(略) ...

  3. charles 过滤指定域名

    当使用"序列视图"的时候 请求多了有些时候会看不过来,Charles 提供了一个简单的 Filter 功能,可以输入关键字来快速筛选出 URL 中带指定关键字的网络请求. 对于需要 ...

  4. Fiddler过滤指定域名

    Fiddler过滤指定域名的方法一 切换到fiddler右侧窗口的Filters选项卡,勾选顶部的"Use Filters",找到Hosts区域,设置以下三个选项: 1.第一项有三 ...

  5. 获取指定域名的IP地址

    获取指定域名的IP地址 所需函数:gethostbyname 函数原型: struct hostent* gethostbyname(const char *name) 参数:const char * ...

  6. OpenWrt 安装 mDNS,并设置 mDNS 映射

    OpenWrt 安装 mDNS,并设置 mDNS 映射 路由器:OpenWrt 21.02.1 电脑:Windows 10 21H1 Windows 10 现在已经默认支持了 mdns,可以直接 pi ...

  7. 免费好用的IPv6之DDNS服务-Openwrt上dynv6的使用介绍

    概述:本文主要介绍了dynv6在OpenWrt上的配置及使用,对于有IPv6地址的用户,可以按照本文自行探索更多玩法 针对近期dynv6网站的更新,本文于2020.2.13更新. 参考dynv6网站推 ...

  8. 微信小程序网络请求 - 设置合法域名

    微信小程序设置网络请求 官方文档 为什么要设置合法域名呢 ? 每个微信小程序需要事先设置通讯域名,小程序只可以跟指定的域名进行网络通信.包括普通 HTTPS 请求(wx.request).上传文件(w ...

  9. SimpleDateFormat df = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);//设置日期格式

    java日期格式大全 format SimpleDateFormat(转) SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH ...

  10. 申请ssl证书并绑定指定域名实现全站https访问

    首先申请ssl证书,这里使用的是阿里云的, 1 搜索ssl,点击ssl证书(应用安全) 2 点击立即购买 3 选择更多售卖规格 4 选择DV单域名证书(一个自然年可以免费申请20个单域名ssl证书) ...

最新文章

  1. 阿里三面让我现场改造Spring框架,明天带他去爬山!
  2. Microsoft Visual C++ 不支持long long
  3. .NET Core webapi 允许put请求方式配置文件
  4. 阿里云宣布进入 Serverless 容器时代,推出弹性容器实例服务 ECI
  5. linux 数据复制 dd 简介
  6. Hadoop之道--MapReduce之Hello World实例wordcount
  7. 我的工作流为什么启动不了
  8. avue 文字点击 弹窗_经验 | UI设计师必懂的App弹窗设计方法
  9. HBase rowkey概念
  10. Rolling Update - 每天5分钟玩转 Docker 容器技术(140)
  11. 微软IE 9 Beta全程体验图集
  12. 项目管理九大知识点输入输出
  13. 在内存只有24KB的电脑上写操作系统,是怎样的体验?
  14. Editplus配置VC++(1) 及相关注意事项
  15. 用户行为分析面面观之一
  16. VS2010 快捷键
  17. 列联表与独立性检验(一维列联表 二维列联表 三维列联表 ; 卡方检验 Fisher精确检验 Cochran-Mantel-Haenszel检验)
  18. CMD控制台光标无法显示
  19. java发送outlook_在Outlook 2007中发送民意调查
  20. 从零开始学数据分析之——《线性代数》第三章 n维向量

热门文章

  1. 数据库表的建立与基本操作
  2. C语言小案例_故障案例 每日一例 【第1355篇】错误代码:ER02 | ER02 | Er/02 | 惠普黑白激光机...
  3. redis的设计与实现
  4. 嵌入式c语言教程 题库 百度云,嵌入式c语言视频教程尚观主讲视频教程
  5. 网吧管理软件常见漏洞四节课
  6. 课程管理系统 Moodle 初体验
  7. 计算机辅助药物设计中的分子动力学模拟
  8. 计算思维在计算机科学中的应用,计算思维在离散数学中的应用.pdf
  9. IOS CA服务器和客户端的配置
  10. 解决keil注册机在win10无法打开问题