first commit

main
Ben 1 year ago
commit 4966d0458a

@ -0,0 +1,16 @@
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI support for TorGuard SSTP VPN
LUCI_PKGARCH:=all
LUCI_DEPENDS:=+sstp-client +luci-proto-sstp
define Package/tgsstp/conffiles
/etc/config/tgsstp_cfg
endef
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

@ -0,0 +1,4 @@
module("luci.controller.admin.tgsstp", package.seeall)
function index()
entry({"admin", "vpn", "tgsstp"}, cbi("torguard/tgsstp"), _("TorGuard SSTP"), 102)
end

@ -0,0 +1,75 @@
-- Import the necessary LuCI modules
local uci = require("luci.model.uci").cursor()
local sys = require("luci.sys")
local util = require("luci.util")
-- Define the model
m = Map("tgsstp_cfg", "TorGuard SSTP VPN Setup")
-- Define the section for the SSTP settings
s = m:section(TypedSection, "sstpconfig", "SSTP VPN Settings")
s.anonymous = true
s.addremove = false
-- Define the input fields for the SSTP settings
user = s:option(Value, "username", translate("VPN Username"))
pass = s:option(Value, "password", translate("VPN Password"))
pass.password = true
svr = s:option(ListValue, "server", translate("VPN Server"))
-- Add all servers here
svr:value("ar.torguard.org", "Argentina")
svr:value("au.torguard.org", "Australia Sydney")
svr:value("br.torguard.org", "Brazil Sau Paulo")
svr:value("br2.torguard.org", "Brazil Sau Paulo 2")
svr:value("us-la.torguard.org", "USA LA")
svr:value("us-fl.torguard.org", "USA Miami")
svr:value("us-ny.torguard.org", "USA NY")
svr:value("us-lv.torguard.org", "USA Las Vegas")
svr:value("us-sa.torguard.org", "USA Seattle")
svr:value("us-slc.torguard.org", "USA Salt Lake City")
svr:value("dn.torguard.org", "Denmark Copenhagen")
svr:value("fn.torguard.org", "Finland Helsinki")
svr:value("dn.torguard.org", "Denmark Copenhagen")
svr:value("fr.torguard.org", "France Paris")
svr:value("ger.torguard.org", "Germany Frankfurt")
svr:value("ice.torguard.org", "Iceland Reykjavik")
svr:value("ire.torguard.org", "Ireland Dublin")
svr:value("it.torguard.org", "Italy Milan")
svr:value("nl.torguard.org", "Netherlands Amsterdam")
svr:value("ru.torguard.org", "Russia Moscow")
svr:value("swe.torguard.org", "Sweden Stockholm")
svr:value("tk.torguard.org", "Turkey Istanbul")
svr:value("uk.man.torguard.org", "United Kingdom Manchester")
svr:value("hk.torguard.org", "Hong Kong")
svr:value("id.torguard.org", "Indonesia Jakarta")
svr:value("sk.torguard.org", "South Korea Seoul")
svr:value("nz.torguard.org", "New Zealand Auckland")
svr:value("sg.torguard.org", "Singapore")
svr:value("tw.torguard.org", "Taiwan Taipei")
svr:value("th.torguard.org", "Thailand Bangkok")
svr:value("bh.torguard.org", "Bahrain Manama")
svr:value("in.torguard.org", "India Mumbai")
svr:value("isr-loc1.torguard.org", "Israel Tel Aviv")
svr:value("isr-loc2.torguard.org", "Israel Petah Tikva")
svr:value("sa.torguard.org", "South Africa Johannesburg")
-- VPN Control: Start/Stop SSTP VPN
ctrl = m:section(TypedSection, "sstpconfig", "VPN Control: Start/Stop SSTP")
ctrl.anonymous = true
ctrl.addremove = false
btnStop = ctrl:option(Button, "_btn_start", translate("Click to Stop SSTP"))
function btnStop.write()
io.popen("/etc/init.d/tgsstp stop")
end
btnStart = ctrl:option(Button, "_btn_stop", translate("Click to Start SSTP"))
function btnStart.write()
io.popen("/etc/init.d/tgsstp start")
end
-- Return the configuration page
return m

@ -0,0 +1,4 @@
config sstpconfig 'settings'
option server 'fr.torguard.org'
option username ''
option password ''

