极路由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({"admin", "services", "shadowrock"}, cbi("shadowrock"), _("Shadowsocks Client"), 100)
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 = ""
local ss_local_on = (luci.sys.call("pidof ss-local > /dev/null") == 0)
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
local ss_redir_on = (luci.sys.call("pidof ss-redir > /dev/null") == 0)
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
local ss_tunnel_on = (luci.sys.call("pidof ss-tunnel > /dev/null") == 0)
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 = 1
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("use_conf_file", 1)

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 = "60"
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("local_enable", "1")

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("redir_enable", "1")

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 = 1
o.rmempty = false

o = s:option(Value, "tunnel_port", translate("UDP Local Port"))
o.datatype = "port"
o.default = 5353
o.placeholder = 5353

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("0", translate("Off"))
o:value("1", translate("Whitelist"))
o:value("2", translate("Blacklist"))
o.default = 0
o.rmempty = false

o = s:option(DynamicList, "lan_ac_ip", translate("LAN IP Address"))
o.datatype = "ipaddr"
o:depends("lan_ac_mode", 1)
o:depends("lan_ac_mode", 2)

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 ‘0‘
    option use_conf_file ‘0‘
    option server_port ‘18001‘
    option password ‘pwd2016‘
    option encrypt_method ‘aes-256-cfb‘
    option local_enable ‘1‘
    option ss_local_port ‘18001‘
    option server ‘milton.somewhere.tv‘
    option timeout ‘120‘

/etc/init.d 下新增shadowrock, 需要chmod +x 变为可执行

#!/bin/sh /etc/rc.common
# shadowrock启动脚本,修改自shadowsocks-spec项目.感谢原作者的辛勤付出
# Copyright (c) 2015 GuoGuo <[email protected]>

START=90
STOP=15

SERVICE_USE_PID=1
SERVICE_WRITE_PID=1
SERVICE_DAEMONIZE=1
EXTRA_COMMANDS="rules"
CONFIG_FILE=/var/etc/shadowrock.json

get_config() {
    config_get_bool local_enable $1 local_enable
    config_get_bool redir_enable $1 redir_enable
    config_get ss_local_port $1 ss_local_port ‘1080‘
    config_get_bool use_conf_file $1 use_conf_file
    config_get config_file $1 config_file ‘/etc/shadowrock/config.json‘
    config_get server $1 server
    config_get server_port $1 server_port
    config_get local $1 local ‘0.0.0.0‘
    config_get ss_redir_port $1 ss_redir_port ‘1081‘
    config_get password $1 password
    config_get timeout $1 timeout ‘60‘
    config_get encrypt_method $1 encrypt_method
    config_get ignore_list $1 ignore_list ‘/dev/null‘
    config_get udp_relay $1 udp_relay ‘1‘
    config_get_bool tunnel_enable $1 tunnel_enable
    config_get tunnel_port $1 tunnel_port ‘1153‘
    config_get tunnel_forward $1 tunnel_forward ‘8.8.8.8:53‘
    config_get lan_ac_mode $1 lan_ac_mode
    config_get lan_ac_ip $1 lan_ac_ip
    config_get wan_bp_ip $1 wan_bp_ip
    config_get wan_fw_ip $1 wan_fw_ip
    config_get ipt_ext $1 ipt_ext
}

start_rules() {
    local ac_args

    if [ -n "$lan_ac_ip" ]; then
        case $lan_ac_mode in
            1) ac_args="w$lan_ac_ip"
            ;;
            2) 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 0 ] && [ $redir_enable -eq 0 ] && [ $tunnel_enable -eq 0 ] && {
        echo "Everything are disabled.Exit now."
        exit 1
    }
    [ "$udp_relay" = 1 ] && udp="-u"
    mkdir -p $(dirname $CONFIG_FILE)

    if [ "$use_conf_file" = 1 ]; 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
        sleep 1
    done
    start
}

