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

Merge branch 'pr/61' into test

This commit is contained in:
suyuan 2021-01-25 21:56:35 +08:00
commit d2868954fb
35 changed files with 2069 additions and 437 deletions

View file

@ -56,11 +56,15 @@ start_instance() {
_log "starting ${PROG_NAME} ${1} instance $*"
if [ "$mode" = "to" ]; then
bind="bind from addr :: port 5000 to addr $host port $port"
else
bind="bind from addr $host port $port to addr :: port 5000"
fi
procd_open_instance
procd_set_param command ${PROG} \
${host:+bind ${mode} addr "$host"} \
${port:+port "$port"} \
${bind} \
${dev:+dev "$dev"} \
keyfile /tmp/${PROG_NAME}-${1}.key \
persist

View file

@ -36,14 +36,16 @@ function create_helper_text()
end
function get_provider_name(value)
for filename in fs.dir(providers_dir) do
local p_func = loadfile(providers_dir .. filename)
setfenv(p_func, { _ = i18n.translate })
local p = p_func()
value = value:gsub('[%p%c%s]', '')
p.url_match = p.resolver_url:gsub('[%p%c%s]', '')
if value:match(p.url_match) then
return p.label
if value ~= nil then
for filename in fs.dir(providers_dir) do
local p_func = loadfile(providers_dir .. filename)
setfenv(p_func, { _ = i18n.translate })
local p = p_func()
value = value:gsub('[%p%c%s]', '')
p.url_match = p.resolver_url:gsub('[%p%c%s]', '')
if value:match(p.url_match) then
return p.label
end
end
end
return translate("Unknown Provider")

View file

@ -374,7 +374,7 @@ _bypass_proto() {
_intf_rule_ss_rules() {
rule_name=$1
[ "$rule_name" = "ss_rules" ] && rule_name="def"
if [ "$(iptables --wait=40 -t nat -L -n | grep ssr_${rule_name}_pre_src)" != "" ] && [ "$(iptables --wait=40 -t nat -L -n | grep ssr | grep omr_dst_bypass_$intf)" = "" ]; then
if [ "$(iptables --wait=40 -t nat -L -n | grep ssr_${rule_name}_pre_src)" != "" ] && [ "$(iptables-save | grep ssr | grep omr_dst_bypass_$intf)" = "" ]; then
iptables-restore -w --wait=60 --noflush <<-EOF
*nat
-I ssr_${rule_name}_dst 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
@ -394,7 +394,7 @@ _intf_rule_ss_rules() {
COMMIT
EOF
fi
if [ "$(ip6tables --wait=40 -t nat -L -n | grep ssr6_${rule_name}_pre_src)" != "" ] && [ "$(ip6tables --wait=40 -t nat -L -n | grep ssr6 | grep omr6_dst_bypass_$intf)" = "" ]; then
if [ "$(ip6tables --wait=40 -t nat -L -n | grep ssr6_${rule_name}_pre_src)" != "" ] && [ "$(ip6tables-save | grep ssr6 | grep omr6_dst_bypass_$intf)" = "" ]; then
ip6tables-restore -w --wait=60 --noflush <<-EOF
*nat
-I ssr6_${rule_name}_dst 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count
@ -413,7 +413,7 @@ _intf_rule_v2ray_rules() {
#rule_name=$1
#[ "$rule_name" = "ss_rules" ] && rule_name="def"
rule_name="def"
if [ "$(iptables --wait=40 -t nat -L -n | grep v2r_${rule_name}_pre_src)" != "" ] && [ "$(iptables --wait=40 -t nat -L -n | grep v2r | grep omr_dst_bypass_$intf)" = "" ]; then
if [ "$(iptables --wait=40 -t nat -L -n | grep v2r_${rule_name}_pre_src)" != "" ] && [ "$(iptables-save | grep v2r | grep omr_dst_bypass_$intf)" = "" ]; then
iptables-restore -w --wait=60 --noflush <<-EOF
*nat
-I v2r_${rule_name}_dst 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count
@ -426,14 +426,14 @@ _intf_rule_v2ray_rules() {
EOF
fi
if [ "$disableipv6" = "0" ]; then
if [ "$(ip6tables --wait=40 -t mangle -L -n | grep omr6_dst_bypass_$intf)" = "" ]; then
if [ "$(ip6tables-save | grep omr-bypass6 | grep omr6_dst_bypass_$intf)" = "" ]; then
ip6tables-restore -w --wait=60 --noflush <<-EOF
*mangle
-I omr-bypass6 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count
COMMIT
EOF
fi
if [ "$(ip6tables --wait=40 -t nat -L -n | grep v2r6_${rule_name}_pre_src)" != "" ] && [ "$(ip6tables --wait=40 -t nat -L -n | grep v2r6 | grep omr6_dst_bypass_$intf)" = "" ]; then
if [ "$(ip6tables --wait=40 -t nat -L -n | grep v2r6_${rule_name}_pre_src)" != "" ] && [ "$(ip6tables-save | grep v2r6 | grep omr6_dst_bypass_$intf)" = "" ]; then
ip6tables-restore -w --wait=60 --noflush <<-EOF
*nat
-I v2r6_${rule_name}_dst 1 -m set --match-set omr6_dst_bypass_$intf dst -j MARK --set-mark 0x6539$count
@ -487,7 +487,7 @@ _intf_rule() {
ip -6 rule add prio 1 fwmark 0x6539$count lookup 6$count > /dev/null 2>&1
fi
}
if [ "$(iptables --wait=40 -t mangle -L -n | grep omr_dst_bypass_$intf)" = "" ]; then
if [ "$(iptables-save | grep omr-bypass | grep omr_dst_bypass_$intf)" = "" ]; then
iptables-restore -w --wait=60 --noflush <<-EOF
*mangle
-I omr-bypass 1 -m set --match-set omr_dst_bypass_$intf dst -j MARK --set-mark 0x539$count

View file

@ -71,7 +71,7 @@ ul {
-moz-transition: all 0.5s;
}
.tree ul ul {
padding-left: 85px;
padding-left: 5px;
position: relative;
}
.tree > ul > li:first-child {
@ -152,7 +152,7 @@ right connector from last child*/
top: 50%;
left: 0;
border-top: 2px solid black;
width: 85px;
width: 7px;
height: 100%;
}
.tree li a {
@ -222,7 +222,7 @@ right connector from last child*/
width: 2px;
/*height: 50%;*/
height: 55px;
left: 200px;
left: 240px;
/* z-index: -10;*/
}
/*Time for some hover effects*/
@ -243,9 +243,9 @@ Thanks :)*/
.network-node {
position: relative;
background-color: #f3f3f3;
padding: 12px;
width: 400px;
max-width: 400px;
padding: 8px;
width: 480px;
max-width: 480px;
box-sizing: border-box;
min-height: 170px;
}
@ -282,7 +282,7 @@ Thanks :)*/
.network-node .info {
position: relative;
float: right;
width: 250px;
width: 330px;
text-align: left;
font-size: 12px;
color: #757575;
@ -319,7 +319,7 @@ Thanks :)*/
width:5px;
border-right:2px dotted black;
height:70px;
padding-right: 195px;
padding-right: 240px;
}
#omr {
min-height: 190px;

View file

@ -223,8 +223,10 @@ function wizard_add()
local device_qmi = luci.http.formvalue("cbid.network.%s.device.qmi" % intf) or ""
local device_modemmanager = luci.http.formvalue("cbid.network.%s.device.modemmanager" % intf) or ""
local ipaddr = luci.http.formvalue("cbid.network.%s.ipaddr" % intf) or ""
local ip6addr = luci.http.formvalue("cbid.network.%s.ip6addr" % intf) or ""
local netmask = luci.http.formvalue("cbid.network.%s.netmask" % intf) or ""
local gateway = luci.http.formvalue("cbid.network.%s.gateway" % intf) or ""
local ip6gw = luci.http.formvalue("cbid.network.%s.ip6gw" % intf) or ""
local apn = luci.http.formvalue("cbid.network.%s.apn" % intf) or ""
local pincode = luci.http.formvalue("cbid.network.%s.pincode" % intf) or ""
local delay = luci.http.formvalue("cbid.network.%s.delay" % intf) or ""
@ -281,6 +283,13 @@ function wizard_add()
ucic:set("network",intf,"netmask","")
ucic:set("network",intf,"gateway","")
end
if ip6addr ~= "" then
ucic:set("network",intf,"ip6addr",ip6addr)
ucic:set("network",intf,"ip6gw",ip6gw)
else
ucic:set("network",intf,"ip6addr","")
ucic:set("network",intf,"ip6gw","")
end
ucic:delete("openmptcprouter",intf,"lc")
ucic:save("openmptcprouter")
@ -416,7 +425,8 @@ function wizard_add()
local disablednb = 0
local servers = luci.http.formvaluetable("server")
for server, _ in pairs(servers) do
local server_ip = luci.http.formvalue("%s.server_ip" % server) or ""
local server_ip = {}
server_ip[1] = luci.http.formvalue("%s.server_ip" % server) or ""
local master = luci.http.formvalue("master") or ""
-- OpenMPTCProuter VPS
@ -437,14 +447,14 @@ function wizard_add()
if openmptcprouter_vps_disabled == "1" then
disablednb = disablednb + 1
end
if server_ip ~= "" then
if server_ip[1] ~= "" then
serversnb = serversnb + 1
end
ucic:set("openmptcprouter",server,"server")
ucic:set("openmptcprouter",server,"username",openmptcprouter_vps_username)
ucic:set("openmptcprouter",server,"password",openmptcprouter_vps_key)
ucic:set("openmptcprouter",server,"disabled",openmptcprouter_vps_disabled)
ucic:set("openmptcprouter",server,"ip",server_ip)
ucic:set_list("openmptcprouter",server,"ip",server_ip)
ucic:set("openmptcprouter",server,"port","65500")
ucic:save("openmptcprouter")
end

View file

@ -231,14 +231,25 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm
if ((mArray.openmptcprouter.wan_addr == mArray.openmptcprouter.service_addr || mArray.openmptcprouter.wan_addr == mArray.openmptcprouter.service_addr_ip) && mArray.openmptcprouter.wan_addr != "")
{
var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.wan_addr);
} else if ((mArray.openmptcprouter.wan_addr6 == mArray.openmptcprouter.service_addr || mArray.openmptcprouter.wan_addr6 == mArray.openmptcprouter.service_addr_ip6) && mArray.openmptcprouter.wan_addr6 != "")
{
var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.wan_addr6);
} else if (mArray.openmptcprouter.wan_addr != "" && mArray.openmptcprouter.service_addr == "127.0.0.1")
{
var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.wan_addr);
} else if (mArray.openmptcprouter.wan_addr6 != "" && mArray.openmptcprouter.service_addr == "127.0.0.1")
{
var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.wan_addr6);
} else if (mArray.openmptcprouter.wan_addr != "")
{
var title = String.format("%s (%s)", _('Direct output'), mArray.openmptcprouter.wan_addr);
statusMessageClass = "warning";
statusIcon = "<%=resource%>/openmptcprouter/images/statusWarning.png";
} else if (mArray.openmptcprouter.wan_addr6 != "")
{
var title = String.format("%s (%s)", _('Direct output'), mArray.openmptcprouter.wan_addr6);
statusMessageClass = "warning";
statusIcon = "<%=resource%>/openmptcprouter/images/statusWarning.png";
} else if (mArray.openmptcprouter.ss_addr != "" && mArray.openmptcprouter.vps_status != "DOWN")
{
var title = String.format("%s (%s)", mArray.openmptcprouter.vps_hostname, mArray.openmptcprouter.ss_addr);
@ -248,11 +259,11 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm
var title = '<%:No output%>';
statusMessage += '<%:No output%>' + '<br/>';
}
if (mArray.openmptcprouter.wan_addr == "" && mArray.openmptcprouter.ss_addr == "" && mArray.openmptcprouter.external_check == true)
if (mArray.openmptcprouter.wan_addr == "" && mArray.openmptcprouter.wan_addr6 == "" && mArray.openmptcprouter.ss_addr == "" && mArray.openmptcprouter.external_check == true)
{
statusMessage += '<%:No server IP address, No WAN IP address%>' + '<br/>';
}
if (mArray.openmptcprouter.service_addr !== "" && mArray.openmptcprouter.wan_addr !== "" && mArray.openmptcprouter.vps_status == "DOWN")
if (mArray.openmptcprouter.service_addr !== "" && (mArray.openmptcprouter.wan_addr !== "" || mArray.openmptcprouter.wan_addr6 !== "") && mArray.openmptcprouter.vps_status == "DOWN")
{
statusMessage += '<%:Can\'t access and use server part%>' + '<br/>';
}
@ -274,7 +285,7 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm
} else if (mArray.openmptcprouter.v2ray_enabled == true && mArray.openmptcprouter.ss_addr == "" && mArray.openmptcprouter.external_check == true)
{
statusMessage += '<%:Can\'t get public IP address from V2Ray%>' + '<br/>';
} else if (mArray.openmptcprouter.wan_addr == "" && mArray.openmptcprouter.external_check == true)
} else if (mArray.openmptcprouter.wan_addr == "" && mArray.openmptcprouter.wan_addr6 == "" && mArray.openmptcprouter.external_check == true)
{
statusMessage += '<%:No WAN IP address detected in less than 1 second%>' + '<br/>';
}
@ -392,18 +403,21 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm
statusMessage = "";
}
// Populate info
var wanip = mArray.wans[i].wanip;
var wanip = mArray.wans[i].wanip;
var wanip6 = mArray.wans[i].wanip6;
if (anonymize == "true" && testPrivateIP(wanip) == false)
{
wanip=replaceLastNChars(wanip,"x",6);
}
var ipaddr = mArray.wans[i].ipaddr;
var ipaddr = mArray.wans[i].ipaddr;
var ip6addr = mArray.wans[i].ip6addr;
if (anonymize == "true" && testPrivateIP(ipaddr) == false)
{
ipaddr=replaceLastNChars(ipaddr,"x",6);
}
var whois = mArray.wans[i].whois;
var signal = mArray.wans[i].signal;
var whois = mArray.wans[i].whois;
var whois6 = mArray.wans[i].whois6;
var signal = mArray.wans[i].signal;
var multipath = mArray.wans[i].multipath;
if(multipath == 'master')
{
@ -420,7 +434,13 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm
{
gateway=replaceLastNChars(gateway,"x",6);
}
var gateway6 = mArray.wans[i].gateway6;
if (anonymize == "true" && testPrivateIP(gateway6) == false)
{
gateway6=replaceLastNChars(gateway6,"x",10);
}
var gw_ping = mArray.wans[i].gw_ping;
var gw_ping6 = mArray.wans[i].gw_ping6;
var server_ping = mArray.wans[i].server_ping;
var ipv6_discover = mArray.wans[i].ipv6_discover;
var multipath_available = mArray.wans[i].multipath_available;
@ -438,6 +458,9 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm
if (mArray.wans[i].gateway !== "")
{
var title = mArray.wans[i].label + " (" + gateway + ")";
} else if (mArray.wans[i].gateway6 !== "")
{
var title = mArray.wans[i].label + " (" + gateway6 + ")";
} else {
var title = mArray.wans[i].label;
}
@ -446,14 +469,26 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm
{
content += String.format('%s <strong>%s</strong><br />','<%:ip address:%>', ipaddr);
}
if(ip6addr !== '')
{
content += String.format('%s <strong>%s</strong><br />','<%:ipv6 address:%>', ip6addr);
}
if(wanip !== '')
{
content += String.format('%s <strong>%s</strong><br />','<%:wan address:%>', wanip);
}
if(wanip6 !== '' && gateway6 != '')
{
content += String.format('%s <strong>%s</strong><br />','<%:wan ipv6 address:%>', wanip6);
}
if(whois !== '')
{
content += String.format('%s %s<br />','<%:whois:%>', whois);
}
if(whois6 !== '')
{
content += String.format('%s %s<br />','<%:whois:%>', whois6);
}
if(latency !== '')
{
content += String.format('%s %s ms<br />','<%:latency:%>', latency);
@ -492,14 +527,17 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm
{
title += String.format(' <i>%s</i>',networktype);
}
if(ipaddr == '')
if(ipaddr == '' && ip6addr == '')
{
statusMessage += '<%:No IP defined%>' + '<br />';
}
if(gateway == '')
if(gateway == '' && gateway6 == '')
{
statusMessage += '<%:No gateway defined%>' + '<br />';
} else if(gw_ping == 'DOWN')
{
statusMessage += '<%:Gateway DOWN%>' + '<br />';
} else if(gw_ping6 == 'DOWN')
{
statusMessage += '<%:Gateway DOWN%>' + '<br />';
} else if(multipath_available == 'ERROR')
@ -515,6 +553,11 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm
statusMessage += '<%:Wan IP and gateway are identical%>' + '<br />';
statusMessageClass = "error";
}
if (stat == 'Offline' && ip6addr != '' && ipaddr == mArray.wans[i].gateway6)
{
statusMessage += '<%:Wan IP and gateway are identical%>' + '<br />';
statusMessageClass = "error";
}
if(multipath == 'master')
{
if (master > 1)
@ -557,6 +600,12 @@ local statuslogo = ucic:get("openmptcprouter","settings","statuslogo") or "openm
temp += '</a></li>';
}
if (mArray.wans.length == 0)
{
temp += '<li>';
temp += '<%:No WAN with multipath enabled:%>';
temp += '</li>';
}
for( var i = 0; i < mArray.tunnels.length; i++ )
{
// Get link color

View file

@ -57,7 +57,7 @@
<div class="cbi-value">
<label class="cbi-value-title" for="server_ip"><%:Server IP%></label>
<div class="cbi-value-field">
<input name="<%=servername%>.server_ip" id="<%=servername%>.server_ip" placeholder="<%:Server IP%>" class="cbi-input-text" value="<%=uci:get("openmptcprouter",servername,"ip")%>" data-optional="false">
<input name="<%=servername%>.server_ip" id="<%=servername%>.server_ip" placeholder="<%:Server IP%>" class="cbi-input-text" value="<%=uci:get_list("openmptcprouter",servername,"ip")[1]%>" data-optional="false">
<div class="cbi-value-description">
<%:Server IP will be set for proxy and VPN%>
</div>
@ -147,7 +147,7 @@
<div class="cbi-value">
<label class="cbi-value-title"><%:Enable IPv6%></label>
<div class="cbi-value-field">
<input class="cbi-input-checkbox" type="checkbox" name="enableipv6" value="0" <% if uci:get("openmptcprouter","settings","disable_ipv6") == "0" then %>checked<% end %> />
<input class="cbi-input-checkbox" type="checkbox" id="enableipv6" name="enableipv6" value="0" <% if uci:get("openmptcprouter","settings","disable_ipv6") == "0" then %>checked<% end %> />
<br />
<div class="cbi-value-description">
<%:You should disable IPv6 here if server doesn't provide IPv6.%>
@ -511,6 +511,7 @@
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.proto" name="cbid.network.<%=ifname%>.proto" size="1">
<option id="cbid.network.<%=ifname%>.proto-static" value="static"<% if uci:get("network",ifname,"proto") == "static" or uci:get("network",ifname,"proto") == nil then findproto = 1 %> selected="selected"<% end %>><%:Static address%></option>
<option id="cbid.network.<%=ifname%>.proto-dhcp" value="dhcp"<% if uci:get("network",ifname,"proto") == "dhcp" then findproto = 1 %> selected="selected"<% end %>><%:DHCP%></option>
<option id="cbid.network.<%=ifname%>.proto-dhcpv6" value="dhcpv6"<% if uci:get("network",ifname,"proto") == "dhcpv6" then findproto = 1 %> selected="selected"<% end %>><%:DHCPv6%></option>
<option id="cbid.network.<%=ifname%>.proto-modemmanager" value="modemmanager"<% if uci:get("network",ifname,"proto") == "modemmanager" then findproto = 1 %> selected="selected"<% end %>><%:ModemManager%></option>
<option id="cbid.network.<%=ifname%>.proto-ncm" value="ncm"<% if uci:get("network",ifname,"proto") == "ncm" then findproto = 1 %> selected="selected"<% end %>><%:NCM%></option>
<option id="cbid.network.<%=ifname%>.proto-pppoe" value="pppoe"<% if uci:get("network",ifname,"proto") == "pppoe" then findproto = 1 %> selected="selected"<% end %>><%:PPPoE%></option>
@ -523,7 +524,7 @@
</div>
</div>
</div>
<div class="cbi-value" id="cbi-network-<%=ifname%>-intf" data-depends="[{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;static&#34;},{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;dhcp&#34;}]" data-index="4">
<div class="cbi-value" id="cbi-network-<%=ifname%>-intf" data-depends="[{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;static&#34;},{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;dhcp&#34;},{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;dhcpv6&#34;}]" data-index="4">
<label class="cbi-value-title"><%:Physical interface%></label>
<div class="cbi-value-field">
<select class="cbi-input-select" data-update="change" id="cbid.network.<%=ifname%>.intf" name="cbid.network.<%=ifname%>.intf" size="1">
@ -576,6 +577,60 @@
</div>
</div>
</div>
<%
ipv6list = uci:get_list("network",ifname,"ip6addr")
for key, value in pairs(ipv6list) do
%>
<div class="cbi-value" id="cbi-network-<%=ifname%>-ipv6address" data-index="8">
<label class="cbi-value-title"><%:IPv6 address%></label>
<div class="cbi-value-field">
<input type="text" id="cbid.network.<%=ifname%>.ip6addr" name="cbid.network.<%=ifname%>.ip6addr" class="cbi-input-text" value="<%=value%>" data-type="ip6addr">
<br />
<div class="cbi-value-description">
<%:Set an IP in the same network as the modem%>
</div>
</div>
</div>
<%
end
if table.getn(ipv6list) ~= 0 then
%>
<div class="cbi-value" id="cbi-network-<%=ifname%>-ip6gw" data-index="9">
<label class="cbi-value-title"><%:IPv6 gateway%></label>
<div class="cbi-value-field">
<input type="text" id="cbid.network.<%=ifname%>.ip6gw" name="cbid.network.<%=ifname%>.ip6gw" class="cbi-input-text" value="<%=uci:get("network",ifname,"ip6gw")%>" data-type="ip6addr">
<br />
<div class="cbi-value-description">
<%:Set here IP of the modem%>
</div>
</div>
</div>
<%
else
%>
<div class="cbi-value" id="cbi-network-<%=ifname%>-ipv6address" data-depends="[{&#34;enableipv6&#34;:&#34;0&#34;},{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;static&#34;},{&#34;cbid.network.<%=ifname%>.type&#34;:&#34;macvlan&#34;}]" data-index="8">
<label class="cbi-value-title"><%:IPv6 address%></label>
<div class="cbi-value-field">
<input type="text" id="cbid.network.<%=ifname%>.ip6addr" name="cbid.network.<%=ifname%>.ip6addr" class="cbi-input-text" value="" data-type="ip6addr">
<br />
<div class="cbi-value-description">
<%:Set an IP in the same network as the modem%>
</div>
</div>
</div>
<div class="cbi-value" id="cbi-network-<%=ifname%>-ip6gw" data-depends="[{&#34;enableipv6&#34;:&#34;0&#34;},{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;static&#34;},{&#34;cbid.network.<%=ifname%>.type&#34;:&#34;macvlan&#34;}]" data-index="9">
<label class="cbi-value-title"><%:IPv6 gateway%></label>
<div class="cbi-value-field">
<input type="text" id="cbid.network.<%=ifname%>.ip6gw" name="cbid.network.<%=ifname%>.ip6gw" class="cbi-input-text" value="<%=uci:get("network",ifname,"ip6gw")%>" data-type="ip6addr">
<br />
<div class="cbi-value-description">
<%:Set here IP of the modem%>
</div>
</div>
</div>
<%
end
%>
<div class="cbi-value" id="cbi-network-<%=ifname%>-device-ncm" data-depends="[{&#34;cbid.network.<%=ifname%>.proto&#34;:&#34;ncm&#34;}]" data-index="5">
<label class="cbi-value-title"><%:Device%></label>
<div class="cbi-value-field">

View file

@ -28,8 +28,10 @@ get_ip_from_website() {
}
[ -z "$intf" ] && return
ip=""
config_load openmptcprouter
config_foreach get_ip_from_server server
[ -z "$ip" ] && get_ip_from_website
echo $ip
if [ -n "$(ip -4 a show dev $intf)" ]; then
ip=""
config_load openmptcprouter
config_foreach get_ip_from_server server
[ -z "$ip" ] && get_ip_from_website
echo $ip
fi

View file

@ -0,0 +1,37 @@
#!/bin/sh
. /lib/functions.sh
intf=$1
get_ip_from_server() {
serverip=$(uci -q get openmptcprouter.$1.ip)
serverport=$(uci -q get openmptcprouter.$1.port)
getip="$(curl -s -k -6 -m 2 --interface $intf https://$serverip:$serverport/clienthost)"
[ -n "$getip" ] && getip=$(echo $getip | jsonfilter -e '@.client_host')
if [ -n "$(echo "$getip" | grep :)" ]; then
ip=$getip
break
fi
}
get_ip_from_website() {
check_ipv6_website="$(uci -q get openmptcprouter.settings.check_ipv6_website)"
[ -z "$check_ipv6_website" ] && check_ipv6_website="http://ipv6.openmptcprouter.com"
checkip=$(echo $check_ipv6_website | sed -e 's/https:\/\///' -e 's/http:\/\///' | xargs dig +short AAAA | tr -d "\n")
ipset add ss_rules6_dst_bypass_all $checkip > /dev/null 2>&1
getip="$(curl -s -6 -m 2 --interface $intf $check_ipv6_website)"
ipset del ss_rules6_dst_bypass_all $checkip > /dev/null 2>&1
if [ -n "$(echo "$getip" | grep :)" ]; then
ip=$getip
break
fi
}
[ -z "$intf" ] && return
if [ -n "$(ip -6 a show dev $intf)" ]; then
ip=""
config_load openmptcprouter
config_foreach get_ip_from_server server
[ -z "$ip" ] && get_ip_from_website
echo $ip
fi

View file

@ -1,7 +1,16 @@
#!/bin/sh
INTERFACE=$2
if [ -z "$INTERFACE" ]; then
tracebox -m 20 -l "pkt = ip{dst=to} / tcp{dst=65101} / MPCAPABLE / MSS / WSCALE if string.find(tostring(tracebox(pkt)),'-TCPOptionMPTCPCapable') then print 'MPTCP disabled' elseif string.find(tostring(tracebox(pkt)),'MPTCP') then print 'MPTCP enabled' end" $1
SERVER=$1
if [ -n "$(resolveip -4 $SERVER)" ]; then
if [ -z "$INTERFACE" ]; then
tracebox -m 20 -l "pkt = ip{dst=to} / tcp{dst=65101} / MPCAPABLE / MSS / WSCALE if string.find(tostring(tracebox(pkt)),'-TCPOptionMPTCPCapable') then print 'MPTCP disabled' elseif string.find(tostring(tracebox(pkt)),'MPTCP') then print 'MPTCP enabled' end" $SERVER
else
tracebox -m 20 -l "pkt = ip{dst=to} / tcp{dst=65101} / MPCAPABLE / MSS / WSCALE if string.find(tostring(tracebox(pkt)),'-TCPOptionMPTCPCapable') then print 'MPTCP disabled' elseif string.find(tostring(tracebox(pkt)),'MPTCP') then print 'MPTCP enabled' end" -i $INTERFACE $SERVER
fi
else
tracebox -m 20 -l "pkt = ip{dst=to} / tcp{dst=65101} / MPCAPABLE / MSS / WSCALE if string.find(tostring(tracebox(pkt)),'-TCPOptionMPTCPCapable') then print 'MPTCP disabled' elseif string.find(tostring(tracebox(pkt)),'MPTCP') then print 'MPTCP enabled' end" -i $INTERFACE $1
if [ -z "$INTERFACE" ]; then
tracebox -6 -m 20 -l "pkt = ip{dst=to} / tcp{dst=65101} / MPCAPABLE / MSS / WSCALE if string.find(tostring(tracebox(pkt)),'-TCPOptionMPTCPCapable') then print 'MPTCP disabled' elseif string.find(tostring(tracebox(pkt)),'MPTCP') then print 'MPTCP enabled' end" $SERVER
else
tracebox -6 -m 20 -l "pkt = ip{dst=to} / tcp{dst=65101} / MPCAPABLE / MSS / WSCALE if string.find(tostring(tracebox(pkt)),'-TCPOptionMPTCPCapable') then print 'MPTCP disabled' elseif string.find(tostring(tracebox(pkt)),'MPTCP') then print 'MPTCP enabled' end" -i $INTERFACE $SERVER
fi
fi

View file

@ -18,31 +18,12 @@ omr_intf_check() {
omr_intf_set() {
local device
local ifname
local multipath
config_get multipath "$1" multipath
config_get ifname "$1" ifname
config_get device "$1" device
config_get proto "$1" proto
config_get type "$1" type
config_get addlatency "$1" addlatency
[ -z "$addlatency" ] && addlatency=0
devicename=$(echo "$device" | cut -d'/' -f3)
[ -z "$ifname" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]')
if [ -n "$ifname" ]; then
if [ "$addlatency" = "0" ] && [ "$(tc qdisc show dev $ifname | grep delay)" != "" ]; then
tc qdisc del dev ${ifname} root netem
fi
if [ "$addlatency" != "0" ]; then
if [ "$(tc qdisc show dev $ifname | grep delay)" != "" ]; then
tc qdisc add dev ${ifname} root netem delay ${addlatency}ms
elif [ "$(tc qdisc show dev $ifname | awk '/delay/ { print $10 }' | sed 's/ms//')" != "$addlatency" ]; then
tc qdisc replace dev ${ifname} root netem delay ${addlatency}ms
fi
fi
fi
if [ "$type" != "macvlan" ] && [ -n "$ifname" ] && [ -f /sys/class/net/${ifname}/device/uevent ]; then
devicepath=$(readlink -f /sys/class/net/${ifname})
if [ -n "$devicepath" ] && [ "$(echo ${devicepath} | grep virtual)" = "" ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PRODUCT)" != "" ] && [ "$(cat /sys/class/net/${ifname}/device/uevent | grep PCI_SLOT_NAME)" = "" ]; then
@ -63,6 +44,15 @@ omr_intf_set() {
}
omr_set_settings() {
local device
local ifname
local multipath
config_get multipath "$1" multipath
config_get ifname "$1" ifname
config_get device "$1" device
config_get proto "$1" proto
config_get type "$1" type
config_get addlatency "$1" addlatency
[ -z "$multipath" ] || [ "$multipath" = "off" ] && [ "$1" != "omrvpn" ] && [ "$1" != "glorytun" ] && return
uci -q set openmptcprouter.$1=interface
@ -73,6 +63,25 @@ omr_set_settings() {
else
uci -q set network.$1.ipv6=1
fi
[ -z "$addlatency" ] && addlatency=0
devicename=$(echo "$device" | cut -d'/' -f3)
[ -z "$ifname" ] && ifname=$(ifstatus "$1" | jsonfilter -q -e '@["l3_device"]')
if [ -n "$ifname" ]; then
if [ "$addlatency" = "0" ] && [ "$(tc qdisc show dev $ifname | grep delay)" != "" ]; then
tc qdisc del dev ${ifname} root netem
fi
if [ "$addlatency" != "0" ]; then
if [ "$(tc qdisc show dev $ifname | grep delay)" != "" ]; then
tc qdisc add dev ${ifname} root netem delay ${addlatency}ms
elif [ "$(tc qdisc show dev $ifname | awk '/delay/ { print $10 }' | sed 's/ms//')" != "$addlatency" ]; then
tc qdisc replace dev ${ifname} root netem delay ${addlatency}ms
fi
fi
fi
}
start_service() {

View file

@ -545,7 +545,14 @@ function update_vps()
local vpsgettoken = sys.exec("/etc/init.d/openmptcprouter-vps restart >/dev/null 2>/dev/null")
end
function get_rootfs()
local rootfs = {}
rootfs['format'] = luci.util.trim(sys.exec("mount | awk 'NR==1{print $5}'"))
return rootfs
end
function get_ip(interface)
local ut = require "luci.util"
local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {})
local ip = ""
if dump and dump['ipv4-address'] then
@ -563,6 +570,42 @@ function get_ip(interface)
end
end
end
if ip == "" then
local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {})
if dump and dump['l3_device'] then
local ifname = dump['l3_device']
ip = ut.trim(sys.exec("ip -4 -br addr ls dev %s | awk -F'[ /]+' '{print $3}'" % ifname))
end
end
return ip
end
function get_ip6(interface)
local ut = require "luci.util"
local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {})
local ip = ""
if dump and dump['ipv6-address'] then
local _, ipv6address
for _, ipv6address in ipairs(dump['ipv6-address']) do
ip = dump['ipv6-address'][_].address
end
end
if ip == "" then
local dump = require("luci.util").ubus("network.interface.%s_6" % interface, "status", {})
if dump and dump['ipv6-address'] then
local _, ipv6address
for _, ipv6address in ipairs(dump['ipv6-address']) do
ip = dump['ipv6-address'][_].address
end
end
end
if ip == "" then
local dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {})
if dump and dump['l3_device'] then
local ifname = dump['l3_device']
ip = ut.trim(sys.exec("ip -6 -br addr ls dev %s | awk -F'[ /]+' '{print $3}'" % ifname))
end
end
return ip
end
@ -625,6 +668,56 @@ function get_gateway(interface)
return gateway
end
function get_gateway6(interface)
local gateway = ""
local dump = nil
dump = require("luci.util").ubus("network.interface.%s" % interface, "status", {})
if dump and dump.route then
local _, route
for _, route in ipairs(dump.route) do
if dump.route[_].target == "::" then
gateway = dump.route[_].nexthop
end
end
end
if gateway == "" then
if dump and dump.inactive and dump.inactive.route then
local _, route
for _, route in ipairs(dump.inactive.route) do
if dump.inactive.route[_].target == "::" then
gateway = dump.inactive.route[_].nexthop
end
end
end
end
if gateway == "" then
dump = require("luci.util").ubus("network.interface.%s_6" % interface, "status", {})
if dump and dump.route then
local _, route
for _, route in ipairs(dump.route) do
if dump.route[_].target == "::" then
gateway = dump.route[_].nexthop
end
end
end
if gateway == "" then
if dump and dump.inactive and dump.inactive.route then
local _, route
for _, route in ipairs(dump.inactive.route) do
if dump.inactive.route[_].target == "::" then
gateway = dump.inactive.route[_].nexthop
end
end
end
end
end
return gateway
end
-- This function come from OverTheBox by OVH with many changes
-- Copyright 2015 OVH <OverTheBox@ovh.net>
-- Simon Lelievre (simon.lelievre@corp.ovh.com)
@ -689,16 +782,25 @@ function interfaces_status()
if mArray.openmptcprouter["dns"] == true then
-- wanaddr
--mArray.openmptcprouter["wan_addr"] = uci:get("openmptcprouter","omr","public_detected_ipv4") or ""
if mArray.openmptcprouter["service_addr"] ~= "" then
mArray.openmptcprouter["service_addr_ip"] = ut.trim(sys.exec("resolveip -4 -t 1 " .. mArray.openmptcprouter["service_addr"] .. " | head -n 1"))
mArray.openmptcprouter["service_addr_ip6"] = ut.trim(sys.exec("resolveip -6 -t 1 " .. mArray.openmptcprouter["service_addr"] .. " | head -n 1"))
end
if uci:get("openmptcprouter","settings","external_check") ~= "0" and mArray.openmptcprouter["dns"] == true then
mArray.openmptcprouter["wan_addr"] = ut.trim(sys.exec("curl -4 -s -m " .. timeout .. " " .. check_ipv4_website))
if mArray.openmptcprouter["wan_addr"] == "" then
mArray.openmptcprouter["wan_addr"] = ut.trim(sys.exec("dig TXT +timeout=" .. timeout .. " +tries=1 +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'\"' '{print $2}'"))
if mArray.openmptcprouter["service_addr_ip"] ~= "" and mArray.openmptcprouter["service_addr_ip"] ~= nil then
mArray.openmptcprouter["wan_addr"] = ut.trim(sys.exec("curl -4 -s -m " .. timeout .. " " .. check_ipv4_website))
if mArray.openmptcprouter["wan_addr"] == "" then
mArray.openmptcprouter["wan_addr"] = ut.trim(sys.exec("dig -4 TXT +timeout=" .. timeout .. " +tries=1 +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'\"' '{print $2}'"))
end
end
if mArray.openmptcprouter["ipv6"] == "enabled" then
if mArray.openmptcprouter["ipv6"] == "enabled" or ( mArray.openmptcprouter["service_addr_ip6"] ~= "" and mArray.openmptcprouter["service_addr_ip6"] ~= nil) then
mArray.openmptcprouter["wan_addr6"] = uci:get("openmptcprouter","omr","public_detected_ipv6") or ""
if mArray.openmptcprouter["wan_addr6"] == "" then
mArray.openmptcprouter["wan_addr6"] = ut.trim(sys.exec("curl -6 -s -m " .. timeout .. " " .. check_ipv6_website))
if mArray.openmptcprouter["wan_addr6"] == "" then
mArray.openmptcprouter["wan_addr6"] = ut.trim(sys.exec("dig -6 TXT +timeout=" .. timeout .. " +tries=1 +short o-o.myaddr.l.google.com @ns1.google.com | awk -F'\"' '{print $2}'"))
end
end
end
mArray.openmptcprouter["external_check"] = true
@ -720,9 +822,6 @@ function interfaces_status()
end
end
end
if mArray.openmptcprouter["service_addr"] ~= "" then
mArray.openmptcprouter["service_addr_ip"] = ut.trim(sys.exec("resolveip -4 -t 1 " .. mArray.openmptcprouter["service_addr"] .. " | head -n 1"))
end
end
if mArray.openmptcprouter["service_addr"] ~= "" and mArray.openmptcprouter["service_addr"] ~= "127.0.0.1" then
@ -738,92 +837,105 @@ function interfaces_status()
mArray.openmptcprouter["vps_hostname"] = "Server"
-- Get VPS info
ucic:foreach("openmptcprouter", "server", function(s)
local serverip = uci:get("openmptcprouter",s[".name"],"ip") or ""
local serverips = uci:get("openmptcprouter",s[".name"],"ip") or { "" }
local master = uci:get("openmptcprouter",s[".name"],"master") or "1"
if serverip ~= "" and (master == "1" or mArray.openmptcprouter["wan_addr"] == serverip) then
mArray.openmptcprouter["vps_omr_version"] = uci:get("openmptcprouter", s[".name"], "omr_version") or ""
mArray.openmptcprouter["vps_kernel"] = uci:get("openmptcprouter",s[".name"],"kernel") or ""
mArray.openmptcprouter["vps_machine"] = uci:get("openmptcprouter",s[".name"],"machine") or ""
timeout = uci:get("openmptcprouter","settings","status_vps_timeout") or "2"
if uci:get("openmptcprouter",s[".name"],"admin_error") == "1" then
mArray.openmptcprouter["vps_admin_error"] = true
end
local adminport = uci:get("openmptcprouter",s[".name"],"port") or "65500"
local token = uci:get("openmptcprouter",s[".name"],"token") or ""
if token ~= "" then
local vpsinfo_json = sys.exec('curl -4 --max-time ' .. timeout .. ' -s -k -H "Authorization: Bearer ' .. token .. '" https://' .. serverip .. ':' .. adminport .. '/status')
if vpsinfo_json ~= "" and vpsinfo_json ~= nil then
local status, vpsinfo = pcall(function()
return json.decode(vpsinfo_json)
end)
if status and vpsinfo.vps ~= nil then
mArray.openmptcprouter["vps_loadavg"] = vpsinfo.vps.loadavg or ""
mArray.openmptcprouter["vps_uptime"] = vpsinfo.vps.uptime or ""
mArray.openmptcprouter["vps_mptcp"] = vpsinfo.vps.mptcp.enabled or ""
mArray.openmptcprouter["vps_hostname"] = vpsinfo.vps.hostname or ""
mArray.openmptcprouter["vps_time"] = vpsinfo.vps.time or ""
if vpsinfo.vps.kernel ~= nil then
mArray.openmptcprouter["vps_kernel"] = vpsinfo.vps.kernel or ""
end
if vpsinfo.vps.omr_version ~= nil then
mArray.openmptcprouter["vps_omr_version"] = vpsinfo.vps.omr_version or ""
end
if vpsinfo.vps.time ~= "" then
if math.abs(os.time() - vpsinfo.vps.time) > 10 then
mArray.openmptcprouter["vps_time_accurate"] = false
else
mArray.openmptcprouter["vps_time_accurate"] = true
for key, value in pairs(serverips) do
serverip = value
if serverip ~= "" and (master == "1" or mArray.openmptcprouter["wan_addr"] == serverip or mArray.openmptcprouter["wan_addr6"] == serverip) and mArray.openmptcprouter["vps_admin"] == false then
mArray.openmptcprouter["vps_omr_version"] = uci:get("openmptcprouter", s[".name"], "omr_version") or ""
mArray.openmptcprouter["vps_kernel"] = uci:get("openmptcprouter",s[".name"],"kernel") or ""
mArray.openmptcprouter["vps_machine"] = uci:get("openmptcprouter",s[".name"],"machine") or ""
timeout = uci:get("openmptcprouter","settings","status_vps_timeout") or "2"
if uci:get("openmptcprouter",s[".name"],"admin_error") == "1" then
mArray.openmptcprouter["vps_admin_error"] = true
end
local adminport = uci:get("openmptcprouter",s[".name"],"port") or "65500"
local token = uci:get("openmptcprouter",s[".name"],"token") or ""
if token ~= "" then
local vpsinfo_json = ""
if mArray.openmptcprouter["service_addr_ip"] ~= "" then
vpsinfo_json = sys.exec('curl --max-time ' .. timeout .. ' -s -k -H "Authorization: Bearer ' .. token .. '" https://' .. serverip .. ':' .. adminport .. '/status')
end
if mArray.openmptcprouter["service_addr_ip6"] ~= "" then
vpsinfo_json = sys.exec('curl --max-time ' .. timeout .. ' -s -k -H "Authorization: Bearer ' .. token .. '" https://[' .. serverip .. ']:' .. adminport .. '/status')
end
if vpsinfo_json ~= "" and vpsinfo_json ~= nil then
local status, vpsinfo = pcall(function()
return json.decode(vpsinfo_json)
end)
if status and vpsinfo.vps ~= nil then
mArray.openmptcprouter["vps_loadavg"] = vpsinfo.vps.loadavg or ""
mArray.openmptcprouter["vps_uptime"] = vpsinfo.vps.uptime or ""
mArray.openmptcprouter["vps_mptcp"] = vpsinfo.vps.mptcp.enabled or ""
mArray.openmptcprouter["vps_hostname"] = vpsinfo.vps.hostname or ""
mArray.openmptcprouter["vps_time"] = vpsinfo.vps.time or ""
if vpsinfo.vps.kernel ~= nil then
mArray.openmptcprouter["vps_kernel"] = vpsinfo.vps.kernel or ""
end
if vpsinfo.vps.omr_version ~= nil then
mArray.openmptcprouter["vps_omr_version"] = vpsinfo.vps.omr_version or ""
end
if vpsinfo.vps.time ~= "" then
if math.abs(os.time() - vpsinfo.vps.time) > 10 then
mArray.openmptcprouter["vps_time_accurate"] = false
else
mArray.openmptcprouter["vps_time_accurate"] = true
end
end
mArray.openmptcprouter["vps_admin"] = true
mArray.openmptcprouter["vps_status"] = "UP"
mArray.openmptcprouter["vps_admin_error_msg"] = ""
else
uci:set("openmptcprouter",s[".name"],"admin_error","1")
mArray.openmptcprouter["vps_admin_error"] = true
uci:delete("openmptcprouter",s[".name"],"token")
uci:save("openmptcprouter",s[".name"])
uci:commit("openmptcprouter",s[".name"])
mArray.openmptcprouter["vps_admin"] = false
mArray.openmptcprouter["vps_admin_error_msg"] = "Answer error"
end
mArray.openmptcprouter["vps_admin"] = true
mArray.openmptcprouter["vps_status"] = "UP"
mArray.openmptcprouter["vps_admin_error_msg"] = ""
if status and vpsinfo.vpn ~= nil then
mArray.openmptcprouter["vpn_traffic_rx"] = vpsinfo.vpn.rx or "0"
mArray.openmptcprouter["vpn_traffic_tx"] = vpsinfo.vpn.tx or "0"
mArray.openmptcprouter["vpn_traffic"] = mArray.openmptcprouter["vpn_traffic_tx"] + mArray.openmptcprouter["vpn_traffic_rx"]
else
mArray.openmptcprouter["vpn_traffic_rx"] = "0"
mArray.openmptcprouter["vpn_traffic_tx"] = "0"
mArray.openmptcprouter["vpn_traffic"] = "0"
end
if status and vpsinfo.shadowsocks ~= nil then
mArray.openmptcprouter["ss_traffic"] = vpsinfo.shadowsocks.traffic or "0"
else
mArray.openmptcprouter["ss_traffic"] = "0"
end
if status and vpsinfo.v2ray ~= nil then
mArray.openmptcprouter["v2ray_traffic_rx"] = vpsinfo.v2ray.rx or "0"
mArray.openmptcprouter["v2ray_traffic_tx"] = vpsinfo.v2ray.tx or "0"
mArray.openmptcprouter["v2ray_traffic"] = mArray.openmptcprouter["v2ray_traffic_tx"] + mArray.openmptcprouter["v2ray_traffic_rx"]
else
mArray.openmptcprouter["v2ray_traffic_rx"] = "0"
mArray.openmptcprouter["v2ray_traffic_tx"] = "0"
mArray.openmptcprouter["v2ray_traffic"] = "0"
end
mArray.openmptcprouter["proxy_traffic"] = mArray.openmptcprouter["ss_traffic"] + mArray.openmptcprouter["v2ray_traffic"]
mArray.openmptcprouter["total_traffic"] = mArray.openmptcprouter["proxy_traffic"] + mArray.openmptcprouter["vpn_traffic"]
else
uci:set("openmptcprouter",s[".name"],"admin_error","1")
mArray.openmptcprouter["vps_admin_error"] = true
uci:delete("openmptcprouter",s[".name"],"token")
uci:save("openmptcprouter",s[".name"])
uci:commit("openmptcprouter",s[".name"])
mArray.openmptcprouter["vps_admin"] = false
mArray.openmptcprouter["vps_admin_error_msg"] = "Answer error"
mArray.openmptcprouter["vps_admin_error_msg"] = "No result"
end
if status and vpsinfo.vpn ~= nil then
mArray.openmptcprouter["vpn_traffic_rx"] = vpsinfo.vpn.rx or "0"
mArray.openmptcprouter["vpn_traffic_tx"] = vpsinfo.vpn.tx or "0"
mArray.openmptcprouter["vpn_traffic"] = mArray.openmptcprouter["vpn_traffic_tx"] + mArray.openmptcprouter["vpn_traffic_rx"]
else
mArray.openmptcprouter["vpn_traffic_rx"] = "0"
mArray.openmptcprouter["vpn_traffic_tx"] = "0"
mArray.openmptcprouter["vpn_traffic"] = "0"
end
if status and vpsinfo.shadowsocks ~= nil then
mArray.openmptcprouter["ss_traffic"] = vpsinfo.shadowsocks.traffic or "0"
else
mArray.openmptcprouter["ss_traffic"] = "0"
end
if status and vpsinfo.v2ray ~= nil then
mArray.openmptcprouter["v2ray_traffic_rx"] = vpsinfo.v2ray.rx or "0"
mArray.openmptcprouter["v2ray_traffic_tx"] = vpsinfo.v2ray.tx or "0"
mArray.openmptcprouter["v2ray_traffic"] = mArray.openmptcprouter["v2ray_traffic_tx"] + mArray.openmptcprouter["v2ray_traffic_rx"]
else
mArray.openmptcprouter["v2ray_traffic_rx"] = "0"
mArray.openmptcprouter["v2ray_traffic_tx"] = "0"
mArray.openmptcprouter["v2ray_traffic"] = "0"
end
mArray.openmptcprouter["proxy_traffic"] = mArray.openmptcprouter["ss_traffic"] + mArray.openmptcprouter["v2ray_traffic"]
mArray.openmptcprouter["total_traffic"] = mArray.openmptcprouter["proxy_traffic"] + mArray.openmptcprouter["vpn_traffic"]
else
mArray.openmptcprouter["vps_admin"] = false
mArray.openmptcprouter["vps_admin_error_msg"] = "No result"
mArray.openmptcprouter["vps_admin_error_msg"] = "No token yet available"
end
else
mArray.openmptcprouter["vps_admin"] = false
mArray.openmptcprouter["vps_admin_error_msg"] = "No token yet available"
end
if mArray.openmptcprouter["vps_admin"] == false then
local vpstest = sys.exec('curl -4 --max-time ' .. timeout .. ' -s -k https://' .. serverip .. ':' .. adminport .. '/')
if vpstest == "" then
mArray.openmptcprouter["vps_admin_error_msg"] = mArray.openmptcprouter["vps_admin_error_msg"] .. " - No API script answer"
if mArray.openmptcprouter["vps_admin"] == false then
if mArray.openmptcprouter["service_addr_ip"] ~= "" then
local vpstest = sys.exec('curl --max-time ' .. timeout .. ' -s -k https://' .. serverip .. ':' .. adminport .. '/')
elseif mArray.openmptcprouter["service_addr_ip6"] ~= "" then
local vpstest = sys.exec('curl --max-time ' .. timeout .. ' -s -k https://[' .. serverip .. ']:' .. adminport .. '/')
end
if vpstest == "" then
mArray.openmptcprouter["vps_admin_error_msg"] = mArray.openmptcprouter["vps_admin_error_msg"] .. " - No API script answer"
end
end
end
end
@ -859,7 +971,7 @@ function interfaces_status()
else
mArray.openmptcprouter["tun_state"] = "DOWN"
end
if mArray.openmptcprouter["ipv6"] == "enabled" then
if mArray.openmptcprouter["ipv6"] == "enabled" or mArray.openmptcprouter["service_addr_ip6"] ~= "" then
local tunnel_ipv6_gw = uci:get("network","omr6in4","gateway")
local tunnel_ping6_test = ut.trim(sys.exec("ping6 -w 1 -c 1 " .. tunnel_ipv6_gw .. "%6in4-omr6in4 | grep '100% packet loss'"))
if tunnel_ping6_test == "" then
@ -875,6 +987,8 @@ function interfaces_status()
end
elseif uci:get("openmptcprouter","settings","vpn") == "none" then
mArray.openmptcprouter["tun_service"] = true
mArray.openmptcprouter["tun_state"] = "NONE"
mArray.openmptcprouter["tun6_state"] = "NONE"
end
mArray.openmptcprouter["multi_vpn"] = false
@ -996,7 +1110,9 @@ function interfaces_status()
local interface = section[".name"]
local net = ntm:get_network(interface)
local ipaddr = net:ipaddr() or ""
local ip6addr = net:ip6addr() or ""
local gateway = section["gateway"] or ""
local gateway6 = section["ip6gw"] or ""
local multipath = section["multipath"]
local enabled = section["auto"]
@ -1034,7 +1150,13 @@ function interfaces_status()
if ipaddr == "" and ifname ~= nil and ifname ~= "" then
ipaddr = ut.trim(sys.exec("ip -4 addr show dev " .. ifname .. " | grep -m 1 inet | awk '{print $2}' | cut -d'/' -s -f1 | tr -d '\n'"))
end
if ipaddr == "" then
if ip6addr == "" and ifname ~= nil and ifname ~= "" then
ip6addr = ut.trim(sys.exec("ip -6 -br addr ls dev " .. ifname .. " | awk -F'[ /]+' '{print $3}' | tr -d '\n'"))
end
if ip6addr == "" and ifname ~= nil and ifname ~= "" then
ip6addr = ut.trim(sys.exec("ip -6 addr show dev " .. ifname .. " | grep -m 1 inet | awk '{print $2}' | cut -d'/' -s -f1 | tr -d '\n'"))
end
if ipaddr == "" and ip6addr == "" then
connectivity = "ERROR"
end
@ -1071,8 +1193,10 @@ function interfaces_status()
-- Detect WAN gateway status
local gw_ping = "UP"
if ifname ~= nil and ifname:match("^tun.*") and interface:match("^ovpn.*") then
local gw_ping6 = "UP"
if ifname ~= nil and not (ifname:match("^tun.*") or interface:match("^ovpn.*")) then
gateway = ut.trim(sys.exec("ip -4 r list dev " .. ifname .. " | grep via | grep -v default | grep -v metric | awk '{print $1}' | tr -d '\n'"))
gateway6 = ut.trim(sys.exec("ip -6 r list dev " .. ifname .. " | grep via | grep -v default | grep -v metric | awk '{print $1}' | tr -d '\n'"))
end
if gateway == "" then
@ -1086,18 +1210,40 @@ function interfaces_status()
end
end
end
if gateway6 == "" then
gateway6 = get_gateway6(interface)
end
if gateway6 == "" and ifname ~= nil and ifname ~= "" then
if fs.access("/sys/class/net/" .. ifname) then
gateway6 = ut.trim(sys.exec("ip -6 r list dev " .. ifname .. " | grep kernel | awk '/proto kernel/ {print $1}' | grep -v / | tr -d '\n'"))
if gateway6 == "" then
gateway6 = ut.trim(sys.exec("ip -6 r list dev " .. ifname .. " | grep default | awk '{print $3}' | tr -d '\n'"))
end
end
end
local signal = ""
local operator = ""
local phonenumber = ""
local donglestate = ""
local networktype = ""
if gateway ~= "" then
if gateway ~= "" or gateway6 ~= "" then
if uci:get("openmptcprouter", "settings", "disablegwping") ~= "1" and connectivity ~= "ERROR" then
local gw_ping_test = ut.trim(sys.exec("ping -w 1 -c 1 " .. gateway .. " | grep '100% packet loss'"))
if gw_ping_test ~= "" then
gw_ping = "DOWN"
if connectivity == "OK" then
connectivity = "WARNING"
if gateway ~= "" then
local gw_ping_test = ut.trim(sys.exec("ping -w 1 -c 1 " .. gateway .. " | grep '100% packet loss'"))
if gw_ping_test ~= "" then
gw_ping = "DOWN"
if connectivity == "OK" then
connectivity = "WARNING"
end
end
end
if gateway6 ~= "" then
local gw_ping6_test = ut.trim(sys.exec("ping -w 1 -c 1 " .. gateway6 .. " | grep '100% packet loss'"))
if gw_ping6_test ~= "" then
gw_ping6 = "DOWN"
if connectivity == "OK" then
connectivity = "WARNING"
end
end
end
end
@ -1111,7 +1257,7 @@ function interfaces_status()
networktype = ut.trim(sys.exec("echo '".. intfdata .. "' | awk -F';' '{print $5}'"))
end
end
elseif gateway == "" then
elseif gateway == "" and gateway6 == "" then
gw_ping = "DOWN"
connectivity = "ERROR"
end
@ -1147,7 +1293,7 @@ function interfaces_status()
local latency = ""
local server_ping = ""
--if connectivity ~= "ERROR" and ifname ~= "" and gateway ~= "" and gw_ping ~= "DOWN" and ifname ~= nil and mArray.openmptcprouter["service_addr"] ~= "" and ipaddr ~= "" then
if ifname ~= "" and gateway ~= "" and gw_ping ~= "DOWN" and ifname ~= nil and mArray.openmptcprouter["service_addr"] ~= "" and ipaddr ~= "" and connectivity ~= "ERROR" then
if ifname ~= "" and (gateway ~= "" or gateway6 ~= "") and gw_ping ~= "DOWN" and ifname ~= nil and mArray.openmptcprouter["service_addr"] ~= "" and (ipaddr ~= "" or ip6addr ~= "") and connectivity ~= "ERROR" then
local serverip = mArray.openmptcprouter["service_addr"]
if serverip == "127.0.0.1" then
serverip = mArray.openmptcprouter["wan_addr"]
@ -1170,7 +1316,7 @@ function interfaces_status()
local multipath_available = ""
local multipath_available_state = ""
if connectivity ~= "ERROR" and mArray.openmptcprouter["dns"] == true and ifname ~= nil and ifname ~= "" and gateway ~= "" and gw_ping == "UP" then
if connectivity ~= "ERROR" and mArray.openmptcprouter["dns"] == true and ifname ~= nil and ifname ~= "" and (gateway ~= "" or gateway6 ~= "") and (gw_ping == "UP" or gw_ping6 == "UP") then
-- Test if multipath can work on the connection
local multipath_available_state = uci:get("openmptcprouter",interface,"mptcp_status") or ""
if multipath_available_state == "" then
@ -1207,7 +1353,9 @@ function interfaces_status()
-- end
local mtu = ""
local whois = ""
local whois6 = ""
local publicIP = ""
local publicIP6 = ""
if connectivity ~= "ERROR" then
if ifname ~= nil and ifname:match("^tun.*") and interface:match("^ovpn.*") then
@ -1215,24 +1363,39 @@ function interfaces_status()
if ifname ~= nil and publicIP == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then
publicIP = ut.trim(sys.exec("omr-ip-intf " .. get_device(interface:sub(5))))
end
publicIP6 = uci:get("openmptcprouter",interface:sub(5),"publicip6") or ""
if ifname ~= nil and publicIP6 == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then
publicIP6 = ut.trim(sys.exec("omr-ip6-intf " .. get_device(interface:sub(5))))
end
else
publicIP = uci:get("openmptcprouter",interface,"publicip") or ""
if ifname ~= nil and publicIP == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then
publicIP = ut.trim(sys.exec("omr-ip-intf " .. ifname))
end
publicIP6 = uci:get("openmptcprouter",interface,"publicip6") or ""
if ifname ~= nil and publicIP6 == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then
publicIP6 = ut.trim(sys.exec("omr-ip6-intf " .. ifname))
end
end
if publicIP ~= "" then
whois = uci:get("openmptcprouter",interface,"asn") or ""
if whois == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then
--whois = ut.trim(sys.exec("whois " .. publicIP .. " | grep -i 'netname' | awk '{print $2}'"))
whois = ut.trim(sys.exec("wget -4 -qO- -T 1 'http://api.iptoasn.com/v1/as/ip/" .. publicIP .. "' | jsonfilter -q -e '@.as_description'"))
whois = ut.trim(sys.exec("whois " .. publicIP .. " | grep -i 'netname' | awk '{print $2}'"))
--whois = ut.trim(sys.exec("wget -4 -qO- -T 1 'http://api.iptoasn.com/v1/as/ip/" .. publicIP .. "' | jsonfilter -q -e '@.as_description'"))
end
end
if publicIP6 ~= "" then
whois6 = uci:get("openmptcprouter",interface,"asn") or ""
if whois6 == "" and mArray.openmptcprouter["external_check"] ~= false and mArray.openmptcprouter["dns"] == true then
whois6 = ut.trim(sys.exec("whois " .. publicIP6 .. " | grep -i 'netname' | awk '{print $2}'"))
--whois6 = ut.trim(sys.exec("wget -6 -qO- -T 1 'http://api.iptoasn.com/v1/as/ip/" .. publicIP6 .. "' | jsonfilter -q -e '@.as_description'"))
end
end
if ifname ~= "" and ifname ~= nil then
if fs.access("/sys/class/net/" .. ifname) then
mtu = ut.trim(sys.exec("cat /sys/class/net/" .. ifname .. "/mtu | tr -d '\n'"))
if mtu == "" and interface ~= nil then
mtu = uci:get("openmptcprouter",interface,"mtu") or ""
mtu = uci:get("openmptcprouter",interface,"mtu") or ""
end
end
end
@ -1249,17 +1412,22 @@ function interfaces_status()
--link = net:adminlink() or "",
ifname = ifname,
ipaddr = ipaddr,
ip6addr = ip6addr,
gateway = gateway,
gateway6 = gateway6,
multipath = section["multipath"],
status = connectivity,
wanip = publicIP,
wanip6 = publicIP6,
latency = latency,
mtu = mtu,
whois = whois or "unknown",
whois6 = whois6 or "unknown",
qos = section["trafficcontrol"],
download = section["download"],
upload = section["upload"],
gw_ping = gw_ping,
gw_ping6 = gw_ping6,
server_ping = server_ping,
ipv6_discover = ipv6_discover,
multipath_available = multipath_available,
@ -1350,6 +1518,11 @@ function _ipv6_discover(interface)
end
local methods = {
getrootfs = {
call = function()
return get_rootfs()
end
},
status = {
call = function()
return interfaces_status()

View file

@ -0,0 +1,11 @@
# See /LICENSE for more information.
# This is free software, licensed under the GNU General Public License v2.
include $(TOPDIR)/rules.mk
LUCI_TITLE:=LuCI support for sysupgrades
LUCI_DEPENDS:=+luci-base +uhttpd-mod-ubus +rpcd +rpcd-mod-rpcsys +cgi-io
include $(TOPDIR)/feeds/luci/luci.mk
# call BuildPackage - OpenWrt buildroot signature

View file

@ -0,0 +1,123 @@
<%
-- all lua code provided by https://github.com/jow-/
-- thank you very much!
function apply_acls(filename, session)
local json = require "luci.jsonc"
local util = require "luci.util"
local fs = require "nixio.fs"
local grants = { }
local acl = json.parse(fs.readfile(filename))
if type(acl) ~= "table" then
return
end
local group, perms
for group, perms in pairs(acl) do
local perm, scopes
for perm, scopes in pairs(perms) do
if type(scopes) == "table" then
local scope, objects
for scope, objects in pairs(scopes) do
if type(objects) == "table" then
if not grants[scope] then
grants[scope] = { }
end
if next(objects) == 1 then
local _, object
for _, object in ipairs(objects) do
if not grants[scope][object] then
grants[scope][object] = { }
end
table.insert(grants[scope][object], perm)
end
else
local object, funcs
for object, funcs in pairs(objects) do
if type(funcs) == "table" then
local _, func
for _, func in ipairs(funcs) do
if not grants[scope][object] then
grants[scope][object] = { }
end
table.insert(grants[scope][object], func)
end
end
end
end
end
end
end
end
end
local _, scope, object, func
for scope, _ in pairs(grants) do
local objects = { }
for object, _ in pairs(_) do
for _, func in ipairs(_) do
table.insert(objects, { object, func })
end
end
util.ubus("session", "grant", {
ubus_rpc_session = session,
scope = scope, objects = objects
})
end
end
apply_acls("/usr/share/rpcd/acl.d/sysupgrade.json", luci.dispatcher.context.authsession)
%>
<%+header%>
<h2 name="content"><%:Sysupgrade%></h2>
<div class="cbi-map-descr">
Easily search and install new releases and package upgrades. Sysupgrade firmware are created on demand based on locally installed packages.
</div>
<div style="display: none" id="status_box" class="alert-message info"></div>
<div style="display: none" id="packages" class="alert-message success"></div>
<p>
<textarea style="display: none; width: 100%;" id="edit_packages" rows="15"></textarea>
</p>
<fieldset class="cbi-section">
<form method="post" action="">
<div class="cbi-selection-node">
<div class="cbi-value" id="keep_container" style="display: none">
<div class="cbi-section-descr">
Check "Keep settings" to retain the current configuration (requires a compatible firmware).
</div>
<label class="cbi-value-title" for="keep">Keep settings:</label>
<div class="cbi-value-field">
<input name="keep" id="keep" checked="checked" type="checkbox">
</div>
</div>
<div class="cbi-value" id="edit_button" style="display: none">
<div class="cbi-value-field">
<input class="cbi-button" value="Edit installed packages" onclick="edit_packages()" type="button">
</div>
</div>
<div class="cbi-value cbi-value" id="server_div" style="display:none">
<label class="cbi-value-title" for="server">Server:</label>
<div class="cbi-value-field">
<input onclick="edit_server()" class="cbi-button cbi-button-edit" value="" type="button" id="server" name="server">
</div>
</div>
<div class="cbi-value cbi-value-last">
<div class="cbi-value-field">
<input class="cbi-button cbi-button-apply" value="Search for upgrades" style="display: none" onclick="upgrade_check()" type="button" id="upgrade_button">
</div>
</div>
</div>
</form>
</fieldset>
<script type="text/javascript">
data = {};
data["ubus_rpc_session"] = "<%=luci.dispatcher.context.authsession%>"
origin = document.location.href.replace(location.pathname, "")
ubus_url = origin + "/ubus/"
</script>
<script type="text/javascript" src="<%=resource%>/sysupgrade.js"></script>
<%+footer%>

View file

@ -0,0 +1,11 @@
msgid ""
msgstr "Content-Type: text/plain; charset=UTF-8"
#: applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm:76
#: applications/luci-app-attendedsysupgrade/root/usr/share/luci/menu.d/luci-app-attendedsysupgrade.json:3
msgid "Attended Sysupgrade"
msgstr ""
#: applications/luci-app-attendedsysupgrade/root/usr/share/rpcd/acl.d/attendedsysupgrade.json:3
msgid "attended sysupgrade via rpcd and luci"
msgstr ""

View file

@ -0,0 +1,20 @@
#!/bin/sh /etc/rc.common
# Copyright (C) 2020 Ycarus (Yannick Chabanois) <ycarus@zugaina.org>
# Released under GPL 3. See LICENSE for the full terms.
{
START=90
STOP=10
USE_PROCD=1
}
start_service()
{
if [ -f /etc/backup/installed_packages.txt ]; then
if [ "$(opkg -V0 update)" = "" ]; then
grep "\toverlay" /etc/backup/installed_packages.txt | cut -f1 | xargs -r opkg -V0 install
rm /etc/backup/installed_packages.txt
fi
fi
}

View file

@ -0,0 +1,20 @@
#!/bin/sh
/etc/init.d/uhttpd restart
/etc/init.d/rpcd reload
[ -e /etc/config/sysupgrade ] && return 0
touch /etc/config/sysupgrade
uci -q batch <<EOF
set sysupgrade.server=server
set sysupgrade.server.url='https://download.openmptcprouter.com'
set sysupgrade.client=client
set sysupgrade.client.upgrade_packages='0'
set sysupgrade.client.auto_search='0'
set sysupgrade.client.advanced_mode='0'
commit sysupgrade
EOF
return 0

View file

@ -0,0 +1,13 @@
{
"admin/system/sysupgrade": {
"title": "Sysupgrade",
"order": 1,
"action": {
"type": "template",
"path": "sysupgrade"
},
"depends": {
"acl": [ "sysupgrade" ]
}
}
}

View file

@ -0,0 +1,34 @@
{
"sysupgrade": {
"description": "sysupgrade via rpcd and luci",
"read": {
"ubus": {
"rpc-sys": [
"upgrade_start",
"packagelist"
],
"system": [
"board",
"info"
],
"openmptcprouter": [
"rootfs"
],
"uci": [
"get", "set", "commit"
]
},
"uci": [
"sysupgrade"
]
},
"write": {
"cgi-io": [
"upload"
],
"uci": [
"sysupgrade"
]
}
}
}

View file

@ -0,0 +1,386 @@
function $(s) {
return document.getElementById(s.substring(1));
}
function show(s) {
$(s).style.display = 'block';
}
function hide(s) {
$(s).style.display = 'none';
}
function set_server() {
hide("#status_box");
data.url = $("#server").value;
ubus_call("uci", "set", {
"config": "sysupgrade",
"section": "server",
values: {
"url": data.url
}
})
ubus_call("uci", "commit", {
"config": "sysupgrade"
})
var server_button = $("#server")
server_button.type = 'button';
server_button.className = 'cbi-button cbi-button-edit';
server_button.parentElement.removeChild($("#button_set"));
server_button.onclick = edit_server;
}
function edit_server() {
$("#server").type = 'text';
$("#server").onkeydown = function(event) {
if (event.key === 'Enter') {
set_server();
return false;
}
}
$("#server").className = '';
$("#server").onclick = null;
var button_set = document.createElement("input");
button_set.type = "button";
button_set.value = "Save";
button_set.name = "button_set";
button_set.id = "button_set";
button_set.className = 'cbi-button cbi-button-save';
button_set.onclick = set_server
$("#server").parentElement.appendChild(button_set);
}
function edit_packages() {
data.edit_packages = true
hide("#edit_button");
$("#edit_packages").value = data.packages.join("\n");
show("#edit_packages");
}
// initial setup, get system information
function setup() {
ubus_call("rpc-sys", "packagelist", {}, "packages");
ubus_call("system", "board", {}, "release");
ubus_call("system", "board", {}, "board_name");
ubus_call("system", "info", {}, "memory");
ubus_call("openmptcprouter", "rootfs", {}, "format");
uci_get({
"config": "sysupgrade",
"section": "server",
"option": "url"
})
uci_get({
"config": "sysupgrade",
"section": "client",
"option": "upgrade_packages"
})
uci_get({
"config": "sysupgrade",
"section": "client",
"option": "advanced_mode"
})
uci_get({
"config": "sysupgrade",
"section": "client",
"option": "auto_search"
})
setup_ready();
}
function setup_ready() {
// checks if a async ubus calls have finished
if (ubus_counter != ubus_closed) {
setTimeout(setup_ready, 300)
} else {
if (data.auto_search == 1) {
upgrade_check();
} else {
show("#upgrade_button");
show("#server_div");
$("#server").value = data.url;
}
}
}
function uci_get(option) {
// simple wrapper to get a uci value store in data.<option>
ubus_call("uci", "get", option, option["option"])
}
ubus_counter = 0;
ubus_closed = 0;
function ubus_call(command, argument, params, variable) {
var request_data = {};
request_data.jsonrpc = "2.0";
request_data.id = ubus_counter;
request_data.method = "call";
request_data.params = [data.ubus_rpc_session, command, argument, params]
var request_json = JSON.stringify(request_data)
ubus_counter++;
var request = new XMLHttpRequest();
request.open("POST", ubus_url, true);
request.setRequestHeader("Content-type", "application/json");
request.onload = function(event) {
if (request.status === 200) {
var response = JSON.parse(request.responseText)
if (!("error" in response) && "result" in response) {
if (response.result.length === 2) {
if (command === "uci") {
data[variable] = response.result[1].value
} else {
data[variable] = response.result[1][variable]
}
}
} else {
set_status("danger", "<b>Ubus call failed:</b><br />Request: " + request_json + "<br />Response: " + JSON.stringify(response))
}
ubus_closed++;
}
}
request.send(request_json);
}
function set_status(type, message, loading, show_log) {
$("#status_box").className = "alert-message " + type;
var loading_image = '';
if (loading) {
loading_image = '<img src="/luci-static/resources/icons/loading.gif" alt="Loading" style="vertical-align:middle"> ';
}
if (data.buildlog_url && show_log) {
message += ' <p><a target="_blank" href="' + data.buildlog_url + '">Build log</a></p>'
}
$("#status_box").innerHTML = loading_image + message;
show("#status_box")
}
function upgrade_check() {
var current_version = data.release.version.toLowerCase();
var current_branch = current_version.split('.').slice(0, 2).join('.')
var candidates = []
hide("#status_box");
hide("#server_div");
set_status("info", "Searching for upgrades", true);
fetch(data.url + "/api/versions")
.then(response => response.json())
.then(response => {
var branches = response["branches"]
for (i in branches) {
// handle snapshots in a special way - as always
if (current_version == "snapshot" && branches[i]["latest"] == "snapshot") {
candidates.unshift(branches[i])
break
}
if (current_version == branches[i]["latest"]) {
break
}
if (current_branch != branches[i]["name"]) {
branches[i]["warn_branch_jump"] = true
}
candidates.unshift(branches[i])
if (current_branch == branches[i]["name"]) {
// don't offer branches older than the current
break
}
}
if (candidates.length > 0) {
var info_output = "<h3>New release <b>" + candidates[0].latest + "</b> available</h3>"
info_output += "Installed version: " + data.release.version
// tell server the currently installed version
request_dict.current_version = request_dict.version;
// tell server what version to install
request_dict.version = candidates[0].latest;
// tell server to diff the requested packages with the default packages
// this allows to not automatically re-install default packages which
// where dropped in later releases
request_dict.diff_packages = true;
set_status("success", info_output)
if (data.advanced_mode == 1) {
show("#edit_button");
}
var upgrade_button = $("#upgrade_button")
upgrade_button.value = "Request firmware";
upgrade_button.style.display = "block";
upgrade_button.disabled = false;
upgrade_button.onclick = upgrade_request;
} else {
set_status("success", "No upgrades available")
}
});
}
function upgrade_request() {
// Request firmware using the following parameters
// distro, version, target, board_name, packages
$("#upgrade_button").disabled = true;
hide("#edit_packages");
hide("#edit_button");
hide("#keep_container");
// add board info to let server determine profile
request_dict.target = data.release.target
request_dict.profile = data.board_name
request_dict.rootfs = data.format
if (data.edit_packages == true) {
request_dict.packages = $("#edit_packages").value.split("\n")
} else {
request_dict.packages = Object.keys(data.packages);
}
server_request()
}
function upgrade_request_callback(response) {
var sysupgrade_file = "";
console.log(response)
for (i in response.images) {
if (response.images[i].type == "sysupgrade") {
sysupgrade_file = response.images[i].name;
}
}
if (sysupgrade_file != "") {
data.sysupgrade_url = data.url + '/release/' + response.bin_dir + '/' + sysupgrade_file
var info_output = '<h3>Firmware created</h3><p>Created file: <a href="' + data.sysupgrade_url + '">' + sysupgrade_file + '</p></a>'
set_status("success", info_output, false, true);
show("#keep_container");
var upgrade_button = $("#upgrade_button")
upgrade_button.disabled = false;
upgrade_button.style.display = "block";
upgrade_button.value = "Flash firmware";
upgrade_button.onclick = download_image;
} else {
set_status("danger", "Firmware build successfull but device not sysupgrade compatible!")
}
}
function flash_image() {
// Flash image via rpc-sys upgrade_start
set_status("warning", "Flashing firmware. Don't unpower device", true)
ubus_call("rpc-sys", "upgrade_start", {
"keep": $("#keep").checked
}, 'message');
ping_max = 3600; // in seconds
setTimeout(ping_ubus, 10000)
}
function ping_ubus() {
// Tries to connect to ubus. If the connection fails the device is likely still rebooting.
// If more time than ping_max passes update may failed
if (ping_max > 0) {
ping_max--;
var request = new XMLHttpRequest();
request.open("GET", ubus_url, true);
request.addEventListener('error', function(event) {
set_status("warning", "Rebooting device - please wait!", true);
setTimeout(ping_ubus, 5000)
});
request.addEventListener('load', function(event) {
set_status("success", "Success! Please reload web interface");
$("#upgrade_button").value = "Reload page";
show("#upgrade_button");
$("#upgrade_button").disabled = false;
$("#upgrade_button").onclick = function() {
location.reload();
}
});
request.send();
} else {
set_status("danger", "Web interface could not reconnect to your device. Please reload web interface or check device manually")
}
}
function upload_image(blob) {
// Uploads received blob data to the server using cgi-io
set_status("info", "Uploading firmware to device", true);
var request = new XMLHttpRequest();
var form_data = new FormData();
form_data.append("sessionid", data.ubus_rpc_session)
form_data.append("filename", "/tmp/firmware.bin")
form_data.append("filemode", 755) // insecure?
form_data.append("filedata", blob)
request.addEventListener('load', function(event) {
request_json = JSON.parse(request.responseText)
flash_image();
});
request.addEventListener('error', function(event) {
set_status("danger", "Upload of firmware failed, please retry by reloading web interface")
});
request.open('POST', origin + '/cgi-bin/cgi-upload');
request.send(form_data);
}
function download_image() {
// Download image from server once the url was received by upgrade_request
hide("#keep_container");
hide("#upgrade_button");
var download_request = new XMLHttpRequest();
download_request.open("GET", data.sysupgrade_url);
download_request.responseType = "arraybuffer";
download_request.onload = function() {
if (this.status === 200) {
var blob = new Blob([download_request.response], {
type: "application/octet-stream"
});
upload_image(blob)
}
};
set_status("info", "Downloading firmware to web browser memory", true);
download_request.send();
}
function server_request() {
fetch(data.url + "/api/build", {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(request_dict)
})
.then(response => {
switch (response.status) {
case 200:
response.json()
.then(response => {
upgrade_request_callback(response)
});
break;
case 202:
set_status("info", "Processing request", true);
setTimeout(function() {
server_request()
}, 5000)
break;
case 400: // bad request
case 422: // bad package
case 500: // build failed
console.log('error (' + response.status + ')');
response.json()
.then(response => {
if (response.buildlog) {
data.buildlog_url = data.url + '/' + response.bin_dir + '/buildlog.txt';
}
set_status("danger", response.message);
});
break;
}
});
}
request_dict = {}
document.onload = setup()

View file

@ -65,8 +65,8 @@ TYPE="$2"
#FLAG_PATH=`find /sys/devices/ -path "*/net/$DEVICE/flags"`
[ -d "/sys/class/net/$DEVICE/" ] || {
echo "Device '$DEVICE' can't found!"
echo "Use the hardware name like in ifconfig"
#echo "Device '$DEVICE' can't found!"
#echo "Use the hardware name like in ifconfig"
exit 1
}

View file

@ -1,5 +1,5 @@
SETROUTE=false
set_route() {
local multipath_config_route interface_gw interface_if
INTERFACE=$1
@ -33,36 +33,111 @@ set_route() {
fi
}
set_route6() {
local multipath_config_route interface_gw interface_if
INTERFACE=$1
PREVINTERFACE=$2
SETDEFAULT=$3
[ -z "$SETDEFAULT" ] && SETDEFAULT="yes"
multipath_config_route=$(uci -q get openmptcprouter.$INTERFACE.multipath)
[ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$INTERFACE.multipath || echo "off")
[ "$(uci -q get openmptcprouter.$INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${INTERFACE}.multipath || echo "off")"
interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]')
[ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
[ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.ifname)
interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up")
if [ "$multipath_config_route" != "off" ] && [ "$SETROUTE" != true ] && [ "$INTERFACE" != "$PREVINTERFACE" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then
interface_gw="$(uci -q get network.$INTERFACE.gateway)"
if [ -z "$interface_gw" ]; then
interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n")
fi
if [ -z "$interface_gw" ]; then
interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.target="::"].nexthop' | tr -d "\n")
fi
if [ -z "$interface_gw" ]; then
interface_gw=$(ubus call network.interface.${INTERFACE}_6 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n")
fi
if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ] && [ -n "$(echo $interface_gw | grep ':')" ]; then
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "$PREVINTERFACE down. Replace default route by $interface_gw dev $interface_if"
[ "$SETDEFAULT" = "yes" ] && ip -6 route replace default scope global nexthop via $interface_gw dev $interface_if
ip -6 route replace default via $interface_gw dev $interface_if table 991337 && SETROUTE=true
fi
fi
}
set_server_default_route() {
local server=$1
local serverip multipath_config_route
config_get serverip $server ip
[ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')"
config_get disabled $server disabled
[ "$disabled" = "1" ] && return
multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath)
[ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off")
[ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")"
if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric 1 | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ]; then
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route via $OMR_TRACKER_DEVICE_GATEWAY"
if [ "$(ip r show $serverip | grep nexthop)" != "" ]; then
ip r delete $serverip >/dev/null 2>&1
server_route() {
local serverip multipath_config_route
serverip=$1
[ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')"
config_get disabled $server disabled
[ "$disabled" = "1" ] && return
multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath)
[ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off")
[ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")"
if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric 1 | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ]; then
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route via $OMR_TRACKER_DEVICE_GATEWAY"
if [ "$(ip r show $serverip | grep nexthop)" != "" ]; then
ip r delete $serverip >/dev/null 2>&1
fi
ip route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric 1
fi
ip route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric 1
fi
}
config_list_foreach $server ip server_route
}
set_server_default_route6() {
local server=$1
server_route() {
local serverip multipath_config_route
serverip=$1
[ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')"
config_get disabled $server disabled
[ "$disabled" = "1" ] && return
multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath)
[ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off")
[ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")"
if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric 1 | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY6)" = "" ] && [ "$multipath_config_route" != "off" ]; then
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route via $OMR_TRACKER_DEVICE_GATEWAY6"
if [ "$(ip -6 r show $serverip | grep nexthop)" != "" ]; then
ip -6 r delete $serverip >/dev/null 2>&1
fi
ip -6 route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric 1
fi
}
config_list_foreach $server ip server_route
}
delete_server_default_route() {
local server=$1
local serverip
config_get serverip $server ip
[ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')"
config_get disabled $server disabled
[ "$disabled" = "1" ] && return
if [ "$serverip" != "" ] && [ "$(ip route show $serverip metric 1)" != "" ]; then
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Delete server ($serverip) default route"
ip route del $serverip metric 1 >/dev/null 2>&1
fi
delete_route() {
local serverip=$1
[ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')"
config_get disabled $server disabled
[ "$disabled" = "1" ] && return
if [ "$serverip" != "" ] && [ "$(ip route show $serverip metric 1)" != "" ]; then
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Delete server ($serverip) default route"
ip route del $serverip metric 1 >/dev/null 2>&1
fi
}
config_list_foreach $server ip delete_route
}
delete_server_default_route6() {
local server=$1
delete_route() {
local serverip=$1
[ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')"
config_get disabled $server disabled
[ "$disabled" = "1" ] && return
if [ "$serverip" != "" ] && [ "$(ip -6 route show $serverip metric 1)" != "" ]; then
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Delete server ($serverip) default route"
ip -6 route del $serverip metric 1 >/dev/null 2>&1
fi
}
config_list_foreach $server ip delete_route
}
set_routes_intf() {
@ -89,7 +164,7 @@ set_routes_intf() {
interface_gw=$(ubus call network.interface.${INTERFACE}_4 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="0.0.0.0"].nexthop' | tr -d "\n")
fi
#if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ] && [ "$(ip route show $serverip | grep $interface_if)" = "" ]; then
if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ]; then
if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ] && [ -n "$(echo $interface_gw | grep :)" ]; then
if [ "$multipath_config_route" = "master" ]; then
weight=10
else
@ -114,6 +189,55 @@ set_routes_intf() {
fi
}
set_routes_intf6() {
local multipath_config_route
local INTERFACE=$1
multipath_config_route=$(uci -q get openmptcprouter.$INTERFACE.multipath)
[ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$INTERFACE.multipath || echo "off")
[ "$(uci -q get openmptcprouter.$INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${INTERFACE}.multipath || echo 'off')"
interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
[ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_6" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
[ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.ifname)
interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]')
#multipath_current_config=$(multipath $interface_if | grep 'deactivated')
interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up")
if [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_if" != "" ] && [ "$interface_up" = "true" ]; then
interface_gw="$(uci -q get network.$INTERFACE.gateway)"
if [ -z "$interface_gw" ]; then
interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n")
fi
if [ -z "$interface_gw" ]; then
interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.target="::"].nexthop' | tr -d "\n")
fi
if [ -z "$interface_gw" ]; then
interface_gw=$(ubus call network.interface.${INTERFACE}_6 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n")
fi
#if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ] && [ "$(ip -6 route show $serverip | grep $interface_if)" = "" ]; then
if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ] && [ -n "$(echo $interface_gw | grep :)" ]; then
if [ "$multipath_config_route" = "master" ]; then
weight=10
else
weight=1
fi
if [ "$multipath_config_route" = "backup" ]; then
nbintfb6=$((nbintfb6+1))
if [ -z "$routesintfbackup6" ]; then
routesintfbackup6="nexthop via $interface_gw dev $interface_if weight $weight"
else
routesintfbackup6="$routesintfbackup6 nexthop via $interface_gw dev $interface_if weight $weight"
fi
else
nbintf6=$((nbintf6+1))
if [ -z "$routesintf6" ]; then
routesintf6="nexthop via $interface_gw dev $interface_if weight $weight"
else
routesintf6="$routesintf6 nexthop via $interface_gw dev $interface_if weight $weight"
fi
fi
fi
fi
}
set_route_balancing() {
local multipath_config_route interface_gw interface_if
INTERFACE=$1
@ -157,84 +281,207 @@ set_route_balancing() {
fi
}
set_server_all_routes() {
local server=$1
local serverip multipath_config_route
config_get serverip $server ip
[ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')"
config_get disabled $server disabled
[ "$disabled" = "1" ] && return
interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname)
[ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
[ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]')
multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath || echo "off")
[ "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo 'off')
[ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")"
if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_up" = "true" ]; then
routesintf=""
routesintfbackup=""
nbintf=0
nbintfb=0
config_load network
config_foreach set_routes_intf interface
uintf="$(echo $routesintf | awk '{print $5}')"
uintfb="$(echo $routesintfbackup | awk '{print $5}')"
if [ -n "$routesintf" ] && ([ "$nbintf" -gt "1" ] && [ "$(ip r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf " ]) || ([ "$nbintf" = "1" ] && [ "$(ip r show $serverip metric 0 | grep $uintf)" = "" ]); then
while [ "$(ip r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "$serverip" ] && [ "$(ip r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "" ]; do
ip r del $serverip
done
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route $serverip $routesintf"
ip route replace $serverip scope global $routesintf
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip r show $serverip metric 0 | tr -d '\t' | tr -d '\n')"
set_route_balancing6() {
local multipath_config_route interface_gw interface_if
INTERFACE=$1
multipath_config_route=$(uci -q get openmptcprouter.$INTERFACE.multipath)
[ -z "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$INTERFACE.multipath || echo "off")
[ "$(uci -q get openmptcprouter.$INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${INTERFACE}.multipath || echo 'off')"
interface_if=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
[ -z "$interface_if" ] && interface_if=$(ifstatus "${INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
[ -z "$interface_if" ] && interface_if=$(uci -q get network.$INTERFACE.ifname)
interface_up=$(ifstatus "$INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]')
interface_current_config=$(uci -q get openmptcprouter.$INTERFACE.state || echo "up")
if [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then
interface_gw="$(uci -q get network.$INTERFACE.gateway)"
if [ -z "$interface_gw" ]; then
interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n")
fi
if [ -n "$routesintfbackup" ] && ([ "$nbintfb" -gt "1" ] && [ "$(ip r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup " ]) || ([ "$nbintfb" = "1" ] && [ "$(ip r show $serverip metric 999 | grep $uintfb)" = "" ]); then
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup nbintfb $nbintfb $OMR_TRACKER_DEVICE"
ip route replace $serverip scope global metric 999 $routesintfbackup
if [ -z "$interface_gw" ]; then
interface_gw=$(ubus call network.interface.$INTERFACE status 2>/dev/null | jsonfilter -q -l 1 -e '@.route[@.target="::"].nexthop' | tr -d "\n")
fi
if [ -z "$interface_gw" ]; then
interface_gw=$(ubus call network.interface.${INTERFACE}_6 status 2>/dev/null | jsonfilter -q -l 1 -e '@.inactive.route[@.target="::"].nexthop' | tr -d "\n")
fi
if [ "$interface_gw" != "" ] && [ "$interface_if" != "" ] && [ -n "$(echo $interface_gw | grep :)" ]; then
if [ "$(uci -q get network.$INTERFACE.weight)" != "" ]; then
weight=$(uci -q get network.$INTERFACE.weight)
elif [ "$(uci -q get openmtpcprouter.$INTERFACE.weight)" != "" ]; then
weight=$(uci -q get openmtpcprouter.$INTERFACE.weight)
elif [ "$multipath_config_route" = "master" ]; then
weight=2
else
weight=1
fi
if [ "$multipath_config_route" = "backup" ]; then
nbintfb6=$((nbintfb6+1))
routesbalancingbackup6="$routesbalancingbackup6 nexthop via $interface_gw dev $interface_if weight $weight"
else
nbintf6=$((nbintf6+1))
routesbalancing6="$routesbalancing6 nexthop via $interface_gw dev $interface_if weight $weight"
fi
fi
fi
}
set_server_all_routes() {
local server=$1
server_route() {
local serverip multipath_config_route
serverip=$1
[ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')"
config_get disabled $server disabled
[ "$disabled" = "1" ] && return
interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname)
[ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
[ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]')
multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath || echo "off")
[ "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo 'off')
[ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")"
if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_up" = "true" ]; then
routesintf=""
routesintfbackup=""
nbintf=0
nbintfb=0
config_load network
config_foreach set_routes_intf interface
uintf="$(echo $routesintf | awk '{print $5}')"
uintfb="$(echo $routesintfbackup | awk '{print $5}')"
if [ -n "$routesintf" ] && ([ "$nbintf" -gt "1" ] && [ "$(ip r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf " ]) || ([ "$nbintf" = "1" ] && [ "$(ip r show $serverip metric 0 | grep $uintf)" = "" ]); then
while [ "$(ip r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "$serverip" ] && [ "$(ip r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "" ]; do
ip r del $serverip
done
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route $serverip $routesintf"
ip route replace $serverip scope global $routesintf
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip r show $serverip metric 0 | tr -d '\t' | tr -d '\n')"
fi
if [ -n "$routesintfbackup" ] && ([ "$nbintfb" -gt "1" ] && [ "$(ip r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup " ]) || ([ "$nbintfb" = "1" ] && [ "$(ip r show $serverip metric 999 | grep $uintfb)" = "" ]); then
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup nbintfb $nbintfb $OMR_TRACKER_DEVICE"
ip route replace $serverip scope global metric 999 $routesintfbackup
fi
fi
}
config_list_foreach $server ip server_route
}
set_server_all_routes6() {
local server=$1
server_route() {
local serverip multipath_config_route
serverip=$1
[ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')"
config_get disabled $server disabled
[ "$disabled" = "1" ] && return
interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname)
[ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
[ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_6" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]')
multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath || echo "off")
[ "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo 'off')
[ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")"
if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_up" = "true" ]; then
routesintf=""
routesintfbackup=""
nbintf6=0
nbintfb6=0
config_load network
config_foreach set_routes_intf interface
uintf="$(echo $routesintf | awk '{print $5}')"
uintfb="$(echo $routesintfbackup | awk '{print $5}')"
if [ -n "$routesintf" ] && ([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 0 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintf " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show $serverip metric 0 | grep $uintf)" = "" ]); then
while [ "$(ip -6 r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "$serverip" ] && [ "$(ip -6 r show $serverip | grep -v nexthop | sed 's/ //g' | tr -d '\n')" != "" ]; do
ip -6 r del $serverip
done
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) default route $serverip $routesintf"
ip -6 route replace $serverip scope global $routesintf
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "New server route is $(ip -6 r show $serverip metric 0 | tr -d '\t' | tr -d '\n')"
fi
if [ -n "$routesintfbackup" ] && ([ "$nbintfb6" -gt "1" ] && [ "$(ip -6 r show $serverip metric 999 | tr -d '\t' | tr -d '\n')" != "$serverip $routesintfbackup " ]) || ([ "$nbintfb6" = "1" ] && [ "$(ip -6 r show $serverip metric 999 | grep $uintfb)" = "" ]); then
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) backup default route $serverip $routesintfbackup nbintfb $nbintfb6 $OMR_TRACKER_DEVICE"
ip -6 route replace $serverip scope global metric 999 $routesintfbackup
fi
fi
}
config_list_foreach $server ip server_route
}
set_server_route() {
local server=$1
local serverip multipath_config_route
config_get serverip $server ip
[ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')"
config_get disabled $server disabled
[ "$disabled" = "1" ] && return
local metric=$2
[ -z "$metric" ] && metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)
multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath)
[ "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off")
[ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")"
interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname)
[ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
[ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]')
#multipath_current_config=$(multipath $interface_if | grep "deactivated")
interface_current_config=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state || echo "up")
#if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$multipath_current_config" = "" ]; then
if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) route via $OMR_TRACKER_DEVICE_GATEWAY metric $metric"
ip route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric
fi
server_route() {
local serverip multipath_config_route
serverip=$1
[ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')"
config_get disabled $server disabled
[ "$disabled" = "1" ] && return
local metric=$2
[ -z "$metric" ] && metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)
multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath)
[ "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off")
[ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")"
interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname)
[ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
[ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_4" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]')
#multipath_current_config=$(multipath $interface_if | grep "deactivated")
interface_current_config=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state || echo "up")
#if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$multipath_current_config" = "" ]; then
if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) route via $OMR_TRACKER_DEVICE_GATEWAY metric $metric"
ip route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric
fi
}
config_list_foreach $server ip server_route
if [ "$OMR_TRACKER_DEVICE_GATEWAY" != "" ] && [ "$(ip route show dev $OMR_TRACKER_DEVICE metric $metric | grep default | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then
ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE metric $metric
fi
}
set_server_route6() {
local server=$1
server_route() {
local serverip multipath_config_route
serverip=$1
[ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')"
config_get disabled $server disabled
[ "$disabled" = "1" ] && return
local metric=$2
[ -z "$metric" ] && metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)
multipath_config_route=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipath)
[ "$multipath_config_route" ] && multipath_config_route=$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath || echo "off")
[ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" = "1" ] && multipath_config_route="$(uci -q get openmptcprouter.ovpn${OMR_TRACKER_INTERFACE}.multipath || echo "off")"
interface_if=$(uci -q get network.$OMR_TRACKER_INTERFACE.ifname)
[ -z "$interface_if" ] && interface_if=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
[ -z "$interface_if" ] && interface_if=$(ifstatus "${OMR_TRACKER_INTERFACE}_6" 2>/dev/null | jsonfilter -q -e '@["l3_device"]')
interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]')
#multipath_current_config=$(multipath $interface_if | grep "deactivated")
interface_current_config=$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.state || echo "up")
#if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$multipath_current_config" = "" ]; then
if [ "$serverip" != "" ] && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric $metric | grep $serverip | grep $OMR_TRACKER_DEVICE_GATEWAY6)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Set server $server ($serverip) route via $OMR_TRACKER_DEVICE_GATEWAY metric $metric"
ip -6 route replace $serverip via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric $metric
fi
}
config_list_foreach $server ip server_route
if [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(ip -6 route show dev $OMR_TRACKER_DEVICE metric $metric | grep default | grep $OMR_TRACKER_DEVICE_GATEWAY6)" = "" ] && [ "$multipath_config_route" != "off" ] && [ "$interface_current_config" = "up" ] && [ "$interface_up" = "true" ]; then
ip -6 route replace default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE metric $metric
fi
}
del_server_route() {
local server=$1
local serverip
config_get serverip $server ip
[ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')"
[ -n "$serverip" ] && _log "Delete default route via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE"
local metric
metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)
ip route del $serverip dev $OMR_TRACKER_DEVICE metric $metric >/dev/null 2>&1
ip route del $serverip dev $OMR_TRACKER_DEVICE >/dev/null 2>&1
remove_route() {
local serverip="$1"
[ -n "$serverip" ] && serverip="$(resolveip -4 -t 5 $serverip | head -n 1 | tr -d '\n')"
[ -n "$serverip" ] && _log "Delete default route via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE"
local metric
metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)
ip route del $serverip dev $OMR_TRACKER_DEVICE metric $metric >/dev/null 2>&1
ip route del $serverip dev $OMR_TRACKER_DEVICE >/dev/null 2>&1
}
config_list_foreach $server ip remove_route
if [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then
ip route del default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE >/dev/null 2>&1
else
@ -242,6 +489,25 @@ del_server_route() {
fi
}
del_server_route6() {
local server=$1
remove_route() {
local serverip="$1"
[ -n "$serverip" ] && serverip="$(resolveip -6 -t 5 $serverip | head -n 1 | tr -d '\n')"
[ -n "$serverip" ] && _log "Delete default route via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE"
local metric
metric=$(uci -q get network.$OMR_TRACKER_INTERFACE.metric)
ip -6 route del $serverip dev $OMR_TRACKER_DEVICE metric $metric >/dev/null 2>&1
ip -6 route del $serverip dev $OMR_TRACKER_DEVICE >/dev/null 2>&1
}
config_list_foreach $server ip remove_route
if [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ]; then
ip -6 route del default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE >/dev/null 2>&1
else
ip -6 route del default dev $OMR_TRACKER_DEVICE >/dev/null 2>&1
fi
}
disable_pihole() {
local server=$1
if [ -n "$(uci -q get dhcp.@dnsmasq[0].server | grep '#53' | grep '10.2')" ]; then
@ -288,6 +554,7 @@ if [ -d "/sys/class/net/$OMR_TRACKER_DEVICE" ]; then
fi
default_gw=$(ip route show default | grep -v "metric" | awk '/default/ {print $3}')
default_gw6=$(ip -6 route show default | grep -v "metric" | awk '/default/ {print $3}')
#current_interface_gw=$(uci -q get "network.$OMR_TRACKER_INTERFACE.gateway")
interface_up=$(ifstatus "$OMR_TRACKER_INTERFACE" 2>/dev/null | jsonfilter -q -e '@["up"]')
@ -320,6 +587,9 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ "$interface_up" != "true" ]; then
if [ -n "$OMR_TRACKER_DEVICE_IP" ]; then
glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set down > /dev/null 2>&1
fi
if [ -n "$OMR_TRACKER_DEVICE_IP6" ]; then
glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 dev tun0 set down > /dev/null 2>&1
fi
if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" = "1" ]; then
VPN_BASE_INTF="$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.baseintf)"
VPN_BASE_INTF_IP=$(ubus call network.interface.$VPN_BASE_INTF status | jsonfilter -e '@["ipv4-address"][0].address' | tr -d "\n")
@ -331,18 +601,22 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ "$interface_up" != "true" ]; then
fi
config_load openmptcprouter
config_foreach del_server_route server
config_foreach del_server_route6 server
#if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ] && [ "$(uci -q get openmptcprouter.settings.vpn)" != "mlvpn" ]; then
if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ]; then
config_foreach set_server_all_routes server
config_foreach set_server_all_routes6 server
fi
fi
if ([ "$default_gw" = "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ]) && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then
if ([ "$default_gw" = "$OMR_TRACKER_DEVICE_GATEWAY" ] || [ "$default_gw" = "" ] || [ "$default_gw6" != "$OMR_TRACKER_DEVICE_GATEWAY6" ]) && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then
config_load network
config_foreach set_route interface $OMR_TRACKER_INTERFACE
config_foreach set_route6 interface $OMR_TRACKER_INTERFACE
elif [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.multipath)" = "master" ]; then
config_load network
config_foreach set_route interface $OMR_TRACKER_INTERFACE "no"
config_foreach set_route6 interface $OMR_TRACKER_INTERFACE "no"
fi
mail_alert="$(uci -q get omr-tracker.$OMR_TRACKER_INTERFACE.mail_alert)"
[ -z "$mail_alert" ] && mail_alert="$(uci -q get omr-tracker.defaults.mail_alert)"
@ -350,9 +624,9 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ "$interface_up" != "true" ]; then
OMR_SYSNAME="$(uci -q get system.@system[0].hostname)"
if [ "$(uci -q get omr-tracker.defaults.mail_down_subject)" != "" ] && [ "$(uci -q get omr-tracker.defaults.mail_down_message)" != "" ]; then
mail_subject="$(uci -q get omr-tracker.defaults.mail_down_subject)"
mail_subject=`echo $mail_subject | sed -i -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"`
mail_subject=`echo $mail_subject | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"`
mail_message="$(uci -q get omr-tracker.defaults.mail_down_message)"
mail_message=`echo $mail_message | sed -i -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"`
mail_message=`echo $mail_message | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"`
echo -e "Subject: ${mail_subject}\n\n${mail_message}" | sendmail $(uci -q get mail.default.to)
else
echo -e "Subject: $OMR_SYSNAME: $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) is down\n\nConnection failure of $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) detected. The reason is \"$OMR_TRACKER_STATUS_MSG\"." | sendmail $(uci -q get mail.default.to)
@ -370,6 +644,7 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ "$interface_up" != "true" ]; then
if [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then
config_load network
config_foreach set_route interface $OMR_TRACKER_INTERFACE
config_foreach set_route6 interface $OMR_TRACKER_INTERFACE
fi
if [ "$(uci -q get openmptcprouter.settings.shadowsocksudp)" = "1" ] && [ "$(uci -q get shadowsocks-libev.sss0.disabled)" != "1" ] && [ "$(uci -q get openmptcprouter.omr.shadowsocks)" = "up" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.redir_udp)" = "" ] && [ "$(uci -q get shadowsocks-libev.hi2.mode)" = "tcp_and_udp" ] && [ "$(uci -q get shadowsocks-libev.sss0.obfs)" != "1" ]; then
_log "Tunnel down use ShadowSocks for UDP"
@ -400,6 +675,7 @@ if [ "$OMR_TRACKER_STATUS" = "ERROR" ] || [ "$interface_up" != "true" ]; then
#if [ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ] || [ "$(uci -q get openmptcprouter.settings.vpn)" = "mlvpn" ]; then
if [ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ]; then
config_foreach set_server_default_route server
config_foreach set_server_default_route6 server
fi
fi
dns_flush
@ -447,7 +723,7 @@ if [ "$OMR_TRACKER_INTERFACE" = "glorytun" ] || [ "$OMR_TRACKER_INTERFACE" = "om
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu
ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s")
elif [ -z "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.mtu)" ]; then
elif [ -z "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.mtu)" ] && [ -n "$OMR_TRACKER_DEVICE_IP" ]; then
if [ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ]; then
local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip)
#local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 8.8.8.8)
@ -490,9 +766,9 @@ if [ "$OMR_TRACKER_PREV_STATUS" != "" ] && [ "$OMR_TRACKER_PREV_STATUS" != "$OMR
OMR_SYSNAME="$(uci -q get system.@system[0].hostname)"
if [ "$(uci -q get omr-tracker.defaults.mail_up_subject)" != "" ] && [ "$(uci -q get omr-tracker.defaults.mail_up_message)" != "" ]; then
mail_subject="$(uci -q get omr-tracker.defaults.mail_up_subject)"
mail_subject=`echo $mail_subject | sed -i -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"`
mail_subject=`echo $mail_subject | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"`
mail_message="$(uci -q get omr-tracker.defaults.mail_up_message)"
mail_message=`echo $mail_message | sed -i -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"`
mail_message=`echo $mail_message | sed -e "s/%SYSNAME%/$OMR_SYSNAME/g" -e "s/%INTERFACE%/$OMR_TRACKER_INTERFACE/g" -e "s/%DEVICE%/$OMR_TRACKER_DEVICE/g" -e "s/%MESSAGE%/$OMR_TRACKER_STATUS_MSG/g"`
echo -e "Subject: ${mail_subject}\n\n${mail_message}" | sendmail $(uci -q get mail.default.to)
else
echo -e "Subject: $OMR_SYSNAME: $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) is up\n\nDetected that connection $OMR_TRACKER_INTERFACE ($OMR_TRACKER_DEVICE) is up again." | sendmail $(uci -q get mail.default.to)
@ -525,6 +801,20 @@ if [ "$multipath_config" = "master" ]; then
config_foreach set_server_default_route server
fi
fi
if ([ "$default_gw6" != "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$default_gw6" = "" ]) && [ "$OMR_TRACKER_DEVICE_GATEWAY6" != "" ] && [ "$(uci -q get openmptcprouter.settings.master)" != "balancing" ]; then
omrvpn_intf=$(uci -q get "network.omrvpn.ifname" || echo "tun")
if [ -n "$omrvpn_intf" ] && [ "$(ip route show default | awk '/default/ {print $5}' | grep $omrvpn_intf)" = "" ] && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then
_log "Master up : Replace default route by $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE"
ip -6 route replace default scope global nexthop via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE
fi
config_load openmptcprouter
#if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ]; then
# config_foreach set_server_all_routes server
if [ "$(uci -q get openmptcprouter.settings.master)" != "failover" ]; then
config_foreach set_server_default_route server
config_foreach set_server_default_route6 server
fi
fi
#if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ] && [ "$(ip route show default | grep weight)" = "" ] && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ] && [ "$(uci -q get openmptcprouter.settings.vpn)" != "mlvpn" ]; then
if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ] && [ "$(ip route show default | grep weight)" = "" ] && [ "$(uci -q get openmptcprouter.settings.defaultgw)" != "0" ]; then
omrvpn_intf=$(uci -q get "network.omrvpn.ifname" || echo "tun")
@ -532,25 +822,42 @@ if [ "$multipath_config" = "master" ]; then
routesbalancing=""
routesbalancingbackup=""
nbintf=0
nbintf6=0
config_load network
config_foreach set_route_balancing interface
config_foreach set_route_balancing6 interface
[ -n "$routesbalancing" ] && {
([ "$nbintf" -gt "1" ] && [ "$(ip r show default metric 0 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancing " ]) || ([ "$nbintf" = "1" ] && [ "$(ip r show default metric 0 | grep $OMR_TRACKER_DEVICE)" = "" ]) && {
([ "$nbintf" -gt "1" ] && [ "$(ip r show default metric 0 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancing " ]) || ([ "$nbintf" = "1" ] && [ "$(ip r show default metric 0 | grep $OMR_TRACKER_DEVICE)" = "" ] && [ -n "$OMR_TRACKER_DEVICE_IP" ]) && {
_log "Set ip route replace default scope global $routesbalancing"
ip route replace default scope global $routesbalancing
ip route replace default scope global metric 0 $routesbalancing
}
}
[ -n "$routesbalancing6" ] && {
([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show default metric 1 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancing6 " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show default metric 1 | grep $OMR_TRACKER_DEVICE)" = "" ] && [ -n "$OMR_TRACKER_DEVICE_IP6" ]) && {
_log "Set ip -6 route replace default scope global metric 1 $routesbalancing6"
ip -6 route replace default scope global metric 1 $routesbalancing6
}
}
[ -n "$routesbalancingbackup" ] && {
([ "$nbintf" -gt "1" ] && [ "$(ip r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancingbackup " ]) || ([ "$nbintf" = "1" ] && [ "$(ip r show default metric 999 | grep $OMR_TRACKER_DEVICE)" = "" ]) && {
([ "$nbintf" -gt "1" ] && [ "$(ip r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancingbackup " ]) || ([ "$nbintf" = "1" ] && [ "$(ip r show default metric 999 | grep $OMR_TRACKER_DEVICE)" = "" ] && [ -n "$OMR_TRACKER_DEVICE_IP" ]) && {
_log "Set backup ip route replace default scope global $routesbalancingbackup"
ip route replace default scope global metric 999 $routesbalancingbackup
}
}
[ -n "$routesbalancingbackup6" ] && {
([ "$nbintf6" -gt "1" ] && [ "$(ip -6 r show default metric 999 | tr -d '\t' | tr -d '\n')" != "default via $routesbalancingbackup6 " ]) || ([ "$nbintf6" = "1" ] && [ "$(ip -6 r show default metric 999 | grep $OMR_TRACKER_DEVICE)" = "" ] && [ -n "$OMR_TRACKER_DEVICE_IP6" ]) && {
_log "Set backup ip -6 route replace default scope global $routesbalancingbackup6"
ip -6 route replace default scope global metric 999 $routesbalancingbackup6
}
}
fi
fi
if [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(ip r show table 991337)" != "default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE " ]; then
ip route replace default via $OMR_TRACKER_DEVICE_GATEWAY dev $OMR_TRACKER_DEVICE table 991337
fi
if [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ] && [ -n "$OMR_TRACKER_DEVICE" ] && [ "$(ip -6 r show table 991337)" != "default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE " ]; then
ip -6 route replace default via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE table 991337
fi
if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(date +"%s") + $((10 + RANDOM % 31)) - $(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc))) -gt 3600 ] || [ "$(uci -q show openmptcprouter | grep get_config=\'1\')" != "" ] || [ "$(uci -q show openmptcprouter | grep admin_error=\'1\')" != "" ]; then
/etc/init.d/openmptcprouter-vps restart >/dev/null 2>&1
fi
@ -566,6 +873,15 @@ if [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then
config_foreach set_server_route server
fi
fi
if [ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ]; then
config_load openmptcprouter
#if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ] && [ "$(uci -q get openmptcprouter.settings.vpn)" != "mlvpn" ]; then
if [ "$(uci -q get openmptcprouter.settings.master)" = "balancing" ]; then
config_foreach set_server_all_routes6 server
elif [ "$(uci -q get openmptcprouter.settings.master)" != "failover" ]; then
config_foreach set_server_route6 server
fi
fi
if [ "$multipath_config" = "on" ] || [ "$multipath_config" = "backup" ]; then
download="$(uci -q get network.$OMR_TRACKER_INTERFACE.downloadspeed)"
@ -577,25 +893,43 @@ if [ "$multipath_config" = "on" ] || [ "$multipath_config" = "backup" ]; then
fi
gtudpst="up"
[ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" != "1" ] && [ "$multipath_config" = "backup" ] && [ "$(pgrep glorytun-udp)" != "" ] && gtudpst="backup"
if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep glorytun-udp)" != "" ] && [ "$(glorytun-udp path | grep $OMR_TRACKER_DEVICE_IP)" = "" ]; then
if [ "$OMR_TRACKER_DEVICE_IP" != "" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep glorytun-udp)" != "" ] && [ "$(glorytun-udp path | grep $OMR_TRACKER_DEVICE_IP)" = "" ]; then
if [ "$download" != "0" ] && [ "$download" != "" ] && [ "$upload" != "0" ] && [ "$upload" != "" ]; then
if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then
glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set up rate pref 1 auto tx $((upload*1000/8)) rx $((download*1000/8)) > /dev/null 2>&1
glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set up rate auto tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1
else
glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set up rate pref 1 fixed tx $((upload*1000/8)) rx $((download*1000/8)) > /dev/null 2>&1
glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set up rate fixed tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1
fi
else
if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then
glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set up pref 1 rate auto tx 12500000 rx 12500000 > /dev/null 2>&1
glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set up rate auto tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1
else
glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set up pref 1 rate fixed tx 12500000 rx 12500000 > /dev/null 2>&1
glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set up rate fixed tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1
fi
fi
fi
if [ "$OMR_TRACKER_DEVICE_IP6" != "" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep glorytun-udp)" != "" ] && [ "$(glorytun-udp path | grep $OMR_TRACKER_DEVICE_IP6)" = "" ]; then
if [ "$download" != "0" ] && [ "$download" != "" ] && [ "$upload" != "0" ] && [ "$upload" != "" ]; then
if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then
glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 dev tun0 set up rate auto tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1
else
glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 dev tun0 set up rate fixed tx $((upload*1000/8)) rx $((download*1000/8)) pref 1 > /dev/null 2>&1
fi
else
if [ "$(uci -q get glorytun-udp.vpn.rateauto)" = "1" ]; then
glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 dev tun0 set up rate auto tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1
else
glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 dev tun0 set up rate fixed tx 12500000 rx 12500000 pref 1 > /dev/null 2>&1
fi
fi
fi
# if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ] && [ "$(pgrep glorytun-udp)" != "" ] && [ "$(glorytun-udp set | grep 'kxtimeout 7d')" = "" ]; then
# glorytun-udp set dev tun0 kxtimeout 7d > /dev/null 2>&1
# fi
[ "$multipath_config" = "backup" ] && [ "$(pgrep glorytun-udp)" != "" ] && glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set pref 125 > /dev/null 2>&1
[ "$multipath_config" = "backup" ] && [ "$(pgrep glorytun-udp)" != "" ] && {
[ -n "$OMR_TRACKER_DEVICE_IP" ] && glorytun-udp path addr $OMR_TRACKER_DEVICE_IP dev tun0 set pref 125 > /dev/null 2>&1
[ -n "$OMR_TRACKER_DEVICE_IP6" ] && glorytun-udp path addr $OMR_TRACKER_DEVICE_IP6 dev tun0 set pref 125 > /dev/null 2>&1
}
fi
[ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.multipathvpn)" != "1" ] && {
[ "$multipath_status" = "$multipath_config" ] || {
@ -612,6 +946,7 @@ if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(
[ "$(uci -q get openmptcprouter.settings.debug)" = "true" ] && _log "Get status and settings for $OMR_TRACKER_INTERFACE..."
if [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ] && [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.vpn)" != "1" ]; then
local ipaddr="$(omr-ip-intf $OMR_TRACKER_DEVICE)"
local ip6addr="$(omr-ip6-intf $OMR_TRACKER_DEVICE)"
else
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s")
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state="up"
@ -641,10 +976,10 @@ if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(
# fi
#fi
if [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ]; then
local asn="$(wget -4 -qO- -T 4 http://api.iptoasn.com/v1/as/ip/$ipaddr | jsonfilter -q -e '@.as_description')"
[ -z "$asn" ] && {
asn="$(whois $ipaddr 2>/dev/null | grep -m 1 -i 'netname' | awk '{print $2}')"
}
#local asn="$(wget -4 -qO- -T 4 http://api.iptoasn.com/v1/as/ip/$ipaddr | jsonfilter -q -e '@.as_description')"
#[ -z "$asn" ] && {
local asn="$(whois $ipaddr 2>/dev/null | grep -m 1 -i 'netname' | awk '{print $2}')"
#}
fi
[ -z "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE)" ] && {
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE=interface
@ -658,39 +993,107 @@ if [ "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE.lc)" = "" ] || [ $(($(
uci -q set openmptcprouter.latest_versions.lc=$(date +"%s")
}
fi
local serverip=$(uci -q get shadowsocks-libev.sss0.server)
[ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && [ "$(pgrep tracebox)" = "" ] && [ "$(uci -q get openmptcprouter.settings.tracebox)" != "0" ] && {
omrtracebox="$(omr-tracebox-mptcp $serverip $OMR_TRACKER_DEVICE)"
[ -n "$omrtracebox" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$omrtracebox"
}
[ -n "$ipaddr" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.publicip="$ipaddr"
[ -n "$OMR_TRACKER_LATENCY" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency="$OMR_TRACKER_LATENCY"
[ -n "$asn" ] && {
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.asn="$asn"
}
if [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$(uci -q get glorytun.vpn.enable)" != "1" ] && [ "$(uci -q get glorytun-udp.vpn.enable)" != "1" ]; then
if [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu)" ]; then
mtu=$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu)
[ -n "$mtu" ] && {
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu
ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1
local omrtracebox
traceboxmtutest() {
omr_tracebox_mtu() {
local serverip=$1
[ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && [ "$(pgrep tracebox)" = "" ] && [ "$(uci -q get openmptcprouter.settings.tracebox)" != "0" ] && {
omrtracebox="$(omr-tracebox-mptcp $serverip $OMR_TRACKER_DEVICE)"
[ -n "$omrtracebox" ] && [ -z "$(echo $omrtracebox | grep error)" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$omrtracebox"
}
else
[ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && {
local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip)
[ -n "$mtu" ] && {
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu
ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1
}
} || {
local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 1.1.1.1)
[ -n "$mtu" ] && {
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu
ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1
}
}
fi
if [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$(uci -q get glorytun.vpn.enable)" != "1" ] && [ "$(uci -q get glorytun-udp.vpn.enable)" != "1" ]; then
if [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu)" ]; then
mtu=$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu)
[ -n "$mtu" ] && {
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu
ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1
}
elif [ -n "$OMR_TRACKER_DEVICE_IP" ]; then
[ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && {
local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip)
[ -n "$mtu" ] && {
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu
ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1
}
} || {
local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 1.1.1.1)
[ -n "$mtu" ] && {
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu
ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1
}
}
fi
fi
}
config_list_foreach $1 ip omr_tracebox_mtu
}
config_load openmptcprouter
config_foreach traceboxmtutest server
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state='up'
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s")
}
[ -n "$ip6addr" ] && {
if [ "$(uci -q get openmptcprouter.settings.external_check)" != "0" ]; then
local asn="$(whois $ip6addr 2>/dev/null | grep -m 1 -i 'netname' | awk '{print $2}')"
fi
[ -z "$(uci -q get openmptcprouter.$OMR_TRACKER_INTERFACE)" ] && {
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE=interface
}
if [ "$(uci -q get openmptcprouter.latest_versions.lc)" = "" ] || [ $(($(date +"%s") - $(uci -q get openmptcprouter.latest_versions.lc))) -gt 3600 ]; then
local latestversions="$(curl -6 -s -m 3 https://www.openmptcprouter.com/version/version.json)"
[ -n "$latestversions" ] && {
uci -q set openmptcprouter.latest_versions=latest_versions
uci -q set openmptcprouter.latest_versions.omr=$(echo $latestversions | jsonfilter -q -e '@.omr')
uci -q set openmptcprouter.latest_versions.vps=$(echo $latestversions | jsonfilter -q -e '@.vps')
uci -q set openmptcprouter.latest_versions.lc=$(date +"%s")
}
fi
[ -n "$ipaddr" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.publicip6="$ip6addr"
[ -n "$OMR_TRACKER_LATENCY" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.latency="$OMR_TRACKER_LATENCY"
[ -n "$asn" ] && {
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.asn="$asn"
}
local omrtracebox
traceboxmtutest() {
omr_tracebox_mtu() {
local serverip=$1
[ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && [ "$(pgrep tracebox)" = "" ] && [ "$(uci -q get openmptcprouter.settings.tracebox)" != "0" ] && {
omrtracebox="$(omr-tracebox-mptcp $serverip $OMR_TRACKER_DEVICE)"
[ -n "$omrtracebox" ] && [ -z "$(echo $omrtracebox | grep error)" ] && uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mptcp_status="$omrtracebox"
}
if [ "$OMR_TRACKER_INTERFACE" != "omrvpn" ] && [ "$(uci -q get glorytun.vpn.enable)" != "1" ] && [ "$(uci -q get glorytun-udp.vpn.enable)" != "1" ]; then
if [ -n "$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu)" ]; then
mtu=$(uci -q get network.$OMR_TRACKER_INTERFACE.mtu)
[ -n "$mtu" ] && {
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu
ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1
}
elif [ -n "$OMR_TRACKER_DEVICE_IP" ]; then
[ -n "$serverip" ] && [ "$serverip" != "127.0.0.1" ] && {
local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP $serverip)
[ -n "$mtu" ] && {
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu
ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1
}
} || {
local mtu=$(omr-mtu $OMR_TRACKER_DEVICE_IP 1.1.1.1)
[ -n "$mtu" ] && {
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.mtu=$mtu
ip link set dev $OMR_TRACKER_DEVICE mtu $mtu > /dev/null 2>&1
}
}
fi
fi
}
config_list_foreach $1 ip omr_tracebox_mtu
}
config_load openmptcprouter
config_foreach traceboxmtutest server
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.state='up'
uci -q set openmptcprouter.$OMR_TRACKER_INTERFACE.lc=$(date +"%s")
}

View file

@ -8,10 +8,10 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=mptcpd
PKG_VERSION:=0.4
PKG_VERSION:=0.5.1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_SOURCE_URL:=https://github.com/intel/mptcpd/releases/download/v$(PKG_VERSION)
PKG_HASH:=459c45ba86ea574f1ad7a062a9914474ca650229b97375017bd46d0732f985ba
PKG_HASH:=0ee4418880f20a1a2eff5c54c26185a75092cb44cbabe0fa3f25a2c5886459e7
PKG_RELEASE:=1
PKG_MAINTAINER:=Ycarus (Yannick Chabanois) <ycarus@zugaina.org>

View file

@ -5,6 +5,7 @@
[ -n "$1" ] || exit
. /lib/functions.sh
. /usr/lib/unbound/iptools.sh
# retrieve args
OMR_TRACKER_INTERFACE="$1"
@ -13,16 +14,20 @@ shift
# export vars
export OMR_TRACKER_INTERFACE
export OMR_TRACKER_HOST
export OMR_TRACKER_HOST6
export OMR_TRACKER_TIMEOUT
export OMR_TRACKER_STATUS
export OMR_TRACKER_STATUS_MSG
export OMR_TRACKER_PREV_STATUS
export OMR_TRACKER_DEVICE
export OMR_TRACKER_DEVICE_IP
export OMR_TRACKER_DEVICE_IP6
export OMR_TRACKER_DEVICE_GATEWAY
export OMR_TRACKER_DEVICE_GATEWAY6
dscp=56 # set DSCP CS7 (56) in outgoing packets
initial_hosts="$OMR_TRACKER_HOSTS"
initial_hosts6="$OMR_TRACKER_HOSTS6"
initial_timeout="$OMR_TRACKER_TIMEOUT"
wait_test=${OMR_TRACKER_WAIT_TEST:-0}
@ -59,10 +64,15 @@ _update_rto() {
_restart() {
OMR_TRACKER_HOST="${OMR_TRACKER_HOSTS%% *}"
OMR_TRACKER_HOST6="${OMR_TRACKER_HOSTS6%% *}"
[ "$OMR_TRACKER_HOST" = "$OMR_TRACKER_HOSTS" ] || {
OMR_TRACKER_HOSTS="${OMR_TRACKER_HOSTS#* } $OMR_TRACKER_HOST"
_init_rto
}
[ "$OMR_TRACKER_HOST6" = "$OMR_TRACKER_HOSTS6" ] || {
OMR_TRACKER_HOSTS6="${OMR_TRACKER_HOSTS6#* } $OMR_TRACKER_HOST6"
_init_rto
}
}
_post_tracking() {
@ -170,12 +180,14 @@ OMR_TRACKER_PREV_STATUS=""
while true; do
# setup tracker variables
OMR_TRACKER_DEVICE_IP=
OMR_TRACKER_DEVICE_IP6=
OMR_TRACKER_STATUS="ERROR"
OMR_TRACKER_STATUS_MSG=""
OMR_TRACKER_LATENCY=
#OMR_TRACKER_TIMEOUT=$((rto / 1000 + (rto % 1000 ? 1 : 0)))
OMR_TRACKER_LIST_HOSTS=""
OMR_TRACKER_DEVICE_GATEWAY=
OMR_TRACKER_DEVICE_GATEWAY6=
serverip_ping=false
if [ -d "/sys/class/net/$OMR_TRACKER_DEVICE" ]; then
@ -185,6 +197,10 @@ while true; do
if [ -z "$OMR_TRACKER_DEVICE_IP" ]; then
OMR_TRACKER_DEVICE_IP=$(ip -4 addr show dev "$OMR_TRACKER_DEVICE" | grep -m 1 inet | awk '{print $2}' | cut -d'/' -s -f1)
fi
#OMR_TRACKER_DEVICE_IP6=$(ip -6 -br addr ls dev "$OMR_TRACKER_DEVICE" | awk -F'[ /]+' '{print $3}')
#if [ -z "$OMR_TRACKER_DEVICE_IP6" ]; then
OMR_TRACKER_DEVICE_IP6=$(ip -6 addr show dev "$OMR_TRACKER_DEVICE" | grep -v 'inet6 f' | grep -m 1 inet | awk '{print $2}' | cut -d'/' -s -f1)
#fi
#OMR_TRACKER_DEVICE_IP=$(ubus call network.interface.$OMR_TRACKER_INTERFACE status | jsonfilter -e '@["ipv4-address"][0].address' | tr -d "\n")
#if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ]; then
# OMR_TRACKER_DEVICE_GATEWAY=$(ip -4 r list dev "$OMR_TRACKER_DEVICE" | grep -v default | awk '/proto static/ {print $1}' | tr -d "\n")
@ -219,6 +235,15 @@ while true; do
if [ -z "$OMR_TRACKER_DEVICE_GATEWAY" ]; then
OMR_TRACKER_DEVICE_GATEWAY=$(ip -4 r list dev "$OMR_TRACKER_DEVICE" | grep kernel | awk '/proto kernel/ {print $1}' | tr -d "\n")
fi
if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ]; then
OMR_TRACKER_DEVICE_GATEWAY6=$(uci -q get "network.$OMR_TRACKER_INTERFACE.ip6gw")
fi
if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY6" = "::" ]; then
OMR_TRACKER_DEVICE_GATEWAY6=$(ubus call network.interface.${OMR_TRACKER_INTERFACE} status 2>/dev/null | jsonfilter -q -l 1 -e "@.inactive.route[@.source=\"${OMR_TRACKER_DEVICE_IP6}\"].nexthop" | tr -d "\n")
fi
if [ -z "$OMR_TRACKER_DEVICE_GATEWAY6" ] || [ "$OMR_TRACKER_DEVICE_GATEWAY6" = "::" ]; then
OMR_TRACKER_DEVICE_GATEWAY6=$(ubus call network.interface.$OMR_TRACKER_INTERFACE status | jsonfilter -q -l 1 -e '@.route[@.target="::"].nexthop' | tr -d "\n")
fi
# execute specific tracker
if [ -n "$OMR_TRACKER_DEVICE_IP" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY" ]; then
@ -304,6 +329,89 @@ while true; do
sleep "$OMR_TRACKER_INTERVAL_TRIES"
done
fi
if [ -n "$OMR_TRACKER_DEVICE_IP6" ] && [ -n "$OMR_TRACKER_DEVICE_GATEWAY6" ]; then
# setup loop variable
tries="$OMR_TRACKER_TRIES"
# loop until tries attempts have been reached
while [ "$tries" -gt 0 ]; do
#if [ -n "$OMR_TRACKER_DEVICE_ROUTE" ]; then
# _ping "$OMR_TRACKER_DEVICE_ROUTE" "$OMR_TRACKER_DEVICE" "no"
# status=$?
#else
_ping "$OMR_TRACKER_DEVICE_GATEWAY6" "$OMR_TRACKER_DEVICE" "no"
status=$?
#fi
if $(exit $status) && [ "$OMR_TRACKER_TYPE" = "none" ]; then
OMR_TRACKER_STATUS_MSG=""
OMR_TRACKER_STATUS="OK"
break
elif [ "$OMR_TRACKER_TYPE" != "none" ]; then
if ! $(exit $status); then
OMR_TRACKER_STATUS_MSG="gateway6 down"
fi
serverip_ping=false
if [ "$OMR_TRACKER_TYPE" = "ping" ]; then
config_load openmptcprouter
config_foreach _ping_server server $OMR_TRACKER_DEVICE
fi
if [ "$serverip_ping" = false ] && [ -n "$OMR_TRACKER_HOST6" ]; then
OMR_TRACKER_HOST6=$(resolveip -6 -t 5 $OMR_TRACKER_HOST6 | head -n 1 | tr -d "\n")
if [ -n "$OMR_TRACKER_HOST6" ]; then
if [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "3g" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "qmi" ] || [ "$(uci -q get network.$OMR_TRACKER_INTERFACE.proto)" = "ncm" ]; then
# Check if route is not used
while ! ip -6 route add $OMR_TRACKER_HOST6 via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE src $OMR_TRACKER_DEVICE_IP6 > /dev/null 2>&1
do
logger -t "omr-tracker" "Can't create route to $OMR_TRACKER_HOST6 via $OMR_TRACKER_DEVICE_GATEWAY6 dev $OMR_TRACKER_DEVICE src $OMR_TRACKER_DEVICE_IP6. waiting..."
sleep 2
ip -6 route del "$OMR_TRACKER_HOST6" via "$OMR_TRACKER_DEVICE_GATEWAY6" dev "$OMR_TRACKER_DEVICE" src "$OMR_TRACKER_DEVICE_IP6" > /dev/null 2>&1
_restart
done
fi
if [ "$OMR_TRACKER_TYPE" = "ping" ]; then
_ping "$OMR_TRACKER_HOST6" "$OMR_TRACKER_DEVICE" "yes"
statusb=$?
elif [ "$OMR_TRACKER_TYPE" = "httping" ]; then
_httping "$OMR_TRACKER_HOST6" "$OMR_TRACKER_DEVICE_IP" "yes"
statusb=$?
elif [ "$OMR_TRACKER_TYPE" = "dns" ]; then
_dns "$OMR_TRACKER_HOST6" "$OMR_TRACKER_DEVICE_IP" "yes"
statusb=$?
fi
ip route del "$OMR_TRACKER_HOST6" via "$OMR_TRACKER_DEVICE_GATEWAY6" dev "$OMR_TRACKER_DEVICE" src "$OMR_TRACKER_DEVICE_IP6" > /dev/null 2>&1
if $(exit $statusb); then
OMR_TRACKER_STATUS_MSG=""
OMR_TRACKER_STATUS="OK"
break
else
if [ "$OMR_TRACKER_LIST_HOSTS6" = "" ]; then
OMR_TRACKER_LIST_HOSTS="$OMR_TRACKER_HOST6"
else
OMR_TRACKER_LIST_HOSTS6="$OMR_TRACKER_LIST_HOSTS6,$OMR_TRACKER_HOST6"
fi
fi
else
OMR_TRACKER_STATUS_MSG=""
OMR_TRACKER_STATUS="OK"
break
fi
else
OMR_TRACKER_STATUS_MSG=""
OMR_TRACKER_STATUS="OK"
break
fi
elif ! $(exit $status); then
OMR_TRACKER_STATUS_MSG="gateway down"
fi
tries=$((tries - 1))
#_restart
OMR_TRACKER_HOST6="${OMR_TRACKER_HOSTS6%% *}"
[ "$OMR_TRACKER_HOST6" = "$OMR_TRACKER_HOSTS6" ] || {
OMR_TRACKER_HOSTS6="${OMR_TRACKER_HOSTS6#* } $OMR_TRACKER_HOST6"
}
#OMR_TRACKER_TIMEOUT=$((OMR_TRACKER_TIMEOUT * 2))
sleep "$OMR_TRACKER_INTERVAL_TRIES"
done
fi
else
OMR_TRACKER_STATUS_MSG="link down"
fi
@ -316,6 +424,13 @@ while true; do
OMR_TRACKER_STATUS_MSG="$OMR_TRACKER_STATUS_MSG and $OMR_TRACKER_TYPE from $OMR_TRACKER_DEVICE_IP error ($OMR_TRACKER_LIST_HOSTS)"
fi
fi
if [ "$OMR_TRACKER_LIST_HOSTS6" != "" ]; then
if [ "$OMR_TRACKER_STATUS_MSG" = "" ]; then
OMR_TRACKER_STATUS_MSG="$OMR_TRACKER_TYPE from $OMR_TRACKER_DEVICE_IP error ($OMR_TRACKER_LIST_HOSTS6)"
else
OMR_TRACKER_STATUS_MSG="$OMR_TRACKER_STATUS_MSG and $OMR_TRACKER_TYPE from $OMR_TRACKER_DEVICE_IP error ($OMR_TRACKER_LIST_HOSTS6)"
fi
fi
#[ "$OMR_TRACKER_HOSTS" = "$initial_hosts" ] || [ "$OMR_TRACKER_STATUS" = "OK" ] && _post_tracking
#[ "$OMR_TRACKER_STATUS" = "ERROR" ] && _restart

View file

@ -14,7 +14,7 @@ _ping_server() {
-w "$OMR_TRACKER_TIMEOUT" \
-c 1 \
-q \
"${host}"
"${host}" 2>/dev/null
) && echo "$ret" | grep -sq " 0% packet loss" && {
server_ping=true
}

View file

@ -39,84 +39,103 @@ _check_server() {
_check_master() {
local name=$1
local count=0
config_get master $1 master
config_get ip $1 ip
config_get port $1 port "65500"
config_get disabled $1 disabled
[ "$master" = "1" ] && [ -n "$ip" ] && [ "$disabled" != "1" ] && {
#_ping_server $ip
_check_server $ip $port
[ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss0.server | tr -d '\n')" != "$ip" ] && {
logger -t "OMR-Tracker-Server" "Master server up, set it back"
logger -t "OMR-Tracker-Server" "$(uci -q get shadowsocks-libev.sss0.server | tr -d '\n') - $ip"
uci -q batch <<-EOF >/dev/null
set shadowsocks-libev.sss0.server=$ip
commit shadowsocks-libev
set v2ray.omrout.s_vmess_address=$ip
set v2ray.omrout.s_vless_address=$ip
commit v2ray
set glorytun.vpn.host=$ip
commit glorytun
set dsvpn.vpn.host=$ip
commit dsvpn
set mlvpn.general.host=$ip
commit mlvpn
del openvpn.omr.remote
add_list openvpn.omr.remote=$ip
commit openvpn
EOF
/etc/init.d/openmptcprouter-vps get_openvpn_key $name >/dev/null 2>/dev/null
/etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null
/etc/init.d/v2ray restart >/dev/null 2>/dev/null
/etc/init.d/glorytun restart >/dev/null 2>/dev/null
/etc/init.d/glorytun-udp restart >/dev/null 2>/dev/null
/etc/init.d/mlvpn restart >/dev/null 2>/dev/null
/etc/init.d/openvpn restart >/dev/null 2>/dev/null
/etc/init.d/dsvpn restart >/dev/null 2>/dev/null
set_ip() {
local ip=$1
#_ping_server $ip
_check_server $ip $port
[ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n')" != "$ip" ] && {
logger -t "OMR-Tracker-Server" "Master server up, set it back"
logger -t "OMR-Tracker-Server" "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n') - $ip"
uci -q batch <<-EOF >/dev/null
set shadowsocks-libev.sss${count}.server=$ip
commit shadowsocks-libev
EOF
if [ "$count" -eq "0" ]; then
uci -q batch <<-EOF >/dev/null
set v2ray.omrout.s_vmess_address=$ip
set v2ray.omrout.s_vless_address=$ip
commit v2ray
set glorytun.vpn.host=$ip
commit glorytun
set dsvpn.vpn.host=$ip
commit dsvpn
set mlvpn.general.host=$ip
commit mlvpn
del openvpn.omr.remote
add_list openvpn.omr.remote=$ip
commit openvpn
EOF
/etc/init.d/openmptcprouter-vps get_openvpn_key $name >/dev/null 2>/dev/null
/etc/init.d/v2ray restart >/dev/null 2>/dev/null
/etc/init.d/glorytun restart >/dev/null 2>/dev/null
/etc/init.d/glorytun-udp restart >/dev/null 2>/dev/null
/etc/init.d/mlvpn restart >/dev/null 2>/dev/null
/etc/init.d/openvpn restart >/dev/null 2>/dev/null
/etc/init.d/dsvpn restart >/dev/null 2>/dev/null
fi
/etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null
}
count=$((count+1))
}
config_list_foreach $1 ip set_ip
break
}
}
_check_backup() {
local name=$1
local count=0
config_get backup $1 backup
config_get ip $1 ip
config_get port $1 port
config_get disabled $1 disabled
[ "$backup" = "1" ] && [ -n "$ip" ] && [ "$disabled" != "1" ] && {
#_ping_server $ip
_check_server $ip $port
[ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss0.server | tr -d '\n')" = "$ip" ] && break
[ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss0.server | tr -d '\n')" != "$ip" ] && {
logger -t "OMR-Tracker-Server" "Use backup server $1 ($ip)"
uci -q batch <<-EOF >/dev/null
set shadowsocks-libev.sss0.server=$ip
commit shadowsocks-libev
set v2ray.omrout.s_vmess_address=$ip
set v2ray.omrout.s_vless_address=$ip
commit v2ray
set glorytun.vpn.host=$ip
commit glorytun
set dsvpn.vpn.host=$ip
commit dsvpn
set mlvpn.general.host=$ip
commit mlvpn
del openvpn.omr.remote
add_list openvpn.omr.remote=$ip
commit openvpn
EOF
/etc/init.d/openmptcprouter-vps get_openvpn_key $name >/dev/null 2>/dev/null
/etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null
/etc/init.d/v2ray restart >/dev/null 2>/dev/null
/etc/init.d/glorytun restart >/dev/null 2>/dev/null
/etc/init.d/glorytun-udp restart >/dev/null 2>/dev/null
/etc/init.d/mlvpn restart >/dev/null 2>/dev/null
/etc/init.d/openvpn restart >/dev/null 2>/dev/null
/etc/init.d/dsvpn restart >/dev/null 2>/dev/null
sleep $waittest
break
set_ip() {
#_ping_server $ip
_check_server $ip $port
[ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n')" = "$ip" ] && break
[ "$server_ping" = true ] && [ "$(uci -q get shadowsocks-libev.sss${count}.server | tr -d '\n')" != "$ip" ] && {
logger -t "OMR-Tracker-Server" "Use backup server $1 ($ip)"
uci -q batch <<-EOF >/dev/null
set shadowsocks-libev.sss${count}.server=$ip
commit shadowsocks-libev
EOF
if [ "$count" -eq "0" ]; then
uci -q batch <<-EOF >/dev/null
set v2ray.omrout.s_vmess_address=$ip
set v2ray.omrout.s_vless_address=$ip
commit v2ray
set glorytun.vpn.host=$ip
commit glorytun
set dsvpn.vpn.host=$ip
commit dsvpn
set mlvpn.general.host=$ip
commit mlvpn
del openvpn.omr.remote
add_list openvpn.omr.remote=$ip
commit openvpn
EOF
/etc/init.d/openmptcprouter-vps get_openvpn_key $name >/dev/null 2>/dev/null
/etc/init.d/v2ray restart >/dev/null 2>/dev/null
/etc/init.d/glorytun restart >/dev/null 2>/dev/null
/etc/init.d/glorytun-udp restart >/dev/null 2>/dev/null
/etc/init.d/mlvpn restart >/dev/null 2>/dev/null
/etc/init.d/openvpn restart >/dev/null 2>/dev/null
/etc/init.d/dsvpn restart >/dev/null 2>/dev/null
fi
/etc/init.d/shadowsocks-libev restart >/dev/null 2>/dev/null
sleep $waittest
break
}
count=$((count+1))
}
config_list_foreach $1 ip set_ip
}
}

View file

@ -49,6 +49,7 @@ retry=${OMR_TRACKER_TRIES:-4}
proxy=${OMR_TRACKER_PROXY:-127.0.0.1:1111}
hosts=${OMR_TRACKER_HOSTS:-1.1.1.1 1.0.0.1}
wait_test=${OMR_TRACKER_WAIT_TEST:-0}
server=${OMR_TRACKER_SERVER:-sss0}
nodns=0
@ -65,9 +66,9 @@ while true; do
}
if [ "$(curl -s -I -w %{http_code} --socks5 ${proxy} --max-time ${timeout} $host -o /dev/null)" != "000" ]; then
nocontact=""
[ "${last}" -ge "${retry}" ] || [ "$(uci -q get openmptcprouter.omr.shadowsocks)" = "" ] && {
[ "${last}" -ge "${retry}" ] || [ "$(uci -q get openmptcprouter.omr.ss_${server})" = "" ] && {
_log "Shadowsocks is up (can contact via http ${host})"
uci -q set openmptcprouter.omr.shadowsocks="up"
uci -q set openmptcprouter.omr.ss_${server}="up"
uci -q commit openmptcprouter.omr
}
if [ -z "$(iptables -t nat -L -n | grep ss_rules)" ] && [ "$(uci -q get shadowsocks-libev.ss_rules.disabled)" != "1" ]; then
@ -83,15 +84,15 @@ while true; do
[ "${last}" -ge "${retry}" ] && {
if [ -n "$(iptables -t nat -L -n | grep ssr)" ]; then
_log "Shadowsocks is down (can't contact via http ${nocontact})"
uci -q set openmptcprouter.omr.shadowsocks="down"
uci -q set openmptcprouter.omr.ss_${server}="down"
uci -q commit openmptcprouter.omr
/etc/init.d/shadowsocks-libev rules_down 2> /dev/null
[ "$(uci show openmptcprouter.omr | grep ss | grep up)" = "" ] && /etc/init.d/shadowsocks-libev rules_down 2> /dev/null
_get_ip
server_ping=false
server="$(uci -q get shadowsocks-libev.sss0.server)"
_ping_server $server
serverip="$(uci -q get shadowsocks-libev.${server}.server)"
_ping_server $serverip
if [ "$server_ping" = false ]; then
_log "Server ($server) seems down, no answer to ping"
_log "Server $server ($serverip) seems down, no answer to ping"
fi
sleep $wait_test
fi

View file

@ -11,12 +11,15 @@
USE_PROCD=1
}
. /usr/lib/unbound/iptools.sh
_validate_section() {
local tmp_hosts=$hosts tmp_timeout=$timeout tmp_tries=$tries
local tmp_hosts=$hosts tmp_hosts6=$hosts6 tmp_timeout=$timeout tmp_tries=$tries
local tmp_interval=$interval tmp_interval_tries=$interval_tries tmp_options=$options tmp_type=$type tmp_enabled=$enabled tmp_wait_test=$wait_test
uci_validate_section omr-tracker "$1" "$2" \
'hosts:list(host)' \
'hosts6:list(host6)' \
'timeout:uinteger' \
'tries:uinteger' \
'interval:uinteger' \
@ -27,6 +30,7 @@ _validate_section() {
'options:string'
[ -z "$hosts" ] && hosts=$tmp_hosts
[ -z "$hosts6" ] && hosts6=$tmp_hosts6
[ -z "$timeout" ] && timeout=$tmp_timeout
[ -z "$tries" ] && tries=$tmp_tries
[ -z "$interval" ] && interval=$tmp_interval
@ -42,7 +46,7 @@ _launch_tracker() {
loopback|lan*|if0*) return;;
esac
local hosts timeout tries interval interval_tries options type enabled wait_test
local hosts hosts6 timeout tries interval interval_tries options type enabled wait_test
_validate_section "defaults" "defaults"
_validate_section "interface" "$1"
@ -65,6 +69,7 @@ _launch_tracker() {
# shellcheck disable=SC2086
procd_set_param command /bin/omr-tracker "$1" $options
procd_append_param env "OMR_TRACKER_HOSTS=$hosts"
procd_append_param env "OMR_TRACKER_HOSTS6=$hosts6"
procd_append_param env "OMR_TRACKER_TIMEOUT=$timeout"
procd_append_param env "OMR_TRACKER_TRIES=$tries"
procd_append_param env "OMR_TRACKER_INTERVAL=$interval"
@ -127,48 +132,45 @@ _launch_gre_tracker() {
_initialize_shadowsocks_tracker() {
local redir_tcp server tracker_server
config_get redir_tcp ss_rules redir_tcp
config_get tracker_server "tracker" server
if [ "$redir_tcp" != "all" ]; then
config_get server $redir_tcp server
elif [ "$tracker_server" != "" ]; then
server=$tracker_server
else
server="sss0"
fi
server=$1
[ -n "$(echo $server | grep sss)" ] || return
#redir_tcp=$(uci -q get shadowsocks-libev.ss_rules.redir_tcp)
#config_get tracker_server ss_rules server
config_get ss_disabled $server disabled 0
[ -z "$tracker_server" ] && {
[ -z "$(uci -q get shadowsocks-libev.tracker_${server})" ] && [ "$ss_disabled" != "1" ] && {
logger -t "omr-tracker" "Create ShadowSock tracker ss_local..."
uci -q batch <<-EOF >/dev/null
set shadowsocks-libev.tracker=ss_local
set shadowsocks-libev.tracker.server=$server
set shadowsocks-libev.tracker.local_address="127.0.0.1"
set shadowsocks-libev.tracker.local_port=1111
set shadowsocks-libev.tracker.mode=tcp_and_udp
set shadowsocks-libev.tracker.timeout=600
set shadowsocks-libev.tracker.fast_open=1
set shadowsocks-libev.tracker.syslog=0
set shadowsocks-libev.tracker.reuse_port=1
set shadowsocks-libev.tracker.mptcp=1
set shadowsocks-libev.tracker.verbose=0
commit shadowsocks-libev
EOF
/etc/init.d/shadowsocks-libev restart
}
[ -n "$tracker_server" ] && [ "$server" = "$tracker_server" ] || {
logger -t "omr-tracker" "Set ShadowSock tracker to current server ($tracker_server -> $server)..."
uci -q batch <<-EOF >/dev/null
set shadowsocks-libev.tracker.server=$server
set shadowsocks-libev.tracker_${server}=ss_local
set shadowsocks-libev.tracker_${server}.server=$server
set shadowsocks-libev.tracker_${server}.local_address="127.0.0.1"
set shadowsocks-libev.tracker_${server}.local_port=1111
set shadowsocks-libev.tracker_${server}.mode=tcp_and_udp
set shadowsocks-libev.tracker_${server}.timeout=600
set shadowsocks-libev.tracker_${server}.fast_open=1
set shadowsocks-libev.tracker_${server}.syslog=0
set shadowsocks-libev.tracker_${server}.reuse_port=1
set shadowsocks-libev.tracker_${server}.mptcp=1
set shadowsocks-libev.tracker_${server}.verbose=0
commit shadowsocks-libev
EOF
/etc/init.d/shadowsocks-libev restart
}
# [ -n "$tracker_server" ] && [ "$server" = "$tracker_server" ] || {
# logger -t "omr-tracker" "Set ShadowSock tracker to current server ($tracker_server -> $server)..."
# uci -q batch <<-EOF >/dev/null
# set shadowsocks-libev.tracker.server=$server
# commit shadowsocks-libev
# EOF
# /etc/init.d/shadowsocks-libev restart
# }
}
_launch_shadowsocks_tracker() {
local hosts timeout tries interval local_port enabled server wait_test
[ "$1" = "tracker" ] || return
[ "$(echo $1 | grep tracker)" != "" ] || return
_validate_section "proxy" "proxy"
@ -189,6 +191,7 @@ _launch_shadowsocks_tracker() {
procd_append_param env "OMR_TRACKER_INTERVAL=$interval"
procd_append_param env "OMR_TRACKER_PROXY=127.0.0.1:$local_port"
procd_append_param env "OMR_TRACKER_WAIT_TEST=$wait_test"
procd_append_param env "OMR_TRACKER_SERVER=$server"
procd_set_param limits nofile="51200 51200"
procd_set_param respawn 0 10 0
procd_set_param stderr 1
@ -230,7 +233,7 @@ start_service() {
local ss_disabled
logger -t "omr-tracker" "Launching..."
config_load shadowsocks-libev
_initialize_shadowsocks_tracker
config_foreach _initialize_shadowsocks_tracker server
config_load network
config_foreach _launch_tracker interface

View file

@ -80,7 +80,7 @@ MY_DEPENDS := \
!TARGET_mvebu:luci-proto-qmi wpad-basic kmod-mt7601u kmod-rtl8187 \
luci-app-mlvpn mlvpn 464xlat !TARGET_mvebu:kmod-usb-net-smsc75xx kmod-zram kmod-swconfig swconfig kmod-ipt-nat kmod-ipt-nat6 luci-app-https-dns-proxy kmod-tcp-nanqinlang (TARGET_x86_64||aarch64):kmod-tcp-bbr2 iptables-mod-ipopt igmpproxy ss iptraf-ng \
luci-app-acl block-mount blockd fstools luci-app-shutdown libwebp luci-proto-gre tcptraceroute luci-proto-mbim kmod-rtl8xxxu kmod-ath9k-htc luci-app-ttyd luci-mod-dashboard (TARGET_x86||TARGET_x86_64):rtl8192eu-firmware kmod-usb2 libustream-wolfssl (TARGET_x86||TARGET_x86_64):kmod-ixgbevf \
hwinfo (TARGET_x86||TARGET_x86_64):dmidecode luci-app-packet-capture kmod-bonding luci-proto-bonding
hwinfo (TARGET_x86||TARGET_x86_64):dmidecode luci-app-packet-capture kmod-bonding luci-proto-bonding luci-app-sysupgrade
# luci-theme-bootstrap luci-theme-openwrt-2020 luci-theme-openwrt luci-app-status
# luci-proto-bonding luci-app-statistics luci-proto-gre
# softethervpn5-client softethervpn5-server luci-app-nginx-ha

View file

@ -1,15 +1,34 @@
#!/bin/sh
# vim: set noexpandtab tabstop=4 shiftwidth=4 softtabstop=4 :
INTERFACE="$1"
HOST="proof.ovh.net"
echo "Select best test server..."
HOSTLST="http://speedtest.frankfurt.linode.com/garbage.php?ckSize=10000 http://speedtest.tokyo2.linode.com/garbage.php?ckSize=10000 http://speedtest.singapore.linode.com/garbage.php?ckSize=10000 http://speedtest.newark.linode.com/garbage.php?ckSize=10000 http://speedtest.atlanta.linode.com/garbage.php?ckSize=10000 http://speedtest.dallas.linode.com/garbage.php?ckSize=10000 http://speedtest.fremont.linode.com/garbage.php?ckSize=10000 http://speedtest.tele2.net/1000GB.zip http://www.ovh.net/files/10Gb.dat https://speed.hetzner.de/10GB.bin http://ipv4.bouygues.testdebit.info/10G.iso http://par.download.datapacket.com/10000mb.bin http://nyc.download.datapacket.com/10000mb.bin http://ams.download.datapacket.com/10000mb.bin http://fra.download.datapacket.com/10000mb.bin http://lon.download.datapacket.com/10000mb.bin http://mad.download.datapacket.com/10000mb.bin http://prg.download.datapacket.com/10000mb.bin http://sto.download.datapacket.com/10000mb.bin http://vie.download.datapacket.com/10000mb.bin http://war.download.datapacket.com/10000mb.bin http://atl.download.datapacket.com/10000mb.bin http://chi.download.datapacket.com/10000mb.bin http://lax.download.datapacket.com/10000mb.bin http://mia.download.datapacket.com/10000mb.bin http://nyc.download.datapacket.com/10000mb.bin"
bestping="999"
for pinghost in $HOSTLST; do
domain=$(echo $pinghost | awk -F/ '{print $3}')
if [ -z "$INTERFACE" ]; then
ping=$(ping -c1 -w2 $domain | cut -d "/" -s -f5 | cut -d "." -f1)
else
ping=$(ping -c1 -w2 -I $INTERFACE -B $domain | cut -d "/" -s -f5 | cut -d "." -f1)
fi
echo "host: $domain - ping: $ping"
if [ -n "$ping" ] && [ "$ping" -lt "$bestping" ]; then
bestping=$ping
HOST=$pinghost
fi
done
[ -z "$HOST" ] && HOST="http://proof.ovh.net/files/10Gio.dat"
echo "Best server is $HOST, running test:"
trap : HUP INT TERM
if [ -z "$INTERFACE" ]; then
curl -6 http://$HOST/files/10Gio.dat >/dev/null || echo
curl -6 $HOST >/dev/null || echo
else
hostip=$(dig +short AAAA $HOST | tr -d "\n")
domain=$(echo $HOST | awk -F/ '{print $3}')
hostip=$(dig +nocmd +noall +answer AAAA $domain | grep -v CNAME | awk '{print $5}' | tr -d "\n")
ipset add ss_rules6_dst_bypass_all $hostip
curl -6 --interface $INTERFACE http://$HOST/files/10Gio.dat >/dev/null || echo
curl -6 --interface $INTERFACE $HOST >/dev/null || echo
ipset del ss_rules6_dst_bypass_all $hostip
fi

View file

@ -2,9 +2,12 @@
INTERFACE="$1"
multipathip=$(dig +short A multipath-tcp.org | tr -d "\n")
ipset add ss_rules_dst_bypass_all $multipathip > /dev/null 2>&1
multipathip6=$(dig +short AAAA multipath-tcp.org | tr -d "\n")
ipset add ss_rules6_dst_bypass_all $multipathip6 > /dev/null 2>&1
if [ -z "$INTERFACE" ]; then
tracebox -v -n -p IP/TCP/MSS/MPCAPABLE/WSCALE multipath-tcp.org
else
tracebox -v -i $INTERFACE -n -p IP/TCP/MSS/MPCAPABLE/WSCALE multipath-tcp.org
fi
ipset del ss_rules_dst_bypass_all $multipathip > /dev/null 2>&1
ipset del ss_rules6_dst_bypass_all $multipathip6 > /dev/null 2>&1

View file

@ -8,6 +8,8 @@ USE_PROCD=1
EXTRA_COMMANDS="set_pihole backup_send backup_get backup_list set_vps_firewall get_openvpn_key"
. /usr/lib/unbound/iptools.sh
_parse_result() {
result=$("echo $1 | jsonfilter -q -e '@.result'")
echo $result
@ -15,23 +17,34 @@ _parse_result() {
_login() {
local username password auth
server="$(uci -q get openmptcprouter.${servername}.ip)"
[ -z "$server" ] && server="$(uci -q get shadowsocks-libev.sss0.server)"
#server="$(uci -q get openmptcprouter.${servername}.ip)"
#[ -z "$server" ] && server="$(uci -q get shadowsocks-libev.sss0.server)"
username="$(uci -q get openmptcprouter.${servername}.username)"
password="$(uci -q get openmptcprouter.${servername}.password)"
serverport="$(uci -q get openmptcprouter.${servername}.port)"
#[ -z "$server" ] && server="$(uci -q get openmptcprouter.${servername}.ip)"
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:$serverport/login`
auth=`curl --max-time 10 -s -k -H "accept: application/json" -H "Content-Type: application/x-www-form-urlencoded" -X POST -d 'username='$username'&password='$password https://$server:$serverport/token`
[ -z "$auth" ] && return
token="$(echo "$auth" | jsonfilter -q -e '@.access_token')"
uci -q set openmptcprouter.${servername}.token="$token"
login_on_server() {
server=$1
#auth=`curl --max-time 10 -s -k -H "Content-Type: application/json" -X POST -d '{"username":"'$username'","password":"'$password'"}' https://$server:$serverport/login`
resolve="$(resolveip $server)"
valid_ip6=$(valid_subnet6 $server)
if [ "$resolve" != "$server" ] || [ "$valid_ip6" != "ok" ]; then
auth=`curl --max-time 10 -s -k -H "accept: application/json" -H "Content-Type: application/x-www-form-urlencoded" -X POST -d 'username='$username'&password='$password https://$server:$serverport/token`
else
auth=`curl --max-time 10 -s -k -H "accept: application/json" -H "Content-Type: application/x-www-form-urlencoded" -X POST -d 'username='$username'&password='$password https://[$server]:$serverport/token`
fi
[ -z "$auth" ] && return
token="$(echo "$auth" | jsonfilter -q -e '@.access_token')"
uci -q set openmptcprouter.${servername}.token="$token"
}
config_load openmptcprouter
config_list_foreach ${servername} ip login_on_server
fi
}
_ping_server() {
server="$(uci -q get openmptcprouter.${servername}.ip)"
[ -z "$server" ] && server="$(uci -q get shadowsocks-libev.sss0.server)"
server="$1"
ret=$(ping -c 3 -w 3 -Q 184 $server 2>&1) && echo "$ret" | grep -sq "bytes from" && return
false
}
@ -41,7 +54,13 @@ _get_json() {
route=$1
[ -z "$token" ] && _login
[ -n "$token" ] && {
result=`curl --max-time 10 -s -k -H "accept: application/json" -H "Authorization: Bearer $token" https://$server:$serverport/$route`
resolve="$(resolveip $server)"
valid_ip6=$(valid_subnet6 $server)
if [ "$resolve" != "$server" ] || [ "$valid_ip6" != "ok" ]; then
result=`curl --max-time 10 -s -k -H "accept: application/json" -H "Authorization: Bearer $token" https://$server:$serverport/$route`
else
result=`curl --max-time 10 -s -k -H "accept: application/json" -H "Authorization: Bearer $token" https://[$server]:$serverport/$route`
fi
echo $result
} || {
echo ''
@ -54,7 +73,13 @@ _set_json() {
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:$serverport/$route`
resolve="$(resolveip $server)"
valid_ip6=$(valid_subnet6 $server)
if [ "$resolve" != "$server" ] || [ "$valid_ip6" != "ok" ]; then
result=`curl --max-time 10 -s -k -H "Authorization: Bearer $token" -H "Content-Type: application/json" -X POST -d "$settings" https://$server:$serverport/$route`
else
result=`curl --max-time 10 -s -k -H "Authorization: Bearer $token" -H "Content-Type: application/json" -X POST -d "$settings" https://[$server]:$serverport/$route`
fi
echo $result
} || {
echo ''
@ -449,6 +474,7 @@ _get_gre_tunnel() {
set network.omrip${i}gre.defaultroute='0'
set network.omrip${i}gre.multipath='off'
set network.omrip${i}gre.peerdns='0'
set network.omrip${i}gre.ttl='255'
set network.omrip${i}gre.ip4table='vpn'
set network.omrip${i}gre.peeraddr="$publicaddr"
set network.omrip${i}gre.ipaddr="$vpnip_local"
@ -1068,7 +1094,7 @@ _set_config_from_vps() {
set shadowsocks-libev.sss0.disabled=0
commit shadowsocks-libev
set v2ray.main.enabled=0
commit shadowsocks-libev
commit v2ray
set openmptcprouter.settings.shadowsocks_disable=0
commit openmptcprouter
EOF
@ -1077,7 +1103,7 @@ _set_config_from_vps() {
set shadowsocks-libev.sss0.disabled=1
commit shadowsocks-libev
set v2ray.main.enabled=1
commit shadowsocks-libev
commit v2ray
set openmptcprouter.settings.shadowsocks_disable=1
commit openmptcprouter
EOF
@ -1086,7 +1112,7 @@ _set_config_from_vps() {
set shadowsocks-libev.sss0.disabled=1
commit shadowsocks-libev
set v2ray.main.enabled=0
commit shadowsocks-libev
commit v2ray
set openmptcprouter.settings.shadowsocks_disable=1
commit openmptcprouter
EOF
@ -1453,7 +1479,7 @@ _backup_send() {
EOF
return
}
sysupgrade -b /tmp/backup.tar.gz
sysupgrade -k -b /tmp/backup.tar.gz
backup_data="$(cat /tmp/backup.tar.gz | base64 | tr -d '\n')"
backup_sha256sum="$(sha256sum /tmp/backup.tar.gz | awk '{print $1}')"
[ -n "$backup_data" ] && {
@ -1565,20 +1591,36 @@ _config_service() {
_login
[ -z "$token" ] && {
reason=""
_ping_server
status=$?
if $(exit $status); then
reason="can ping server ${servername}"
else
reason="can't ping server ${servername}"
fi
test_ping() {
_ping_server $1
status=$?
if $(exit $status); then
reason="can ping server ${servername} on $1"
else
reason="can't ping server ${servername} on $1"
fi
}
config_list_foreach "${servername}" ip test_ping
port="$(uci -q get openmptcprouter.${servername}.port)"
server="$(uci -q get openmptcprouter.${servername}.ip)"
if [ "$(curl -k -m 3 https://${server}:${port}/)" = "" ]; then
reason="$reason, no server API answer"
else
reason="$reason, server API answer"
fi
api_test() {
server="$1"
resolve="$(resolveip $server)"
valid_ip6=$(valid_subnet6 $server)
if [ "$resolve" != "$server" ] || [ "$valid_ip6" != "ok" ]; then
if [ "$(curl -k -m 3 https://${server}:${port}/)" = "" ]; then
reason="$reason, no server API answer on $1"
else
reason="$reason, server API answer on $1"
fi
else
if [ "$(curl -k -m 3 https://[${server}]:${port}/)" = "" ]; then
reason="$reason, no server API answer on $1"
else
reason="$reason, server API answer on $1"
fi
fi
}
config_list_foreach "${servername}" ip api_test
if [ "$(uci -q get openmptcprouter.${servername}.username)" != "openmptcprouter" ]; then
reason="$reason, custom username"
fi
@ -1706,6 +1748,9 @@ start_service() {
uci -q batch <<-EOF >/dev/null
commit openmptcprouter
EOF
if [ "$(ps w | grep sysupgrade)" = "" ]; then
/etc/init.d/sysupgrade restart
fi
}
service_triggers() {

View file

@ -151,6 +151,41 @@ if [ "$(uci -q get firewall.blockquicproxy)" = "" ]; then
EOF
fi
if [ "$(uci -q get firewall.allowicmpipv6)" = "" ]; then
uci -q batch <<-EOF >/dev/null
set firewall.allowicmpipv6=rule
set firewall.allowicmpipv6.proto='icmp'
set firewall.allowicmpipv6.target='ACCEPT'
set firewall.allowicmpipv6.src='wan'
set firewall.allowicmpipv6.name='Allow IPv6 ICMP'
set firewall.allowicmpipv6.family='ipv6'
set firewall.allowicmpipv6.icmp_type='neighbour-advertisement neighbour-solicitation router-advertisement router-solicitation'
commit firewall
EOF
fi
if [ "$(uci -q get firewall.allowdhcpv6546)" = "" ]; then
uci -q batch <<-EOF >/dev/null
set firewall.allowdhcpv6546=rule
set firewall.allowdhcpv6546.target='ACCEPT'
set firewall.allowdhcpv6546.src='wan'
set firewall.allowdhcpv6546.proto='udp'
set firewall.allowdhcpv6546.dest_port='547'
set firewall.allowdhcpv6546.name='Allow DHCPv6 (546-to-547)'
set firewall.allowdhcpv6546.family='ipv6'
set firewall.allowdhcpv6546.src_port='546'
set firewall.allowdhcpv6547=rule
set firewall.allowdhcpv6547.target='ACCEPT'
set firewall.allowdhcpv6547.src='wan'
set firewall.allowdhcpv6547.proto='udp'
set firewall.allowdhcpv6547.dest_port='546'
set firewall.allowdhcpv6547.name='Allow DHCPv6 (547-to-546)'
set firewall.allowdhcpv6547.family='ipv6'
set firewall.allowdhcpv6547.src_port='547'
commit firewall
EOF
fi
# Fix firewall config from some old config
allintf=$(uci -q get firewall.@zone[1].network)
uci -q del firewall.@zone[1].network

View file

@ -146,7 +146,8 @@ ss_rules_cb() {
ss_redir_ports() {
port=$(uci -q get shadowsocks-libev.$1.local_port)
server=$(uci -q get shadowsocks-libev.$1.server)
if [ "$server" = "$2" ] || [ "$2" = "" ]; then
disabled=$(uci -q get shadowsocks-libev.$1.disabled)
if [ "$disabled" != "1" ] && ([ "$server" = "$2" ] || [ "$2" = "" ]); then
if [ "$port" -lt "$min_ss_redir_ports" ]; then
min_ss_redir_ports=$port
fi
@ -225,6 +226,26 @@ ss_rules() {
src_ips_bypass6="$(echo "$src_ips_bypass" | grep -o '\([0-9a-fA-F]\{0,4\}:\)\{1,7\}[0-9a-fA-F]\{0,4\}' | sort -u)"
src_ips_forward6="$(echo "$src_ips_forward" | grep -o '\([0-9a-fA-F]\{0,4\}:\)\{1,7\}[0-9a-fA-F]\{0,4\}' | sort -u)"
src_ips_checkdst6="$(echo "$src_ips_checkdst" | grep -o '\([0-9a-fA-F]\{0,4\}:\)\{1,7\}[0-9a-fA-F]\{0,4\}' | sort -u)"
[ -z "$dst_ips_bypass4" ] && [ -z "$dst_ips_bypass6" ] && {
dst_ips_bypass4="$dst_ips_bypass"
dst_ips_bypass6="$dst_ips_bypass"
}
[ -z "$dst_ips_forward4" ] && [ -z "$dst_ips_forward6" ] && {
dst_ips_forward4="$dst_ips_forward"
dst_ips_forward6="$dst_ips_forward"
}
[ -z "$src_ips_bypass4" ] && [ -z "$src_ips_bypass6" ] && {
src_ips_bypass4="$src_ips_bypass"
src_ips_bypass6="$src_ips_bypass"
}
[ -z "$src_ips_forward4" ] && [ -z "$src_ips_forward6" ] && {
src_ips_forward4="$src_ips_forward"
src_ips_forward6="$src_ips_forward"
}
[ -z "$src_ips_checkdst4" ] && [ -z "$src_ips_checkdst6" ] && {
src_ips_checkdst4="$src_ips_checkdst"
src_ips_checkdst6="$src_ips_checkdst"
}
[ "$dst_forward_recentrst" = 0 ] || args="$args --dst-forward-recentrst"
ss_rules_call