@ -0,0 +1,76 @@
#!/bin/bash /etc/rc.common
# TorGuard SSTP init script
START=10
STOP=15
USE_PROCD=0
NAME=tgsstp
LOGFILE=/var/log/${NAME}.log
log() {
local timestamp=$(date +"%Y-%m-%d %H:%M:%S")
echo "${timestamp} ${NAME}: $@" >> ${LOGFILE}
}
stop_service() {
log "Stopping service"
procd_kill sstpc
ifdown sstp
uci commit network
/etc/init.d/network reload
ifdown wan
ifup wan
ifdown wwan
ifup wwan
log "sstp service stopped"
}
start_service() {
log "Starting sstp service"
config_load tgsstp_cfg
local server
local username
local password
config_get server settings server
config_get username settings username
config_get password settings password
#add sstp script with custom port
rm /lib/netifd/proto/sstp.sh
cp /etc/sstp/sstp.sh /lib/netifd/proto/sstp.sh
#copy missing plugin path
cp /usr/lib/sstp-pppd-plugin.so /usr/lib/pppd/2.4.9/sstp-pppd-plugin.so
# check if the sstp entry already exists in the firewall
local sstp_exists=$(uci show firewall | grep -wc " 'sstp'")
if [ "$sstp_exists" -eq 0 ]; then
uci add_list firewall.wan.network="sstp"
uci commit firewall
reload_config
fi
uci -q delete network.sstp
uci set network.sstp="interface"
uci set network.sstp.proto="sstp"
uci set network.sstp.server="${server}"
uci set network.sstp.username="${username}"
uci set network.sstp.password="${password}"
uci commit network
procd_open_instance
procd_set_param command /usr/sbin/sstpc "$server:9443" --user "$username" --pass "$password"
procd_set_param stdout 1 # forward stdout of the command to logd
procd_set_param stderr 1 # same for stderr
procd_set_param respawn # automatically restart the service if it dies
procd_close_instance
/etc/init.d/network reload
ifdown sstp
ifup sstp
log "sstp service started"
}

@ -0,0 +1,130 @@
#!/bin/sh
[ -x /usr/bin/sstpc ] || exit 0
[ -n "$INCLUDE_ONLY" ] || {
. /lib/functions.sh
. ../netifd-proto.sh
init_proto "$@"
}
proto_sstp_init_config() {
proto_config_add_string "server"
proto_config_add_string "username"
proto_config_add_string "password"
proto_config_add_string "pppd_options"
proto_config_add_string "sstp_options"
proto_config_add_int "log_level"
proto_config_add_int "mtu"
proto_config_add_boolean "ipv6"
proto_config_add_boolean "defaultroute"
proto_config_add_boolean "peerdns"
available=1
no_device=1
}
proto_sstp_setup() {
local config="$1"; shift
local iface="$2"
local ifname="sstp-$config"
local ip serv_addr server ipv6 defaultroute peerdns
json_get_var server server && {
for ip in $(resolveip -t 5 "$server"); do
( proto_add_host_dependency "$config" "$ip" )
serv_addr=1
done
}
[ -n "$serv_addr" ] || {
echo "Could not resolve server address"
sleep 5
proto_setup_failed "$config"
exit 1
}
json_get_vars username password pppd_options sstp_options log_level ipv6 defaultroute peerdns
if [ "$ipv6" = 1 ]; then
ipv6=1
else
ipv6=""
fi
if [ "$defaultroute" = 0 ]; then
defaultroute=""
else
defaultroute=1
fi
if [ "$peerdns" = 0 ]; then
peerdns=""
else
peerdns=1
fi
[ -n "$mtu" ] || json_get_var mtu mtu
[ -n "$log_level" ] || log_level=0
local load
for module in slhc ppp_generic ppp_async ppp_mppe ip_gre gre pptp; do
grep -q "^$module " /proc/modules && continue
/sbin/insmod $module 2>&- >&-
load=1
done
[ "$load" = "1" ] && sleep 1
proto_init_update "$ifname" 1
proto_send_update "$config"
proto_run_command "$config" sstpc \
--cert-warn \
--password $password \
--user $username \
--log-level $log_level \
--save-server-route \
--ipparam $config \
$sstp_options \
$server:9443 \
ifname $ifname \
require-mschap-v2 \
${ipv6:++ipv6} \
refuse-pap \
noauth \
${defaultroute:+replacedefaultroute defaultroute} \
${peerdns:+usepeerdns} \
ip-up-script /lib/netifd/ppp-up \
ipv6-up-script /lib/netifd/ppp-up \
ip-down-script /lib/netifd/ppp-down \
ipv6-down-script /lib/netifd/ppp-down \
${mtu:+mtu $mtu mru $mtu} \
$pppd_options
# WORKAROUND: Workaround to properly register the sstp interface (As seeen in: https://forum.archive.openwrt.org/viewtopic.php?id=58007)
# WORKAROUND: Start
sleep 10
proto_init_update "$ifname" 1
proto_send_update "$config"
# WORKAROUND: End
# if use pppoe and sstp at same time , firewall need reload .
# but don't konw why
/etc/init.d/firewall reload 2>&- >&-
}
proto_sstp_teardown() {
local interface="$1"
case "$ERROR" in
11|19)
proto_notify_error "$interface" AUTH_FAILED
proto_block_restart "$interface"
;;
2)
proto_notify_error "$interface" INVALID_OPTIONS
proto_block_restart "$interface"
;;
esac
proto_kill_command "$interface"
}
[ -n "$INCLUDE_ONLY" ] || {
add_protocol sstp
}

