OpenWRT上如何让 ss 设置指定域名dst bypass
目录
- 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相关推荐
- openwrt上设置SAMBA4共享,并且指定用户密码
尝试了好久,最后使用网友的配置文件成功. 也许这些操作与成功有关:OPENWRT上增加用户和密码,SAMBA上增加相同的用户密码. 共享的磁盘要格式化为EXT4格式 修改/etc/samba/smb. ...
- OpenWrt路由器设置IPv6域名动态解析,同时实现IPv4设备访问IPv6节点
文章目录 0.前言 1.准备工作 2.详细步骤 2.1.OpenWrt路由器软件包安装 2.2.防火墙放行入站数据(修改为"接受"并保存应用) 2.3.路由器做好ipv6设置(略) ...
- charles 过滤指定域名
当使用"序列视图"的时候 请求多了有些时候会看不过来,Charles 提供了一个简单的 Filter 功能,可以输入关键字来快速筛选出 URL 中带指定关键字的网络请求. 对于需要 ...
- Fiddler过滤指定域名
Fiddler过滤指定域名的方法一 切换到fiddler右侧窗口的Filters选项卡,勾选顶部的"Use Filters",找到Hosts区域,设置以下三个选项: 1.第一项有三 ...
- 获取指定域名的IP地址
获取指定域名的IP地址 所需函数:gethostbyname 函数原型: struct hostent* gethostbyname(const char *name) 参数:const char * ...
- OpenWrt 安装 mDNS,并设置 mDNS 映射
OpenWrt 安装 mDNS,并设置 mDNS 映射 路由器:OpenWrt 21.02.1 电脑:Windows 10 21H1 Windows 10 现在已经默认支持了 mdns,可以直接 pi ...
- 免费好用的IPv6之DDNS服务-Openwrt上dynv6的使用介绍
概述:本文主要介绍了dynv6在OpenWrt上的配置及使用,对于有IPv6地址的用户,可以按照本文自行探索更多玩法 针对近期dynv6网站的更新,本文于2020.2.13更新. 参考dynv6网站推 ...
- 微信小程序网络请求 - 设置合法域名
微信小程序设置网络请求 官方文档 为什么要设置合法域名呢 ? 每个微信小程序需要事先设置通讯域名,小程序只可以跟指定的域名进行网络通信.包括普通 HTTPS 请求(wx.request).上传文件(w ...
- SimpleDateFormat df = new SimpleDateFormat(yyyy-MM-dd HH:mm:ss);//设置日期格式
java日期格式大全 format SimpleDateFormat(转) SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH ...
- 申请ssl证书并绑定指定域名实现全站https访问
首先申请ssl证书,这里使用的是阿里云的, 1 搜索ssl,点击ssl证书(应用安全) 2 点击立即购买 3 选择更多售卖规格 4 选择DV单域名证书(一个自然年可以免费申请20个单域名ssl证书) ...
最新文章
- 听歌识曲原理探究以及样例代码
- 最简单的启动Docker实例Mesos Golang Framework
- arduino雨滴传感器原理_Arduino酸度计(PH计)
- C++ Deque(双向队列
- 网络爬虫中URLConnection的使用[以科学网为例]
- 使用Unity制作的一个望远镜特效,在狙击手游戏中非经常见
- Web App:赌的就是互联网未来并 非无可挑剔
- Ubuntu 安装远程桌面
- Firefox内存占用过高假死解决方法
- 汉语词典快速查询算法研究
- word2003如何删除页眉?
- 转型OMO的背后:考虑机构的资金和实力-线上线下融合式教学
- 尾部相关性尾部风险价圣分
- Python编程写的圣诞树|一共六款|快拿去送给心爱的人吧
- Python险种缴费记录管理(增删查改)
- TensorFlow:Graph计算图的概念
- 手机访问电脑文件_彻底解决手机-电脑互传大文件的难题 电脑-手机快捷互联互通...
- canvas画布在主流浏览器中的尺寸限制
- 2.2.2同向放大器、同向放大器的设计
- 实验一 元音音频时域、频谱分析 及 RGB文件读取、熵计算
热门文章
- ios html5 苹方字体,iOS中使用自定义字体-苹方字体
- Visual Studio添加图片资源到exe
- 基于SpringCloud+MySQL+Mybait+Vue的数字货币交易系统(附:源码+课件)
- 把想法变成现实-兄弟连IT教育
- Java课程设计-作业管理系统
- java jpa面试题_jpa面试题解析,java面试题
- seay代码审计工具_渗透测试-代码审计入门之BlueCMS v1.6 sp1
- Android开发笔记——快速入门(从入门ACT到Fragment放肆)
- 当客户端浏览器不支持相应版本的apple时自动下载运行环境JVM的解决办法!
- 前端js加密、解密方法