From 43e0d630636249bc98aa2718de708c5b5e55e544 Mon Sep 17 00:00:00 2001 From: Ycarus Date: Tue, 26 Jun 2018 18:07:36 +0200 Subject: [PATCH] Add support of VPS failover to wizard --- .../luasrc/controller/openmptcprouter.lua | 64 +++++++++++++++++-- .../luasrc/view/openmptcprouter/wizard.htm | 39 ++++++++--- .../root/etc/uci-defaults/openmptcprouter | 11 +++- 3 files changed, 99 insertions(+), 15 deletions(-) diff --git a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua index b6b6a5a8e..06089cb28 100644 --- a/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua +++ b/luci-app-openmptcprouter/luasrc/controller/openmptcprouter.lua @@ -77,16 +77,73 @@ function wizard_add() end ucic:save("network") ucic:commit("network") - - local server_ip = luci.http.formvalue("server_ip") + -- Get VPN set by default + local default_vpn = luci.http.formvalue("default_vpn") or "glorytun_tcp" + local vpn_port + if default_vpn:match("^glorytun.*") then + vpn_port = 65001 + elseif default_vpn == "mlvpn" then + vpn_port = 65201 + elseif default_vpn == "openvpn" then + vpn_port = 65301 + end + + -- Get all servers ips + local server_ip = luci.http.formvalue("server_ip") -- We have an IP, so set it everywhere if server_ip ~= "" then + -- Check if we have more than one IP, in this case use Nginx HA + if (type(server_ip) == "table") then + local ss_servers = {} + local vpn_servers = {} + local k = 0 + for _, ip in pairs(server_ip) do + if k == 0 then + table.insert(ss_servers,ip .. ":65101 max_fails=3 fail_timeout=30s") + table.insert(vpn_servers,ip .. ":65001 max_fails=3 fail_timeout=30s") + ucic:set("qos","serverin","srchost",ip) + ucic:set("qos","serverout","dsthost",ip) + ucic:save("qos") + ucic:commit("qos") + else + table.insert(ss_servers,ip .. ":65101 backup") + table.insert(vpn_servers,ip .. ":65001 backup") + end + k = k + 1 + end + ucic:set("nginx-ha","ShadowSocks","enable","1") + ucic:set("nginx-ha","VPN","enable","1") + ucic:set("nginx-ha","ShadowSocks","upstreams",ss_servers) + ucic:set("nginx-ha","VPN","upstreams",vpn_servers) + ucic:save("nginx-ha") + ucic:commit("nginx-ha") + server_ip = "127.0.0.1" + else + ucic:set("nginx-ha","ShadowSocks","enable","0") + ucic:set("nginx-ha","VPN","enable","0") + ucic:set("qos","serverin","srchost",server_ip) + ucic:set("qos","serverout","dsthost",server_ip) + ucic:save("qos") + ucic:commit("qos") + end ucic:set("shadowsocks-libev","sss0","server",server_ip) + ucic:save("shadowsocks-libev") + ucic:commit("shadowsocks-libev") ucic:set("glorytun","vpn","host",server_ip) + ucic:save("glorytun") + ucic:commit("glorytun") ucic:set("mlvpn","general","host",server_ip) + ucic:save("mlvpn") + ucic:commit("mlvpn") luci.sys.call("uci -q del openvpn.omr.remote") luci.sys.call("uci -q add_list openvpn.omr.remote=" .. server_ip) + ucic:save("openvpn") + ucic:commit("openvpn") + ucic:set("qos","serverin","srchost",server_ip) + ucic:set("qos","serverout","dsthost",server_ip) + ucic:save("qos") + ucic:commit("qos") end -- Set ShadowSocks settings @@ -105,9 +162,6 @@ function wizard_add() ucic:commit("shadowsocks-libev") end - -- Get VPN set by default - local default_vpn = luci.http.formvalue("default_vpn") or "glorytun_tcp" - -- Set Glorytun settings if default_vpn:match("^glorytun.*") then ucic:set("glorytun","vpn","enable",1) diff --git a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm index 6b3eabff9..d7cf9cbdf 100644 --- a/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm +++ b/luci-app-openmptcprouter/luasrc/view/openmptcprouter/wizard.htm @@ -4,8 +4,19 @@ local uci = require("luci.model.uci").cursor() local net = require "luci.model.network".init() local ifaces = net:get_interfaces() + local servers_ip = {} + local server_ip = uci:get("shadowsocks-libev","sss0","server") + if server_ip == '127.0.0.1' then + local upstreams = uci:get("nginx-ha","ShadowSocks","upstreams") + for _, up in pairs(upstreams) do + local a = up:match("^([^:]+):") + table.insert(servers_ip,a) + end + else + table.insert(servers_ip,server_ip) + end %> - + <% if stderr and #stderr > 0 then %>
<%=pcdata(stderr)%>
<% end %>
@@ -14,17 +25,27 @@
<%:Server settings%>
<%:Put the values given by OpenMPTCProuter VPS script.%>
-
- +
+
- " data-type="ip4addr"> +
+ <% + local k = 0 + for _,server in ipairs(servers_ip) do + k = k+1 + %> +
-
- help - <%:Server IP will be set for ShadowSocks, Glorytun, OpenVPN and MLVPN%> -
+ <% + end + %> +
+
+ help + <%:Server IP will be set for ShadowSocks, Glorytun, OpenVPN and MLVPN%>
+
@@ -152,5 +173,5 @@
- + <%+footer%> diff --git a/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter b/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter index 4d6f95f9d..9d1dc3fa5 100755 --- a/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter +++ b/luci-app-openmptcprouter/root/etc/uci-defaults/openmptcprouter @@ -4,4 +4,13 @@ uci -q batch <<-EOF add ucitrack openmptcprouter set ucitrack.@openmptcprouter[-1].init=openmptcprouter commit ucitrack -EOF \ No newline at end of file +EOF +if [ "$(uci -q get qos.serverin)" = "" ]; then + uci -q batch <<-EOF + set qos.serverin=classify + set qos.serverin.targer='Priority' + set qos.serverout=classify + set qos.serverout.targer='Priority' + commit qos + EOF +fi