@ -0,0 +1,12 @@
#!/bin/sh
uci -q batch <<-EOF >/dev/null
delete ucitrack.@tgsstp_def[-1]
add ucitrack tgsstp
set ucitrack.@tgsstp[-1].init=tgsstp
commit ucitrack
EOF
rm -f /tmp/luci-indexcache
exit 0

@ -0,0 +1,4 @@
module("luci.controller.admin.tgsstp", package.seeall)
function index()
entry({"admin", "vpn", "tgsstp"}, cbi("torguard/tgsstp"), _("TorGuard SSTP"), 102)
end

@ -0,0 +1,75 @@
-- Import the necessary LuCI modules
local uci = require("luci.model.uci").cursor()
local sys = require("luci.sys")
local util = require("luci.util")
-- Define the model
m = Map("tgsstp_cfg", "TorGuard SSTP VPN Setup")
-- Define the section for the SSTP settings
s = m:section(TypedSection, "sstpconfig", "SSTP VPN Settings")
s.anonymous = true
s.addremove = false
-- Define the input fields for the SSTP settings
user = s:option(Value, "username", translate("VPN Username"))
pass = s:option(Value, "password", translate("VPN Password"))
pass.password = true
svr = s:option(ListValue, "server", translate("VPN Server"))
-- Add all servers here
svr:value("ar.torguard.org", "Argentina")
svr:value("au.torguard.org", "Australia Sydney")
svr:value("br.torguard.org", "Brazil Sau Paulo")
svr:value("br2.torguard.org", "Brazil Sau Paulo 2")
svr:value("us-la.torguard.org", "USA LA")
svr:value("us-fl.torguard.org", "USA Miami")
svr:value("us-ny.torguard.org", "USA NY")
svr:value("us-lv.torguard.org", "USA Las Vegas")
svr:value("us-sa.torguard.org", "USA Seattle")
svr:value("us-slc.torguard.org", "USA Salt Lake City")
svr:value("dn.torguard.org", "Denmark Copenhagen")
svr:value("fn.torguard.org", "Finland Helsinki")
svr:value("dn.torguard.org", "Denmark Copenhagen")
svr:value("fr.torguard.org", "France Paris")
svr:value("ger.torguard.org", "Germany Frankfurt")
svr:value("ice.torguard.org", "Iceland Reykjavik")
svr:value("ire.torguard.org", "Ireland Dublin")
svr:value("it.torguard.org", "Italy Milan")
svr:value("nl.torguard.org", "Netherlands Amsterdam")
svr:value("ru.torguard.org", "Russia Moscow")
svr:value("swe.torguard.org", "Sweden Stockholm")
svr:value("tk.torguard.org", "Turkey Istanbul")
svr:value("uk.man.torguard.org", "United Kingdom Manchester")
svr:value("hk.torguard.org", "Hong Kong")
svr:value("id.torguard.org", "Indonesia Jakarta")
svr:value("sk.torguard.org", "South Korea Seoul")
svr:value("nz.torguard.org", "New Zealand Auckland")
svr:value("sg.torguard.org", "Singapore")
svr:value("tw.torguard.org", "Taiwan Taipei")
svr:value("th.torguard.org", "Thailand Bangkok")
svr:value("bh.torguard.org", "Bahrain Manama")
svr:value("in.torguard.org", "India Mumbai")
svr:value("isr-loc1.torguard.org", "Israel Tel Aviv")
svr:value("isr-loc2.torguard.org", "Israel Petah Tikva")
svr:value("sa.torguard.org", "South Africa Johannesburg")
-- VPN Control: Start/Stop SSTP VPN
ctrl = m:section(TypedSection, "sstpconfig", "VPN Control: Start/Stop SSTP")
ctrl.anonymous = true
ctrl.addremove = false
btnStop = ctrl:option(Button, "_btn_start", translate("Click to Stop SSTP"))
function btnStop.write()
io.popen("/etc/init.d/tgsstp stop")
end
btnStart = ctrl:option(Button, "_btn_stop", translate("Click to Start SSTP"))
function btnStart.write()
io.popen("/etc/init.d/tgsstp start")
end
-- Return the configuration page
return m
Loading…
Cancel
Save