start() {
    genconf
    [ "$redir_enable" = 1 ] && start_rules && start_redir
    [ "$local_enable" = 1 ] && start_local
    [ "$tunnel_enable" = 1 ] && 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 查看

时间: 2024-10-19 17:21:17

极路由2(极贰)在OpenWrt下定制自己的ss服务的相关文章

极路由1s(mt7620a)OpenWrt交叉编译go程序

起因,由于coolpy5核心转换到go语言开发,所以目前超人正在进行相关的技术攻关,在程序编写方面一切都相对顺利.由于coolpy5是一个真正的商业级性能的系统也考滤到coolpy之前的版本已经确定的coolpy是支持以家庭路由器为雾计算节点直接实现智能家居或智慧农业的离线解决方案,所以超人才进行了这一次技术预测试,也为以后coolpy这环节的闭环作准备工作.以下文章关于openwrt相关的基础将会略过,看不懂的朋友请自行查找相关知识点. 略过知识点: 1.linux基础(交叉编译基础) 2.o

OpenWrt防火墙配置(极路由)

说明: 1.极路由使用的是OpenWrt做为操作系统,本身就是一个Linux,包管理使用opkg,只是改了一个界面而已. 2.Linux下的防火墙最终都会归iptables进行管理,OpenWrt的防火墙机制同样也是,最上层采用了自己基于UCI标准的配置方法管理防火墙firewall,最终写入到iptables. 3.UCI是OpenWrt统一配置文件的标准,真心不太喜欢这种语法,没iptables来的清晰. 4.OpenWrt基于firewall的配置,由于涉及到多个网口,有Wan和Lan这些

如何用极路由+OpenWrt+SDR电视棒搭建SDR服务器

0×00 前言 近期因为有个从异地捕获无线信号的需求,便尝试着用OpenWrt+公网IP搭建了一台SDR服务器.如果有小伙伴嫌SDR硬件天线看起来太乱.或者电脑没有足够的USB接口也可在局域网搭建SDR服务器通过TCP/IP调用SDR硬件. HiWiFi router 0×01 获取root 刚买的极路由关闭了root功能,需要开启路由的开发者模式后才能通过SSH连入shell交互界面.申请开发者模式流程:进入路由器后台-云平台-路由器信息-高级设置-申请-绑定手机-输入验证码-绑定微信-微信账

极路由安全设计架构分析

0×00 前言 现代智能路由器是目前物联网发展链条上一个不可或缺的重要组成部分,搞清楚其架构设计对将来设计物联网有深远的影响,当然为更安全的设计物联网架构起到关键作用.本文将针对智能路由器的代表“极路由”的安全设计架构进行详细的分析. 现代智能路由器代表:极路由 HiWiFi OS,说它智能主要表现在可以通过手机App远程管理家中的路由器. 根据公开资料,可以大致了解HiWiFi 整个系统架构. 那么,我们需要分析目标: 由于连接公有云和手机App的都是HiWiFi路由器,所以对其固件的分析是非

极路由电脑远程开机

这算是一个老问题了,互联网上的方法一堆!前些天自己也折腾了下,主意是要取家里面的电脑,一天到晚天着耗电,关机了,要是想取东西取不出来!所以自然需要远程开机了,网上有好多说远程开机软件之类的,有些要收费有些不收费,但是实现不了!下面看看我的做法! 工具/原料 极路由一台 支持wake on lan的网卡一块(主要网卡支持即可) 方法/步骤 1 1.准备支持wake on lan网卡,大多数电脑主板自带的集成网卡都是支持的!大家先到BIOS里面去看下!有没这个选择项,如果有则说明支持该功能! 2 2

极路由的一次尝试

为了解决家里路由器覆盖不全,某些角落信号收不到的问题,在京东上下单买了一个极路由 1S,它号称有下面功能: 1.智能穿墙技术,让信号更强,这个就是我看重的 2.多种插件让上网更快,比較喜欢的就是它的视频广告拦截功能 3.还有能够在手机上远程操控功能,听上去都非常美好. 好吧,真机拿来就试了下,外壳是铝合金的,还带SD卡,看上去是蛮高大上的. 然后就是測试了,首先打开路由器,WLAN插上外网网线,家里之前用的是TP-LINK,好多年了,电信光纤. 设置确实比其他路由器简单,3步就完毕了, 安装了一

产品经理的日常:极路由使用评测

前几天半夜刷知乎,看到许多朋友推极路由,我简单的了解了一下,这是一款可以往路由里安装APP的设备,我正是因为看中这个才下刀买入的. 看过不少朋友用过极路由的工程机,不管是从外壳到内部用料上,都没有偷工减料之说.好吧,现在开始,开箱. 有点苹果的味道,很简单,不多说直接拆封 主机整体很小巧,跟旁边的iPhone5相差不大,外形规格122mm×85mm×17mm(长×宽×高) 一根网线,一根USB电源线,USB适配插头 保修卡说明书,合格证都在一个信封里. 后面有三个端口分别是1WAN+2LAN,1

极路由 斐讯K2 Newifi 华硕固件 实现ipv6穿透方法

摘要:校园网带ipv6协议,可以用来登六维,玩PT.传统路由器只能实现ipv4的路由功能,不能实现ipv6路由功能.我这边的校园网是ipv4需要登陆账号,ipv6原生免费.传统方法需要使用桥接模式,但是每连一台设备都需要登陆一个ipv4账号.那么如何实现路由器只能一个账号,既能使用ipv6又能使用ipv4成为一个可以研究的问题. 设备:极路由 斐讯K2 Newifi等等,要求刷华硕固件 方法: 方法一(转载地址:http://webcache.googleusercontent.com/sear

极路由安全设计分析姐妹篇

开篇想说两件事情: 一.非常感谢Freebuf大牛们,在其提供的网站上找到了HiWiFi固件.其中9003版本squashfs文件系统上的lua代码没有经过预编译处理,这对我们基于源码分析极路由提供了可能.地址 二.经过修炼发现HiWiFi固件解压问题,其实可以使用Windows操作系统下面的开源软件7zip解压. 那么,本期的重点是分析HiWiFi lua源码安全设计部分. 0×01 分析思路 一.了解OpenWRT Web认证过程. 二.了解HiWiFi web认证过程和HiWiFi Clo