From d278bf170ad0466d97a4526af07b499185967e9c Mon Sep 17 00:00:00 2001 From: Michael Date: Tue, 6 Feb 2018 20:48:54 +0100 Subject: [PATCH] net/shadowsocks: add ss-local, split services (#528) --- net/shadowsocks/Makefile | 2 +- .../src/etc/inc/plugins.inc.d/shadowsocks.inc | 13 ++++ .../src/etc/rc.d/opnsense-ss-local | 32 ++++++++++ .../Shadowsocks/Api/LocalController.php | 37 +++++++++++ .../Api/LocalserviceController.php | 39 ++++++++++++ .../OPNsense/Shadowsocks/LocalController.php | 38 ++++++++++++ .../OPNsense/Shadowsocks/forms/local.xml | 38 ++++++++++++ .../app/models/OPNsense/Shadowsocks/Local.php | 35 +++++++++++ .../app/models/OPNsense/Shadowsocks/Local.xml | 50 +++++++++++++++ .../models/OPNsense/Shadowsocks/Menu/Menu.xml | 5 +- .../app/views/OPNsense/Shadowsocks/local.volt | 61 +++++++++++++++++++ .../conf/actions.d/actions_shadowsocks.conf | 24 ++++++++ .../actions.d/actions_shadowsockslocal.conf | 23 +++++++ .../templates/OPNsense/Shadowsocks/+TARGETS | 2 + .../templates/OPNsense/Shadowsocks/ss_local | 6 ++ .../OPNsense/Shadowsocks/ss_local.conf | 10 +++ 16 files changed, 413 insertions(+), 2 deletions(-) create mode 100644 net/shadowsocks/src/etc/rc.d/opnsense-ss-local create mode 100644 net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/Api/LocalController.php create mode 100644 net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/Api/LocalserviceController.php create mode 100644 net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/LocalController.php create mode 100644 net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/forms/local.xml create mode 100644 net/shadowsocks/src/opnsense/mvc/app/models/OPNsense/Shadowsocks/Local.php create mode 100644 net/shadowsocks/src/opnsense/mvc/app/models/OPNsense/Shadowsocks/Local.xml create mode 100644 net/shadowsocks/src/opnsense/mvc/app/views/OPNsense/Shadowsocks/local.volt create mode 100644 net/shadowsocks/src/opnsense/service/conf/actions.d/actions_shadowsockslocal.conf create mode 100644 net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/ss_local create mode 100644 net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/ss_local.conf diff --git a/net/shadowsocks/Makefile b/net/shadowsocks/Makefile index f9df9fb16..058651e22 100644 --- a/net/shadowsocks/Makefile +++ b/net/shadowsocks/Makefile @@ -1,5 +1,5 @@ PLUGIN_NAME= shadowsocks -PLUGIN_VERSION= 0.1 +PLUGIN_VERSION= 0.2 PLUGIN_COMMENT= Secure socks5 proxy PLUGIN_DEPENDS= shadowsocks-libev PLUGIN_MAINTAINER= m.muenz@gmail.com diff --git a/net/shadowsocks/src/etc/inc/plugins.inc.d/shadowsocks.inc b/net/shadowsocks/src/etc/inc/plugins.inc.d/shadowsocks.inc index 29e537173..7ec60468e 100644 --- a/net/shadowsocks/src/etc/inc/plugins.inc.d/shadowsocks.inc +++ b/net/shadowsocks/src/etc/inc/plugins.inc.d/shadowsocks.inc @@ -45,5 +45,18 @@ function shadowsocks_services() ); } + if (isset($config['OPNsense']['shadowsocks']['local']['enabled']) && $config['OPNsense']['shadowsocks']['local']['enabled'] == 1) { + $services[] = array( + 'description' => gettext('shadowsockslocal daemon'), + 'configd' => array( + 'restart' => array('shadowsockslocal restart'), + 'start' => array('shadowsockslocal start'), + 'stop' => array('shadowsockslocal stop'), + ), + 'name' => 'shadowsockslocal', + 'pidfile' => '/var/run/ss-local.pid' + ); + } + return $services; } diff --git a/net/shadowsocks/src/etc/rc.d/opnsense-ss-local b/net/shadowsocks/src/etc/rc.d/opnsense-ss-local new file mode 100644 index 000000000..c68761d69 --- /dev/null +++ b/net/shadowsocks/src/etc/rc.d/opnsense-ss-local @@ -0,0 +1,32 @@ +#!/bin/sh +# $FreeBSD$ + +# PROVIDE: ss-local +# REQUIRE: LOGIN cleanvar +# KEYWORD: shutdown + +# Add the following lines to /etc/rc.conf to enable shadowsocks-libev: +# ss_local_enable (bool): Set to "NO" by default. +# Set to "YES" to enable ss-local. +# ss_local_config (path): Shadowsocks config file. +# Defaults to "/usr/local/etc/shadowsocks-libev/local.json" + + +. /etc/rc.subr + +name="ss_local" +rcvar=ss_local_enable + + +load_rc_config $name + +: ${ss_local_enable:="NO"} +: ${ss_local_config="/usr/local/etc/shadowsocks-libev/local.json"} + +command="/usr/local/bin/ss-local" +pidfile="/var/run/ss-local.pid" +required_files="${ss_local_config}" + +command_args="-f $pidfile -c $ss_local_config" + +run_rc_command "$1" diff --git a/net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/Api/LocalController.php b/net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/Api/LocalController.php new file mode 100644 index 000000000..1e65ab4ee --- /dev/null +++ b/net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/Api/LocalController.php @@ -0,0 +1,37 @@ +view->localForm = $this->getForm("local"); + $this->view->pick('OPNsense/Shadowsocks/local'); + } +} diff --git a/net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/forms/local.xml b/net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/forms/local.xml new file mode 100644 index 000000000..853ea86b7 --- /dev/null +++ b/net/shadowsocks/src/opnsense/mvc/app/controllers/OPNsense/Shadowsocks/forms/local.xml @@ -0,0 +1,38 @@ +
+ + local.enabled + + checkbox + This will activate the ShadowSocks Local instance. This lets you tunnel your application to a public ShadowSocks server. + + + local.serveraddress + + text + IP address or hostname of the remote ShadowSocks server. + + + local.serverport + + text + Port of the remote server. + + + local.localport + + text + The local port of the daemon, default is fine. + + + local.password + + text + Password to authenticate against the server. + + + local.cipher + + dropdown + Choose the cipher to use for encryption. + +
diff --git a/net/shadowsocks/src/opnsense/mvc/app/models/OPNsense/Shadowsocks/Local.php b/net/shadowsocks/src/opnsense/mvc/app/models/OPNsense/Shadowsocks/Local.php new file mode 100644 index 000000000..02e6cafca --- /dev/null +++ b/net/shadowsocks/src/opnsense/mvc/app/models/OPNsense/Shadowsocks/Local.php @@ -0,0 +1,35 @@ + + //OPNsense/shadowsocks/local + Shadowsocks configuration + 1.0.0 + + + 0 + Y + + + 127.0.0.1 + Y + Please provide a valid hostname or IP address. + + + 8388 + Y + 1 + 65535 + Please provide a valid port number between 1 and 65535. + + + 1080 + Y + 1 + 65535 + Please provide a valid port number between 1 and 65535. + + + password + N + + + AES-256-CFB + Y + + AES-256-CFB + AES-256-GCM + AES-256-CTR + AES-192-CFB + AES-192-GCM + AES-192-CTR + AES-128-CFB + AES-128-GCM + AES-128-CTR + ChaCha20-IETF-Poly1305 + + + + diff --git a/net/shadowsocks/src/opnsense/mvc/app/models/OPNsense/Shadowsocks/Menu/Menu.xml b/net/shadowsocks/src/opnsense/mvc/app/models/OPNsense/Shadowsocks/Menu/Menu.xml index 5f4abeb94..c49d97e87 100644 --- a/net/shadowsocks/src/opnsense/mvc/app/models/OPNsense/Shadowsocks/Menu/Menu.xml +++ b/net/shadowsocks/src/opnsense/mvc/app/models/OPNsense/Shadowsocks/Menu/Menu.xml @@ -1,5 +1,8 @@ - + + + + diff --git a/net/shadowsocks/src/opnsense/mvc/app/views/OPNsense/Shadowsocks/local.volt b/net/shadowsocks/src/opnsense/mvc/app/views/OPNsense/Shadowsocks/local.volt new file mode 100644 index 000000000..c763ecabe --- /dev/null +++ b/net/shadowsocks/src/opnsense/mvc/app/views/OPNsense/Shadowsocks/local.volt @@ -0,0 +1,61 @@ +{# + +OPNsense® is Copyright © 2014 – 2018 by Deciso B.V. +This file is Copyright © 2018 by Michael Muenz +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, +OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +#} +
+ {{ partial("layout_partials/base_form",['fields':localForm,'id':'frm_local_settings'])}} +
+
+ +
+
+ + diff --git a/net/shadowsocks/src/opnsense/service/conf/actions.d/actions_shadowsocks.conf b/net/shadowsocks/src/opnsense/service/conf/actions.d/actions_shadowsocks.conf index 9037b971c..825825bf1 100644 --- a/net/shadowsocks/src/opnsense/service/conf/actions.d/actions_shadowsocks.conf +++ b/net/shadowsocks/src/opnsense/service/conf/actions.d/actions_shadowsocks.conf @@ -21,3 +21,27 @@ command:/usr/local/etc/rc.d/shadowsocks_libev status;exit 0 parameters: type:script_output message:request Shadowsocks status + +[start-local] +command:/usr/local/etc/rc.d/opnsense-ss-local start +parameters: +type:script +message:starting Shadowsocks Local + +[stop-local] +command:/usr/local/etc/rc.d/opnsense-ss-local stop +parameters: +type:script +message:stopping Shadowsocks Local + +[restart-local] +command:/usr/local/etc/rc.d/opnsense-ss-local restart +parameters: +type:script +message:restarting Shadowsocks Local + +[status-local] +command:/usr/local/etc/rc.d/opnsense-ss-local status;exit 0 +parameters: +type:script_output +message:request Shadowsocks Local status diff --git a/net/shadowsocks/src/opnsense/service/conf/actions.d/actions_shadowsockslocal.conf b/net/shadowsocks/src/opnsense/service/conf/actions.d/actions_shadowsockslocal.conf new file mode 100644 index 000000000..a1c540495 --- /dev/null +++ b/net/shadowsocks/src/opnsense/service/conf/actions.d/actions_shadowsockslocal.conf @@ -0,0 +1,23 @@ +[start] +command:/usr/local/etc/rc.d/opnsense-ss-local start +parameters: +type:script +message:starting Shadowsocks Local + +[stop] +command:/usr/local/etc/rc.d/opnsense-ss-local stop +parameters: +type:script +message:stopping Shadowsocks Local + +[restart] +command:/usr/local/etc/rc.d/opnsense-ss-local restart +parameters: +type:script +message:restarting Shadowsocks Local + +[status] +command:/usr/local/etc/rc.d/opnsense-ss-local status;exit 0 +parameters: +type:script_output +message:request Shadowsocks Local status diff --git a/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/+TARGETS b/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/+TARGETS index b1f7754b5..bb1dc94e9 100644 --- a/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/+TARGETS +++ b/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/+TARGETS @@ -1,2 +1,4 @@ shadowsocks_libev:/etc/rc.conf.d/shadowsocks_libev shadowsocks.conf:/usr/local/etc/shadowsocks-libev/config.json +ss_local:/etc/rc.conf.d/ss_local +ss_local.conf:/usr/local/etc/shadowsocks-libev/local.json diff --git a/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/ss_local b/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/ss_local new file mode 100644 index 000000000..258b305d0 --- /dev/null +++ b/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/ss_local @@ -0,0 +1,6 @@ +{% if helpers.exists('OPNsense.shadowsocks.local.enabled') and OPNsense.shadowsocks.local.enabled == '1' %} +ss_local_enable="YES" +ss_local_flags="" +{% else %} +ss_local_enable="NO" +{% endif %} diff --git a/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/ss_local.conf b/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/ss_local.conf new file mode 100644 index 000000000..1da2ac526 --- /dev/null +++ b/net/shadowsocks/src/opnsense/service/templates/OPNsense/Shadowsocks/ss_local.conf @@ -0,0 +1,10 @@ +{% if helpers.exists('OPNsense.shadowsocks.local.enabled') and OPNsense.shadowsocks.local.enabled == '1' %} +{ + "server":"{{ OPNsense.shadowsocks.local.serveraddress }}", + "server_port":{{ OPNsense.shadowsocks.local.serverport }}, + "local_port":{{ OPNsense.shadowsocks.local.localport }}, + "password":"{{ OPNsense.shadowsocks.local.password }}", + "timeout":60, + "method":"{{ OPNsense.shadowsocks.local.cipher }}" +} +{% endif %}