mirror of
https://github.com/Ysurac/openmptcprouter-feeds.git
synced 2025-02-13 19:11:51 +00:00
350 lines
16 KiB
HTML
350 lines
16 KiB
HTML
<%+header%>
|
|
|
|
<%
|
|
local uci = require("luci.model.uci").cursor()
|
|
local net = require "luci.model.network".init()
|
|
local fs = require "nixio.fs"
|
|
local sys = require "luci.sys"
|
|
local ifaces = sys.net:devices()
|
|
local servers_ip = {}
|
|
local server_ip = uci:get("shadowsocks-libev","sss0","server")
|
|
if server_ip == '127.0.0.1' then
|
|
local upstreams = uci:get("nginx-ha","ShadowSocks","upstreams")
|
|
for _, up in pairs(upstreams) do
|
|
local a = up:match("^([^:]+):")
|
|
table.insert(servers_ip,a)
|
|
end
|
|
else
|
|
table.insert(servers_ip,server_ip)
|
|
end
|
|
|
|
function device_notvirtual(dev)
|
|
for _, iface in ipairs(net:get_networks()) do
|
|
local ifacen = iface:name()
|
|
local ifacename = uci:get("network",ifacen,"ifname")
|
|
local ifacetype = uci:get("network",ifacen,"type") or ""
|
|
local ifaceproto = uci:get("network",ifacen,"proto") or ""
|
|
if ifacename == dev and (ifacetype == "macvlan" or ifacetype == "bridge" or ifaceproto == "6in4") then
|
|
return false
|
|
end
|
|
end
|
|
return true
|
|
end
|
|
|
|
%>
|
|
<script type="text/javascript" src="<%=resource%>/cbi.js?v=git-18.243.49640-2f13420" data-strings="{"path":{"resource":"\/luci-static\/resources","browser":"\/cgi-bin\/luci\/admin\/filebrowser"}}"></script>
|
|
<script src="/luci-static/resources/xhr.js?v=git-18.324.48426-65adb4e"></script>
|
|
<script>
|
|
function jsshowadv() {
|
|
if(document.getElementById('showadv').checked){
|
|
document.getElementById('advancedsettings').style.display='inline';
|
|
} else {
|
|
document.getElementById('advancedsettings').style.display='none';
|
|
}
|
|
}
|
|
</script>
|
|
<% if stderr and #stderr > 0 then %><pre class="error"><%=pcdata(stderr)%></pre><% end %>
|
|
<form class="inline" method="post" action="<%=url('admin/system/openmptcprouter/wizard_add')%>" enctype="multipart/form-data">
|
|
<div class="cbi-map">
|
|
<h2 name="content"><%:Wizard%></h2>
|
|
<fieldset class="cbi-section" id="server">
|
|
<legend><%:Server settings%></legend>
|
|
<%
|
|
nbserver=0
|
|
uci:foreach("openmptcprouter","server", function(s)
|
|
nbserver=nbserver+1
|
|
end)
|
|
uci:foreach("openmptcprouter","server", function(s)
|
|
servername = s[".name"]
|
|
%>
|
|
<div class="cbi-section-remove right">
|
|
<input type="submit" name="delete_server.<%=servername%>" onclick="this.form.cbi_state='del-section'; return true" value="<%:Delete%>" class="cbi-button" />
|
|
<input type="hidden" name="server.<%=servername%>" value="<%=servername%>" />
|
|
</div>
|
|
<h3><%=servername%></h3>
|
|
<div class="cbi-section-node" id="cbi-omr-wizard-<%=servername%>">
|
|
<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-type="ip4addr" data-optional="false">
|
|
<div class="cbi-value-description">
|
|
<%:Server IP will be set for ShadowSocks, Glorytun, OpenVPN and MLVPN%>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<br />
|
|
<div class="cbi-value">
|
|
<label class="cbi-value-title"><%:OpenMPTCProuter VPS key%></label>
|
|
<div class="cbi-value-field">
|
|
<input type="text" name="<%=servername%>.openmptcprouter_vps_key" placeholder="OpenMPTCProuter VPS key" class="cbi-input-text" value="<%=uci:get("openmptcprouter",servername,"password")%>" data-type="base64" data-optional="false">
|
|
<br />
|
|
<div class="cbi-value-description">
|
|
<%:Key to configure and retrieve others keys from OpenMPTCProuter VPS. Empty to disable.%>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<%
|
|
if nbserver > 1 then
|
|
%>
|
|
<br />
|
|
<div class="cbi-value">
|
|
<label class="cbi-value-title"><%:Set server as backup%></label>
|
|
<div class="cbi-value-field">
|
|
<input class="cbi-input-checkbox" type="checkbox" name="<%=servername%>.backup" value="1" <% if uci:get("openmptcprouter",servername,"backup") == "1" then %>checked<% end %>/>
|
|
</div>
|
|
</div>
|
|
<%
|
|
end
|
|
end)
|
|
%>
|
|
<div class="cbi-section-create">
|
|
<div>
|
|
<input type="text" class="cbi-section-create-name" id="cbi.cts.omr-bypass.server." name="add_server_name" data-type="uciname" data-optional="true" />
|
|
</div>
|
|
<input class="cbi-button cbi-button-add" type="submit" onclick="this.form.cbi_state='add-section'; return true" name="add_server" value="<%:Add server%>" />
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
<fieldset class="cbi-section" id="server_common">
|
|
<legend><%:Common server settings%></legend>
|
|
<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="1" <% if tonumber((luci.sys.exec("sysctl net.ipv6.conf.all.disable_ipv6")):match(" %d+")) == 0 then %>checked<% end %> />
|
|
<br />
|
|
<div class="cbi-value-description">
|
|
<%:You should disable IPv6 here if server doesn't provide IPv6.%>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="cbi-value">
|
|
<label class="cbi-value-title"><%:Advanced settings%></label>
|
|
<div class="cbi-value-field">
|
|
<input type="checkbox" class="cbi-input-checkbox" id="showadv" value="1" onclick="jsshowadv()" />
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
<span id="advancedsettings" style="display:none;">
|
|
<fieldset class="cbi-section" id="shadowsocks">
|
|
<legend><%:ShadowSocks settings%></legend>
|
|
<div class="cbi-section-descr"><%:By default ShadowSocks is used for TCP traffic.%></div>
|
|
<div class="cbi-value">
|
|
<label class="cbi-value-title"><%:ShadowSocks key%></label>
|
|
<div class="cbi-value-field">
|
|
<input type="text" name="shadowsocks_key" placeholder="ShadowSocks key" class="cbi-input-text" value="<%=uci:get("shadowsocks-libev","sss0","key")%>" data-type="base64">
|
|
<br />
|
|
<div class="cbi-value-description">
|
|
<%:ShadowSocks is used for TCP.%>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="cbi-value">
|
|
<label class="cbi-value-title"><%:Disable ShadowSocks%></label>
|
|
<div class="cbi-value-field">
|
|
<input class="cbi-input-checkbox" type="checkbox" name="disableshadowsocks" value="1" <% if uci:get("shadowsocks-libev","sss0","disabled") == 1 then %>checked<% end %> />
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
<fieldset class="cbi-section" id="vpn">
|
|
<legend><%:VPN settings%></legend>
|
|
<div class="cbi-section-descr"><%:By default VPN is used for any traffic that is not TCP.%></div>
|
|
<% if nixio.fs.access("/usr/sbin/glorytun") or nixio.fs.access("/usr/sbin/glorytun-udp") then %>
|
|
<div class="cbi-value">
|
|
<label class="cbi-value-title"><%:Glorytun key%></label>
|
|
<div class="cbi-value-field">
|
|
<input type="text" name="glorytun_key" placeholder="Glorytun key" class="cbi-input-text" value="<%=uci:get("glorytun","vpn","key")%>">
|
|
<br />
|
|
<div class="cbi-value-description">
|
|
<%:Glorytun TCP is used by default for UDP and ICMP%>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<% end %>
|
|
<% if nixio.fs.access("/usr/sbin/mlvpn") then %>
|
|
<div class="cbi-value">
|
|
<label class="cbi-value-title"><%:MLVPN password%></label>
|
|
<div class="cbi-value-field">
|
|
<input type="text" name="mlvpn_password" placeholder="MLVPN password" class="cbi-input-text" value="<%=uci:get("mlvpn","general","password")%>">
|
|
<br />
|
|
<div class="cbi-value-description">
|
|
<%:MLVPN can replace Glorytun with connections with same latency%>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<% end %>
|
|
<% if nixio.fs.access("/usr/sbin/openvpn") then %>
|
|
<div class="cbi-value">
|
|
<label class="cbi-value-title"><%:OpenVPN key%></label>
|
|
<div class="cbi-value-field">
|
|
<input type="file" name="openvpn_key" class="cbi-input-file">
|
|
<input type="text" class="cbi-input-text" data-update="change" value="<%=uci:get("openvpn","omr","secret")%>" />
|
|
<br />
|
|
<div class="cbi-value-description">
|
|
<%:You need to upload OpenVPN key file generated by OpenMPTCProuter VPS script to use OpenVPN TCP%>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<% end %>
|
|
<div class="cbi-value">
|
|
<label class="cbi-value-title"><%:Default VPN%></label>
|
|
<div class="cbi-value-field">
|
|
<select class="cbi-input-select" name="default_vpn" size="1">
|
|
<%
|
|
local available_vpns = uci:get("openmptcprouter","vps","available_vpn") or ""
|
|
if available_vpns ~= "" then
|
|
if (type(available_vpns) ~= "table") then
|
|
available_vpns = {available_vpns}
|
|
end
|
|
for _, vpn in pairs(available_vpns) do
|
|
if vpn == "glorytun-tcp" then
|
|
%>
|
|
<% if nixio.fs.access("/usr/sbin/glorytun") then %><option value="glorytun_tcp" <% if uci:get("glorytun","vpn","enable") == "1" and uci:get("glorytun","vpn","proto") == "tcp" then %>selected="selected"<% end %>>Glorytun TCP</option><% end %>
|
|
<% elseif vpn == "glorytun-udp" then %>
|
|
<% if nixio.fs.access("/usr/sbin/glorytun-udp") then %><option value="glorytun_udp" <% if uci:get("glorytun","vpn","enable") == "1" and uci:get("glorytun","vpn","proto") == "udp" then %>selected="selected"<% end %>>Glorytun UDP</option><% end %>
|
|
<% elseif vpn == "mlvpn" then %>
|
|
<% if nixio.fs.access("/usr/sbin/mlvpn") then %><option value="mlvpn" <% if uci:get("mlvpn","general","enable") == "1" then %>selected="selected"<% end %>>MLVPN</option><% end %>
|
|
<% elseif vpn == "openvpn" then %>
|
|
<% if nixio.fs.access("/usr/sbin/openvpn") then %><option value="openvpn" <% if uci:get("openvpn","omr","enabled") == "1" then %>selected="selected"<% end %>>OpenVPN</option><% end %>
|
|
<%
|
|
end
|
|
end
|
|
%>
|
|
<option value="none" <% if uci:get("openmptcprouter","settings","vpn") == "none" then %>selected="selected"<% end %>>None</option>
|
|
<%
|
|
else
|
|
%>
|
|
<% if nixio.fs.access("/usr/sbin/glorytun") then %><option value="glorytun_tcp" <% if uci:get("glorytun","vpn","enable") == "1" and uci:get("glorytun","vpn","proto") == "tcp" then %>selected="selected"<% end %>>Glorytun TCP</option><% end %>
|
|
<% if nixio.fs.access("/usr/sbin/glorytun-udp") then %><option value="glorytun_udp" <% if uci:get("glorytun","vpn","enable") == "1" and uci:get("glorytun","vpn","proto") == "udp" then %>selected="selected"<% end %>>Glorytun UDP</option><% end %>
|
|
<% if nixio.fs.access("/usr/sbin/mlvpn") then %><option value="mlvpn" <% if uci:get("mlvpn","general","enable") == "1" then %>selected="selected"<% end %>>MLVPN</option><% end %>
|
|
<% if nixio.fs.access("/usr/sbin/openvpn") then %><option value="openvpn" <% if uci:get("openvpn","omr","enabled") == "1" then %>selected="selected"<% end %>>OpenVPN</option><% end %>
|
|
<option value="none" <% if uci:get("openmptcprouter","settings","vpn") == "none" then %>selected="selected"<% end %>>None</option>
|
|
<%
|
|
end
|
|
%>
|
|
</select>
|
|
<br />
|
|
<div class="cbi-value-description">
|
|
<%:Set the default VPN used for UDP and ICMP when ShadowSocks is enabled, for all traffic if ShadowSocks is disabled.%>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
</span>
|
|
<fieldset class="cbi-section" id="interfaces">
|
|
<legend><%:Interfaces settings%></legend>
|
|
<div class="cbi-section-descr"><%:You must disable DHCP on your modems and set IP in different networks.%></div>
|
|
<%
|
|
for _, iface in ipairs(net:get_networks()) do
|
|
local ifname = iface:name()
|
|
local multipath = uci:get("network",ifname,"multipath")
|
|
if multipath ~= "off" then
|
|
%>
|
|
<div class="cbi-section-remove right">
|
|
<input type="submit" name="delete.<%=ifname%>" value="<%:Delete%>" class="cbi-button" />
|
|
</div>
|
|
<h3><%=ifname%></h3>
|
|
<fieldset class="cbi-section-node" id="cbi-openmptcprouter-<%=ifname%>">
|
|
<input type="hidden" name="intf.<%=ifname%>" value="<%=ifname%>" />
|
|
<div class="cbi-value" id="cbi-network-<%=ifname%>-proto" data-index="1">
|
|
<label class="cbi-value-title"><%:Protocol%></label>
|
|
<div class="cbi-value-field">
|
|
<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" then %>selected="selected"<% end %>><%:Static address%></option>
|
|
<option id="cbid.network.<%=ifname%>.proto-dhcp" value="dhcp"<% if uci:get("network",ifname,"proto") == "dhcp" then %>selected="selected"<% end %>><%:DHCP%></option>
|
|
<option id="cbid.network.<%=ifname%>.proto-other" value="other"<% if uci:get("network",ifname,"proto") ~= "static" and uci:get("network",ifname,"proto") ~= "dhcp" then %>selected="selected"<% end %>><%:Other%></option>
|
|
</select>
|
|
<br />
|
|
<div class="cbi-value-description">
|
|
<%:You can use DHCP if you have multiple real ethernet ports. Select other if you want to use another protocol available in Network Interfaces page.%>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="cbi-value" id="cbi-network-<%=ifname%>-address" data-depends="[{"cbid.network.<%=ifname%>.proto":"static"}]" data-index="2">
|
|
<label class="cbi-value-title"><%:IPv4 address%></label>
|
|
<div class="cbi-value-field">
|
|
<input type="text" id="cbid.network.<%=ifname%>.ipaddr" name="cbid.network.<%=ifname%>.ipaddr" class="cbi-input-text" value="<%=uci:get("network",ifname,"ipaddr")%>" data-type="ip4addr">
|
|
<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%>-netmask" data-depends="[{"cbid.network.<%=ifname%>.proto":"static"}]" data-index="3">
|
|
<label class="cbi-value-title"><%:IPv4 netmask%></label>
|
|
<div class="cbi-value-field">
|
|
<input type="text" id="cbid.network.<%=ifname%>.netmask" name="cbid.network.<%=ifname%>.netmask" class="cbi-input-text" value="<%=uci:get("network",ifname,"netmask") or "255.255.255.0"%>" data-type="ip4addr">
|
|
</div>
|
|
</div>
|
|
<div class="cbi-value" id="cbi-network-<%=ifname%>-gateway" data-depends="[{"cbid.network.<%=ifname%>.proto":"static"}]" data-index="4">
|
|
<label class="cbi-value-title"><%:IPv4 gateway%></label>
|
|
<div class="cbi-value-field">
|
|
<input type="text" id="cbid.network.<%=ifname%>.gateway" name="cbid.network.<%=ifname%>.gateway" class="cbi-input-text" value="<%=uci:get("network",ifname,"gateway")%>" data-type="ip4addr">
|
|
<br />
|
|
<div class="cbi-value-description">
|
|
<%:Set here IP of the modem%>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<%
|
|
local download = ""
|
|
local upload = ""
|
|
if nixio.fs.access("/etc/init.d/sqm") then
|
|
download = uci:get("sqm",ifname,"download")
|
|
upload = uci:get("sqm",ifname,"upload")
|
|
else
|
|
download = uci:get("qos",ifname,"download")
|
|
upload = uci:get("qos",ifname,"upload")
|
|
end
|
|
%>
|
|
<div class="cbi-value" data-index="5">
|
|
<label class="cbi-value-title"><%:Download speed (Kb/s)%></label>
|
|
<div class="cbi-value-field">
|
|
<input type="text" name="cbid.sqm.<%=ifname%>.download" class="cbi-input-text" value="<%=download%>" data-type="uinteger">
|
|
<br />
|
|
<div class="cbi-value-description">
|
|
<%:Set value between 80-95% of max download speed link. 0 to disable.%>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="cbi-value" data-index="6">
|
|
<label class="cbi-value-title"><%:Upload speed (Kb/s)%></label>
|
|
<div class="cbi-value-field">
|
|
<input type="text" name="cbid.sqm.<%=ifname%>.upload" class="cbi-input-text" value="<%=upload%>" data-type="uinteger">
|
|
<br />
|
|
<div class="cbi-value-description">
|
|
<%:Set value between 80-95% of max upload speed link. 0 to disable.%>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
<%
|
|
end
|
|
end
|
|
%>
|
|
|
|
<div class="cbi-section-create">
|
|
<select class="cbi-section-create-name" name="add_interface_ifname">
|
|
<%
|
|
for _, ifacea in ipairs(ifaces) do
|
|
if not (ifacea == "lo" or ifacea == "6in4-omr6in4" or ifacea:match("^ifb.*") or ifacea:match("^sit.*")) and device_notvirtual(ifacea) then
|
|
%>
|
|
<option value="<%=ifacea%>"><%=ifacea%></option>
|
|
<%
|
|
end
|
|
end
|
|
%>
|
|
</select>
|
|
<input class="cbi-button cbi-button-add" type="submit" name="add_interface" value="<%:Add an interface%>" title="<%:Add an interface%>" />
|
|
</div>
|
|
<div class="cbi-value-description">
|
|
<%:Select the device you want to base the interface on.%>
|
|
</div>
|
|
</fieldset>
|
|
</div>
|
|
<div class="cbi-page-actions">
|
|
<input type="hidden" name="token" value="<%=token%>" />
|
|
<input class="cbi-button cbi-button-apply" type="submit" value="<%:Save & Apply%>" /> <input class="cbi-button cbi-button-reset" type="button" value="Reset" onclick="location.href='<%=url('admin/system/openmptcprouter/wizard')%>'" />
|
|
</div>
|
|
</form>
|
|
<script type="text/javascript">cbi_init();</script>
|
|
<%+footer%>
|