1
0
Fork 0
mirror of https://github.com/Ysurac/openmptcprouter-feeds.git synced 2025-02-15 03:51:51 +00:00
openmptcprouter-feeds/openmptcprouter/files/etc/init.d/openmptcprouter-vps

378 lines
14 KiB
Text
Raw Normal View History

2018-11-27 14:22:54 +00:00
#!/bin/sh /etc/rc.common
# Copyright (C) 2018 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
# Released under GPL 3. See LICENSE for the full terms.
START=99
USE_PROCD=1
_parse_result() {
result=$("echo $1 | jsonfilter -q -e '@.result'")
echo $result
}
_login() {
local username password auth
server="$(uci -q get openmptcprouter.vps.ip)"
[ -z "$server" ] && server="$(uci -q get shadowsocks-libev.sss0.server)"
username="$(uci -q get openmptcprouter.vps.username)"
password="$(uci -q get openmptcprouter.vps.password)"
if [ -z "$token" ]; then
auth=`curl --max-time 10 -s -k -H "Content-Type: application/json" -X POST -d '{"username":"'$username'","password":"'$password'"}' https://$server:65500/login`
[ -z "$auth" ] && return
token="$(echo "$auth" | jsonfilter -q -e '@.token')"
2018-11-29 13:40:15 +00:00
uci -q set openmptcprouter.vps.token="$token"
2018-11-27 14:22:54 +00:00
fi
}
_get_json() {
local route result
route=$1
[ -z "$token" ] && _login
[ -n "$token" ] && {
result=`curl --max-time 10 -s -k -H "Authorization: Bearer $token" https://$server:65500/$route`
echo $result
} || {
echo ''
}
}
_set_json() {
local route result settings
route=$1
settings="$2"
[ -z "$token" ] && _login
[ -n "$token" ] && {
result=`curl --max-time 10 -s -k -H "Authorization: Bearer $token" -H "Content-Type: application/json" -X POST -d "$settings" https://$server:65500/$route`
echo $result
} || {
echo ''
}
}
2018-12-06 12:50:10 +00:00
_set_glorytun_vps() {
local enabled port key
enabled="$(uci -q get glorytun.vpn.enable)"
[ "$enabled" != "1" ] && return
port="$(uci -q get glorytun.vpn.port)"
key="$(uci -q get glorytun.vpn.key)"
[ -z "$key" ] && return
local current_port current_key
[ -z "$vps_config" ] && vps_config=$(_get_json "config")
[ -z "$vps_config" ] && return
current_port="$(echo "$vps_config" | jsonfilter -q -e '@.glorytun.port')"
current_key="$(echo "$vps_config" | jsonfilter -q -e '@.glorytun.key')"
if [ "$current_port" != "$port" ] || [ "$current_key" != "$key" ]; then
local settings
settings='{"port": '$port',"key":"'$key'"}'
_set_json "glorytun" "$settings"
fi
}
_set_openvpn_vps() {
local enabled port key
enabled="$(uci -q get openvpn.omr.enabled)"
[ "$enabled" != "1" ] && return
port="$(uci -q get openvpn.omr.port)"
keyfile="$(uci -q get openvpn.omr.secret)"
if [ -n "$keyfile" ]; then
key="$(cat $keyfile | base64)"
else
key=""
fi
[ -z "$key" ] && return
local current_port current_key
[ -z "$vps_config" ] && vps_config=$(_get_json "config")
[ -z "$vps_config" ] && return
current_port="$(echo "$vps_config" | jsonfilter -q -e '@.openvpn.port')"
current_key="$(echo "$vps_config" | jsonfilter -q -e '@.openvpn.key')"
if [ "$current_port" != "$port" ] || [ "$current_key" != "$key" ]; then
local settings
settings='{"port": '$port',"key":"'$key'"}'
_set_json "openvpn" "$settings"
fi
}
_set_ss_server_vps() {
2018-11-27 14:22:54 +00:00
local disabled port server key method
config_get disabled $1 disabled
[ "$disabled" = "1" ] && return
config_get port $1 server_port
config_get server $1 server
config_get key $1 key
key="$(echo $key | sed 's/+/-/g; s/\//_/g;')"
2018-12-06 12:50:10 +00:00
[ -z "$key" ] && return
2018-11-27 14:22:54 +00:00
config_get method $1 method
local current_port current_key current_method
[ -z "$vps_config" ] && vps_config=$(_get_json "config")
[ -z "$vps_config" ] && return
current_port="$(echo "$vps_config" | jsonfilter -q -e '@.shadowsocks.port')"
current_key="$(echo "$vps_config" | jsonfilter -q -e '@.shadowsocks.key')"
current_method="$(echo "$vps_config" | jsonfilter -q -e '@.shadowsocks.method')"
2018-12-06 12:50:10 +00:00
if [ "$current_port" != "$port" ] || [ "$current_method" != "$method" ] || [ "$current_key" != "$key" ]; then
2018-11-27 14:22:54 +00:00
local settings
2018-12-06 12:50:10 +00:00
settings='{"port": '$port',"method":"'$method'","fast_open":true,"reuse_port":true,"no_delay":true,"mptcp":true,"key":"'$key'"}'
2018-11-29 13:40:15 +00:00
_set_json "shadowsocks" "$settings"
2018-11-27 14:22:54 +00:00
fi
}
_get_vps_config() {
[ -z "$vps_config" ] && vps_config=$(_get_json "config")
[ -z "$vps_config" ] && return
vps_kernel="$(echo "$vps_config" | jsonfilter -q -e '@.vps.kernel')"
vps_machine="$(echo "$vps_config" | jsonfilter -q -e '@.vps.machine')"
vps_omr_version="$(echo "$vps_config" | jsonfilter -q -e '@.vps.omr_version')"
uci -q batch <<-EOF >/dev/null
set openmptcprouter.vps.kernel=$vps_kernel
set openmptcprouter.vps.machine=$vps_machine
set openmptcprouter.vps.omr_version=$vps_omr_version
commit openmptcprouter
EOF
glorytun_state=0
glorytun_change=0
vpn="$(uci -q get openmptcprouter.settings.vpn)"
if [ "$vpn" = "glorytun_tcp" ]; then
glorytun_state=1
2018-12-06 12:50:10 +00:00
client_ip="$(echo "$vps_config" | jsonfilter -q -e '@.glorytun.tcp.client_ip')"
if [ "$client_ip" != "dhcp" ] && [ -n "$client_ip" ]; then
2018-12-06 12:50:10 +00:00
host_ip="$(echo "$vps_config" | jsonfilter -q -e '@.glorytun.tcp.host_ip')"
if [ "$host_ip" != "$(uci -q get glorytun.vpn.remoteip)" ] || [ "$client_ip" != "$(uci -q get glorytun.vpn.localip)" ]; then
uci -q batch <<-EOF >/dev/null
set glorytun.vpn.localip=$client_ip
set glorytun.vpn.remoteip=$host_ip
EOF
glorytun_change=1
fi
else
if [ "$(uci -q get glorytun.vpn.remoteip)" != "" ] || [ "$(uci -q get glorytun.vpn.localip)" != "" ]; then
uci -q batch <<-EOF >/dev/null
del glorytun.vpn.localip
del glorytun.vpn.remoteip
EOF
glorytun_change=1
fi
fi
fi
if [ "$vpn" = "glorytun_udp" ]; then
glorytun_state=1
2018-12-06 12:50:10 +00:00
client_ip="$(echo "$vps_config" | jsonfilter -q -e '@.glorytun.udp.client_ip')"
if [ "$client_ip" != "dhcp" ] && [ -n "$client_ip" ]; then
2018-12-06 12:50:10 +00:00
host_ip="$(echo "$vps_config" | jsonfilter -q -e '@.glorytun.udp.host_ip')"
if [ "$host_ip" != "$(uci -q get glorytun.vpn.remoteip)" ] || [ "$client_ip" != "$(uci -q get glorytun.vpn.localip)" ]; then
uci -q batch <<-EOF >/dev/null
set glorytun.vpn.localip=$client_ip
set glorytun.vpn.remoteip=$host_ip
EOF
glorytun_change=1
fi
else
if [ "$(uci -q get glorytun.vpn.remoteip)" != "" ] || [ "$(uci -q get glorytun.vpn.localip)" != "" ]; then
uci -q batch <<-EOF >/dev/null
del glorytun.vpn.localip
del glorytun.vpn.remoteip
EOF
glorytun_change=1
fi
fi
fi
if [ "$glorytun_change" != "0" ]; then
uci -q batch <<-EOF >/dev/null
commit glorytun
EOF
/etc/init.d/glorytun restart >/dev/null 2>&1
/etc/init.d/glorytun-udp restart >/dev/null 2>&1
fi
2018-11-27 14:22:54 +00:00
}
_set_redirect_ports_from_vps() {
redirect_ports=$1
[ -z "$vps_config" ] && vps_config=$(_get_json "config")
[ -z "$vps_config" ] && return
redirect_ports_current="$(echo "$vps_config" | jsonfilter -q -e '@.shorewall.redirect_ports')"
[ "$redirect_ports" = "1" ] && redirect_ports_request="enable"
[ "$redirect_ports" = "0" ] && redirect_ports_request="disable"
[ "$redirect_ports_request" != "$redirect_ports_current" ] && {
settings='{"redirect_ports": "'$redirect_ports_request'"}'
2018-11-29 13:40:15 +00:00
_set_json "shorewall" "$settings"
2018-11-27 14:22:54 +00:00
}
}
_set_mptcp_vps() {
local settings
[ -z "$vps_config" ] && vps_config=$(_get_json "config")
[ -z "$vps_config" ] && return
checksum_current="$(echo "$vps_config" | jsonfilter -q -e '@.mptcp.checksum')"
path_manager_current="$(echo "$vps_config" | jsonfilter -q -e '@.mptcp.path_manager')"
scheduler_current="$(echo "$vps_config" | jsonfilter -q -e '@.mptcp.scheduler')"
syn_retries_current="$(echo "$vps_config" | jsonfilter -q -e '@.mptcp.syn_retries')"
congestion_control_current="$(echo "$vps_config" | jsonfilter -q -e '@.network.congestion_control')"
checksum="$(uci -q get network.globals.mptcp_checksum)"
path_manager="$(uci -q get network.globals.mptcp_path_manager)"
scheduler="$(uci -q get network.globals.mptcp_scheduler)"
syn_retries="$(uci -q get network.globals.mptcp_syn_retries)"
congestion="$(uci -q get network.globals.congestion)"
2018-11-29 13:40:15 +00:00
[ -z "$congestion" ] && congestion="bbr"
2018-11-27 14:22:54 +00:00
if [ "$checksum_current" != "$checksum" ] || [ "$path_manager_current" != "$path_manager" ] || [ "$scheduler_current" != "$scheduler" ] || [ "$syn_retries_current" != "$syn_retries" ] || [ "$congestion_control_current" != "$congestion" ]; then
settings='{"checksum": "'$checksum'","path_manager": "'$path_manager'","scheduler": "'$scheduler'","syn_retries": "'$syn_retries'","congestion_control": "'$congestion'"}'
2018-11-29 13:40:15 +00:00
_set_json "mptcp" "$settings"
2018-11-27 14:22:54 +00:00
fi
}
_set_config_from_vps() {
local shadowsocks_disabled vpn glorytun_state redirect shorewall_redirect mlvpn_key openvpn_key
[ -z "$vps_config" ] && vps_config=$(_get_json "config")
[ -z "$vps_config" ] && return
# Shadowsocks settings
shadowsocks_disabled="$(uci -q get openmptcprouter.settings.shadowsocks_disable)"
[ -z "$shadowsocks_disabled" ] && shadowsocks_disabled=0
ss_key="$(echo "$vps_config" | jsonfilter -q -e '@.shadowsocks.key')"
ss_key="$(echo $ss_key | sed 's/-/+/g; s/_/\//g;')"
2018-12-07 14:33:05 +00:00
if [ -n "$ss_key" ] && [ "$ss_key" != "$(uci -q get shadowsocks-libev.sss0.key)" ]; then
2018-11-27 14:22:54 +00:00
ss_method="$(echo "$vps_config" | jsonfilter -q -e '@.shadowsocks.method')"
2018-12-06 12:50:10 +00:00
ss_port="$(echo "$vps_config" | jsonfilter -q -e '@.shadowsocks.port')"
[ -z "$ss_port" ] && ss_port=65101
2018-11-27 14:22:54 +00:00
#ss_no_delay="$(echo "$vps_config" | jsonfilter -q -e '@.shadowsocks.no_delay')"
#ss_fast_open="$(echo "$vps_config" | jsonfilter -q -e '@.shadowsocks.fast_open')"
#ss_reuse_port="$(echo "$vps_config" | jsonfilter -q -e '@.shadowsocks.reuse_port')"
uci -q batch <<-EOF >/dev/null
set shadowsocks-libev.sss0.key=$ss_key
2018-12-06 12:50:10 +00:00
set shadowsocks-libev.sss0.server_port=$ss_port
2018-11-27 14:22:54 +00:00
set shadowsocks-libev.sss0.method=$ss_method
set shadowsocks-libev.sss0.disabled=$shadowsocks_disabled
commit shadowsocks-libev
EOF
/etc/init.d/shadowsocks-libev restart >/dev/null 2>&1
fi
# Glorytun settings
glorytun_key="$(echo "$vps_config" | jsonfilter -q -e '@.glorytun.key')"
2018-12-07 14:33:05 +00:00
if [ -n "$glorytun_key" ] && [ "$glorytun_key" != "$(uci -q get glorytun.vpn.key)" ]; then
2018-11-27 14:22:54 +00:00
vpn="$(uci -q get openmptcprouter.settings.vpn)"
glorytun_state=0
2018-12-04 15:54:43 +00:00
if [ "$vpn" = "glorytun_tcp" ]; then
2018-11-27 14:22:54 +00:00
glorytun_state=1
2018-12-04 15:54:43 +00:00
fi
if [ "$vpn" = "glorytun_udp" ]; then
glorytun_state=1
2018-11-27 14:22:54 +00:00
fi
2018-12-06 12:50:10 +00:00
glorytun_port="$(echo "$vps_config" | jsonfilter -q -e '@.glorytun.port')"
[ -z "$glorytun_port" ] && glorytun_port="65001"
2018-11-27 14:22:54 +00:00
uci -q batch <<-EOF >/dev/null
2018-12-06 12:50:10 +00:00
set glorytun.vpn.port=$glorytun_port
2018-11-27 14:22:54 +00:00
set glorytun.vpn.key=$glorytun_key
set glorytun.vpn.enable=$glorytun_state
commit glorytun
EOF
/etc/init.d/glorytun restart >/dev/null 2>&1
/etc/init.d/glorytun-udp restart >/dev/null 2>&1
fi
# OpenVPN settings
openvpn_key="$(echo "$vps_config" | jsonfilter -q -e '@.openvpn.key')"
[ -n "$openvpn_key" ] && {
echo $openvpn_key | base64 -d > /etc/luci-uploads/openvpn.key
2018-12-06 12:50:10 +00:00
openvpn_port="$(echo "$vps_config" | jsonfilter -q -e '@.openvpn.port')"
[ -z "$openvpn_port" ] && openvpn_port="65001"
2018-11-27 14:22:54 +00:00
uci -q batch <<-EOF >/dev/null
2018-12-06 12:50:10 +00:00
set openvpn.omr.port=$openvpn_port
2018-11-27 14:22:54 +00:00
set openvpn.omr.secret="/etc/luci-uploads/openvpn.key"
commit openvpn
EOF
}
# MLVPN settings
mlvpn_key="$(echo "$vps_config" | jsonfilter -q -e '@.mlvpn.key')"
2018-12-07 14:33:05 +00:00
if [ -n "$mlvpn_key" ] && [ "$mlvpn_key" != "$(uci -q get mlvpn.general.password)" ]; then
2018-11-27 14:22:54 +00:00
uci -q batch <<-EOF >/dev/null
set mlvpn.general.password=$mlvpn_key
commit mlvpn
EOF
/etc/init.d/mlvpn restart
fi
# Shorewall settings
shorewall_redirect="$(echo "$vps_config" | jsonfilter -q -e '@.shorewall.redirect_ports')"
[ "$shorewall_redirect" = "enable" ] && redirect="1"
[ "$shorewall_redirect" = "disable" ] && redirect="0"
uci -q batch <<-EOF >/dev/null
set openmptcprouter.vps.redirect_ports=$redirect
EOF
# MPTCP settings
mptcp_path_manager="$(echo "$vps_config" | jsonfilter -q -e '@.mptcp.path_manager')"
mptcp_scheduler="$(echo "$vps_config" | jsonfilter -q -e '@.mptcp.scheduler')"
mptcp_checksum="$(echo "$vps_config" | jsonfilter -q -e '@.mptcp.checksum')"
mptcp_syn_retries="$(echo "$vps_config" | jsonfilter -q -e '@.mptcp.syn_retries')"
congestion="$(echo "$vps_config" | jsonfilter -q -e '@.network.congestion')"
uci -q batch <<-EOF >/dev/null
set network.globals.mptcp_path_manager=$mptcp_path_manager
set network.globals.mptcp_scheduler=$mptcp_scheduler
set network.globals.mptcp_checksum=$mptcp_checksum
set network.globals.mptcp_syn_retries=$mptcp_syn_retries
set network.globals.congestion=$congestion
commit network
EOF
# Check if server get an IPv6, if not disable IPv6 on OMR
vps_ipv6_addr="$(echo "$vps_config" | jsonfilter -q -e '@.network.ipv6')"
if [ -z "$vps_ipv6_addr" ]; then
uci -q batch <<-EOF >/dev/null
set openmptcprouter.settings.disable_ipv6=1
EOF
2018-11-29 22:23:32 +00:00
sysctl -qw net.ipv6.conf.all.disable_ipv6=1
2018-11-27 14:22:54 +00:00
fi
2018-12-04 15:54:43 +00:00
# Get available server
available_vpn="$(echo "$vps_config" | jsonfilter -q -e '@.vpn.available' | sed -e 's/\[ //' -e 's/ \]//' -e 's/,//g')"
uci -q batch <<-EOF >/dev/null
del openmptcprouter.vps.available_vpn
EOF
if [ -n "$available_vpn" ]; then
for vpn in $available_vpn; do
uci -q batch <<-EOF >/dev/null
add_list openmptcprouter.vps.available_vpn=$vpn
EOF
done
fi
2018-11-27 14:22:54 +00:00
uci -q batch <<-EOF >/dev/null
set openmptcprouter.vps.get_config=0
commit openmptcprouter
EOF
}
2018-12-06 12:50:10 +00:00
2018-11-27 14:22:54 +00:00
start_service() {
[ -z "$(uci -q get openmptcprouter.vps.username)" ] && return
[ -z "$(uci -q get openmptcprouter.vps.password)" ] && return
_login
2018-12-04 15:54:43 +00:00
[ -z "$token" ] && {
uci -q batch <<-EOF >/dev/null
set openmptcprouter.vps.admin_error=1
commit openmptcprouter
EOF
return
}
2018-11-27 14:22:54 +00:00
[ "$(uci -q get openmptcprouter.vps.get_config)" = "1" ] && _set_config_from_vps
_get_vps_config
config_load shadowsocks-libev
2018-12-06 12:50:10 +00:00
config_foreach _set_ss_server_vps server
_set_glorytun_vps
_set_openvpn_vps
2018-11-27 14:22:54 +00:00
redirect_port="0"
if [ "$(uci -q get openmptcprouter.vps.redirect_ports)" = "1" ] || [ "$(uci -q get upnpd.config.enabled)" = "1" ]; then
redirect_port="1"
fi
_set_redirect_ports_from_vps $redirect_port
_set_mptcp_vps
2018-12-04 15:54:43 +00:00
uci -q batch <<-EOF >/dev/null
set openmptcprouter.vps.admin_error=0
commit openmptcprouter
EOF
2018-11-27 14:22:54 +00:00
}
service_triggers() {
2018-12-06 12:50:10 +00:00
procd_add_reload_trigger openmptcprouter shadowsocks-libev glorytun mlvpn openvpn network upnpd
#procd_add_reload_trigger openmptcprouter shadowsocks-libev network upnpd
2018-11-27 14:22:54 +00:00
}