目录

  • 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. 听歌识曲原理探究以及样例代码
  2. 最简单的启动Docker实例Mesos Golang Framework
  3. arduino雨滴传感器原理_Arduino酸度计(PH计)
  4. C++ Deque(双向队列
  5. 网络爬虫中URLConnection的使用[以科学网为例]
  6. 使用Unity制作的一个望远镜特效,在狙击手游戏中非经常见
  7. Web App:赌的就是互联网未来并 非无可挑剔
  8. Ubuntu 安装远程桌面
  9. Firefox内存占用过高假死解决方法
  10. 汉语词典快速查询算法研究
  11. word2003如何删除页眉?
  12. 转型OMO的背后:考虑机构的资金和实力-线上线下融合式教学
  13. 尾部相关性尾部风险价圣分
  14. Python编程写的圣诞树|一共六款|快拿去送给心爱的人吧
  15. Python险种缴费记录管理(增删查改)
  16. TensorFlow:Graph计算图的概念
  17. 手机访问电脑文件_彻底解决手机-电脑互传大文件的难题 电脑-手机快捷互联互通...
  18. canvas画布在主流浏览器中的尺寸限制
  19. 2.2.2同向放大器、同向放大器的设计
  20. 实验一 元音音频时域、频谱分析 及 RGB文件读取、熵计算

热门文章

  1. ios html5 苹方字体,iOS中使用自定义字体-苹方字体
  2. Visual Studio添加图片资源到exe
  3. 基于SpringCloud+MySQL+Mybait+Vue的数字货币交易系统(附:源码+课件)
  4. 把想法变成现实-兄弟连IT教育
  5. Java课程设计-作业管理系统
  6. java jpa面试题_jpa面试题解析,java面试题
  7. seay代码审计工具_渗透测试-代码审计入门之BlueCMS v1.6 sp1
  8. Android开发笔记——快速入门(从入门ACT到Fragment放肆)
  9. 当客户端浏览器不支持相应版本的apple时自动下载运行环境JVM的解决办法!
  10. 前端js加密、解密方法