|
@ -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 \ |
|
|
|
|
|
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 |
|
|
|
|
|
} |