极路由2(极贰)在OpenWrt下定制自己的ss服务
默认刷入的OpenWrt带的ss, 只有ss-redir服务, 但是在实际使用中, 很多时候还是希望访问直接通过正常网关, 只有少部分访问需要通过ss, 所以希望能配置成为ss-local服务.
在保留原有服务的基础上, 添加一个新的Shadowsocks Client配置界面.
/usr/lib/lua/luci/controller/ 下新增 shadowrock.lua
module("luci.controller.shadowrock", package.seeall)
function index()
entry({)
end
/usr/lib/lua/luci/model/cbi/ 下新增 shadowrock.lua
--[[
Shadowsocks LuCI Configuration Page Customized by RockBB
References:
https://github.com/ravageralpha/my_openwrt_mod - by RA-MOD
http://www.v2ex.com/t/139438 - by imcczy
https://github.com/rssnsj/network-feeds - by Justin Liu
]]--
local m, s, o, e
local fs = require "nixio.fs"
local state_msg = ""
)
if ss_local_on then
state_msg = "<br><b><font color=\"green\">" .. translate("ss-local Running") .. "</font></b>"
else
state_msg = "<br><b><font color=\"red\">" .. translate("ss-local Not running") .. "</font></b>"
end
)
if ss_redir_on then
state_msg = state_msg .. "<br><b><font color=\"green\">" .. translate("ss-redir Running") .. "</font></b>"
else
state_msg = state_msg .. "<br><b><font color=\"red\">" .. translate("ss-redir Not running") .. "</font></b>"
end
)
if ss_tunnel_on then
state_msg = state_msg .. "<br><b><font color=\"green\">" .. translate("ss-tunnel Running") .. "</font></b>"
else
state_msg = state_msg .. "<br><b><font color=\"red\">" .. translate("ss-tunnel Not running") .. "</font></b>"
end
m = Map("shadowrock", translate("Shadowsocks"), translate("Shadowsocks is an encrypted proxy designed to protect your Internet traffic.") .. " - " .. state_msg)
s = m:section(TypedSection, "shadowrock", translate("Global Setting"))
s.addremove = false
s.anonymous = true
-- ---------------------------------------------------
o = s:option(Flag, "use_conf_file", translate("Use Config File"))
o.default =
o.rmempty = false
o = s:option(Value, "config_file", translate("Config File"))
o.placeholder = "/etc/shadowsocks.json"
o.default = "/etc/shadowsocks.json"
o.datatype = "file"
o:depends()
o = s:option(Value, "server", translate("Server Address"))
o.datatype = "host"
o:depends("use_conf_file", "")
o = s:option(Value, "server_port", translate("Server Port"))
o.datatype = "port"
o:depends("use_conf_file", "")
o = s:option(Value, "password", translate("Password"))
o.password = true
o:depends("use_conf_file", "")
o = s:option(ListValue, "encrypt_method", translate("Encryption Method"))
o:value("table")
o:value("rc4")
o:value("rc4-md5")
o:value("aes-128-cfb")
o:value("aes-192-cfb")
o:value("aes-256-cfb")
o:value("bf-cfb")
o:value("cast5-cfb")
o:value("des-cfb")
o:value("camellia-128-cfb")
o:value("camellia-192-cfb")
o:value("camellia-256-cfb")
o:value("idea-cfb")
o:value("rc2-cfb")
o:value("seed-cfb")
o:value("salsa20")
o:value("chacha20")
o:depends("use_conf_file", "")
o = s:option(Value, "timeout", translate("Connection Timeout"))
o.datatype = "range(0,3600)"
o.placeholder = "
o:depends("use_conf_file", "")
o = s:option(Flag, "local_enable", translate("Enable Local"))
o.rmempty = false
o = s:option(Value, "ss_local_port", translate("Port"))
o.datatype = "range(1,65535)"
o:depends(")
o = s:option(Flag, "redir_enable", translate("Enable Redirect"))
o.rmempty = false
o = s:option(Value, "ss_redir_port", translate("Port"))
o.datatype = "range(1,65535)"
o:depends(")
ignore_list = s:option(Value, "ignore_list", translate("Proxy Ignore List"))
o = s:option(Value, "ignore_list", translate("Proxy Method"))
o:value("/dev/null", translate("Global Proxy"))
o:value("/etc/shadowsocks/ignore.list", translate("Ignore List"))
o.default = "/etc/shadowsocks/ignore.list"
o.rmempty = false
o = s:option(Flag, "udp_relay", translate("Proxy Protocol"))
o = s:option(Flag, "tunnel_enable", translate("Enable"))
o.default =
o.rmempty = false
o = s:option(Value, "tunnel_port", translate("UDP Local Port"))
o.datatype = "port"
o.default =
o.placeholder =
o = s:option(Value, "tunnel_forward",
translate("Forwarding Tunnel"),
translate("Setup a local port forwarding tunnel [addr:port]"))
o.default = "8.8.4.4:53"
o.placeholder = "8.8.4.4:53"
-- LAN Access Control
s = m:section(TypedSection, "shadowrock", translate("LAN Access Control"))
s.anonymous = true
o = s:option(ListValue, "lan_ac_mode", translate("Access Control Mode"))
o:value(", translate("Off"))
o:value(", translate("Whitelist"))
o:value(", translate("Blacklist"))
o.default =
o.rmempty = false
o = s:option(DynamicList, "lan_ac_ip", translate("LAN IP Address"))
o.datatype = "ipaddr"
o:depends()
o:depends()
local apply = luci.http.formvalue("cbi.apply")
if apply then
io.popen("/etc/init.d/shadowrock restart")
end
return m
/etc/config 下新增 shadowrock
config shadowrock
option ignore_list '/etc/chinadns_chnroute.txt'
option lan_ac_mode '
option use_conf_file '
option server_port '
option password 'pwd2016'
option encrypt_method 'aes-256-cfb'
option local_enable '
option ss_local_port '
option server 'milton.somewhere.tv'
option timeout '
/etc/init.d 下新增shadowrock, 需要chmod +x 变为可执行
#!/bin/sh /etc/rc.common
# shadowrock启动脚本,修改自shadowsocks-spec项目.感谢原作者的辛勤付出
# Copyright (c) GuoGuo <gch981213@gmail.com>
START=
STOP=
SERVICE_USE_PID=
SERVICE_WRITE_PID=
SERVICE_DAEMONIZE=
EXTRA_COMMANDS="rules"
CONFIG_FILE=/var/etc/shadowrock.json
get_config() {
config_get_bool local_enable $ local_enable
config_get_bool redir_enable $ redir_enable
config_get ss_local_port $ ss_local_port '
config_get_bool use_conf_file $ use_conf_file
config_get config_file $ config_file '/etc/shadowrock/config.json'
config_get server $ server
config_get server_port $ server_port
config_get local $ local '0.0.0.0'
config_get ss_redir_port $ ss_redir_port '
config_get password $ password
config_get timeout $ timeout '
config_get encrypt_method $ encrypt_method
config_get ignore_list $ ignore_list '/dev/null'
config_get udp_relay $ udp_relay '
config_get_bool tunnel_enable $ tunnel_enable
config_get tunnel_port $ tunnel_port '
config_get tunnel_forward $ tunnel_forward '8.8.8.8:53'
config_get lan_ac_mode $ lan_ac_mode
config_get lan_ac_ip $ lan_ac_ip
config_get wan_bp_ip $ wan_bp_ip
config_get wan_fw_ip $ wan_fw_ip
config_get ipt_ext $ ipt_ext
}
start_rules() {
local ac_args
if [ -n "$lan_ac_ip" ]; then
case $lan_ac_mode in
) ac_args="w$lan_ac_ip"
;;
) ac_args="b$lan_ac_ip"
;;
esac
fi
/usr/bin/ss-rules \
-c "$CONFIG_FILE" \
-i "$ignore_list" \
-a "$ac_args" \
-b "$wan_bp_ip" \
-w "$wan_fw_ip" \
-e "$ipt_ext" \
-o $udp
return $?
}
start_local() {
service_start /usr/bin/ss-local \
-c "$CONFIG_FILE" \
-b "$local" \
-l "$ss_local_port"
return $?
}
start_redir() {
service_start /usr/bin/ss-redir \
-c "$CONFIG_FILE" \
-b "$local" $udp
return $?
}
start_tunnel() {
service_start /usr/bin/ss-tunnel \
-c "$CONFIG_FILE" \
-b "$local" \
-l "$tunnel_port" \
-L "$tunnel_forward" \
-u
return $?
}
genconf() {
config_load shadowrock
config_foreach get_config shadowrock
[ $local_enable -eq ] && [ $redir_enable -eq ] && [ $tunnel_enable -eq ] && {
echo "Everything are disabled.Exit now."
exit
}
[ ] && udp="-u"
mkdir -p $(dirname $CONFIG_FILE)
]; then
cat $config_file >$CONFIG_FILE
else
: ${server:?}
: ${server_port:?}
: ${password:?}
: ${encrypt_method:?}
cat <<-EOF >$CONFIG_FILE
{
"server": "$server",
"server_port": $server_port,
"local_port": $ss_redir_port,
"password": "$password",
"timeout": $timeout,
"method": "$encrypt_method"
}
EOF
fi
}
boot() {
until iptables-save -t nat | grep -q "^:zone_lan_prerouting"; do
done
start
}
start() {
genconf
[ ] && start_rules && start_redir
[ ] && start_local
[ ] && start_tunnel
}
stop() {
/usr/bin/ss-rules -f
service_stop /usr/bin/ss-local
service_stop /usr/bin/ss-redir
service_stop /usr/bin/ss-tunnel
rm -f $CONFIG_FILE
}
#重启防火墙时重载防火墙规则。
#该函数只会由firewall.include脚本判断存在ss-redir后执行所以不再重启redir
rules() {
genconf
start_rules
}
然后刷新你的luci控制台就能看到新的菜单项目了
在保存配置时, 这个/etc/init.d/shadowrock 脚本会同时在 /var/etc/shadowsock.json下写入配置信息, 同时用ss-local启动
启动的程序命令行可以通过 ps w 查看
Update 2017-01-04
如果路由器上已经运行了ss-local, 在局域网里的windows机器上如果再通过ss客户端直接连上ss服务, 容易在服务端出现
/usr/local/bin/ss-server[]: failed to handshake with [IP]
这样的错误, 在多次出现后, IP会被列入blocked list
服务端的ss已经支持One Time Auth, 但是开启后, 只有windows客户端可以连, OpenWrt和iOS的wingy包含的ss可能版本过低, 都只能connect, 但是会被reset, 无法使用.
Update 2017-01-07
在路由器上直接修改lua文件后, 如果需要让更改立即生效, 要删除对应的缓存文件, 可以使用命令
rm -r /tmp/luci-indexcache /tmp/luci-modulecache/
极路由2(极贰)在OpenWrt下定制自己的ss服务的更多相关文章
- 极路由2(极贰)ROOT并刷了OpenWrt
绕过官方的ROOT 查了一下root教程, 如果还需要保留保修, 则需要自己想办法回退版本, 下载搜狐插件到sd卡, 找个linux系统修改sd卡上程序的执行权限, 然后才能开启ssh, 具体的方法可 ...
- 教你如何在Drcom下使用路由器上校园网(以广东工业大学、极路由1S HC5661A为例)
免责声明: 在根据本教程进行实际操作时,如因您操作失误导致出现的一切意外,包括但不限于路由器变砖.故障.数据丢失等情况,概不负责: 该技术仅供学习交流,请勿将此技术应用于任何商业行为,所产生的法律责任 ...
- MIPS(极路由1s[mt7620a])平台OpenWrt路由器系统内的Go应用程序开发
起因,由于coolpy5核心转换到go语言开发,所以目前超人正在进行相关的技术攻关,在程序编写方面一切都相对顺利.由于coolpy5是一个真正的商业级性能的系统也考滤到coolpy之前的版本已经确定的 ...
- OpenWrt防火墙配置(极路由)
说明: 1.极路由使用的是OpenWrt做为操作系统,本身就是一个Linux,包管理使用opkg,只是改了一个界面而已. 2.Linux下的防火墙最终都会归iptables进行管理,OpenWrt的防 ...
- OpenWrt-19.07.2 For HC5861(极路由3) /HiWiFi/Gee最新固件,极路由3刷openwrt
OpenWrt For HiWiFi(HC5861) 自编译精减固件,极路由3自用固件 HC5861-uboot.bin v19.07.2 下载 支持 NTFS 读写 支持 Wi-Fi 5G 驱动 默 ...
- 如何用极路由+OpenWrt+SDR电视棒搭建SDR服务器
0×00 前言 近期因为有个从异地捕获无线信号的需求,便尝试着用OpenWrt+公网IP搭建了一台SDR服务器.如果有小伙伴嫌SDR硬件天线看起来太乱.或者电脑没有足够的USB接口也可在局域网搭建SD ...
- 如何用极路由+OpenWrt+RTL电视棒搭建一台SDR服务器,并隐秘地捕获和传输数据
0×00 前言 近期因为有个从异地捕获无线信号的需求,便尝试着用OpenWrt+公网IP搭建了一台SDR服务器.如果有小伙伴嫌SDR硬件天线看起来太乱.或者电脑没有足够的USB接口也可在局域网搭建SD ...
- 极路由U-boot解锁刷root固件教程,root后可刷华硕、如意云等多种固件,附赠全套刷软
9008正式版固件将会封堵此漏洞,想root的同学尽快了.安装新工具箱里的root保留,可升级官方最新固件并保留root. 此方法并非本人原创,只是将root的过程和经验做个总结,比较适合菜鸟做参考, ...
- 极路由4pro(HC5962)安装python
基本配置 其实极路由4.极路由4 pro.极路由B70都是一个型号的(HC5962) CPU:MT7621AT + MT7612EN + 7603EN 内存:256MB DDR3 RAM 闪存:128 ...
随机推荐
- Handler系列之创建子线程Handler
上一篇我介绍了Handler机制的工作原理,默认情况下,ActivityThread类为我们创建的了主线程的Looper和消息队列,所以当你创建Handler之后发送消息的时候,消息的轮训和handl ...
- Oracle基础维护02-表、主键、索引、表结构维护手册
目录 一.项目新建表.主键.索引注意事项 二.举例说明建表.主建.索引的操作方法 2.1 设定需求如下 2.1.1 查询数据库有哪些表空间 2.1.2 本文档假设数据库有这两个业务用户的表空间 2.2 ...
- 读书笔记--SQL必知必会05--高级数据过滤
5.1 组合使用WHERE子句 操作符(operator)也称为逻辑操作符(logical operator),用来联结或改变WHERE子句中的过滤条件. 5.1.1 AND操作符 在WHERE子句中 ...
- 【分布式】Zookeeper请求处理
一.前言 在前面学习了Zookeeper中服务器的三种角色及其之间的通信,接着学习对于客户端的一次请求,Zookeeper是如何进行处理的. 二.请求处理 2.1 会话创建请求 Zookeeper服务 ...
- js获取屏幕宽高
最近想自己实现一个全屏滚动. 结果一开始就遇到了问题.因为不知道如何获取一个页面屏幕的高度. 网上所有的博客都是复制粘贴. 网页可见区域宽:document.body.clientWidth 网页可见 ...
- SQLServer学习笔记系列1
一.前言 一直自己没有学习做笔记的习惯,所以为了加强自己对知识的深入理解,决定将学习笔记写下来,希望向各位大牛们学习交流! 不当之处请斧正!在此感谢!这边就先从学习Sqlserver写起,自己本身对数 ...
- 用Crontab打造简易工作流引擎
1. 引言 众所周知,Oozie(1, 2)是基于时间条件与数据生成来做工作流调度的,但是Oozie的数据触发条件只支持HDFS路径,故而面临着这样的问题: 无法判断Hive partition是否已 ...
- 随便记录下系列 - node->express
随便记录下系列 - node->express 文章用啥写?VsCode. 代码用啥写?VsCode. 编辑器下载:VsCode 一.windows下安装node.js环境: 下载地址 相比以前 ...
- mysql substring函数截取值后赋给一个declare变量
今天写的一个mysql存储过程涉及到对一个传入参数的字符串截取,然后需要判断截取字符串进行一系列操作,最开始用select subtring() into 这样的方法将截取值赋于declare变量直 ...
- 织梦cms常用标签
dedecms简介:织梦内容管理系统(DedeCms) 以简单.实用.开源而闻名,是国内知名的PHP开源网站管理系统,也是使用用户较多的PHP类CMS系统,在经历多年的发展,目前的版本无论在功能,还是 ...