update 2025-03-21 09:39:42

This commit is contained in:
kenzok8 2025-03-21 09:39:43 +08:00
parent 22499dcff6
commit 3661f7612a
9 changed files with 490 additions and 217 deletions

View File

@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=easytier
PKG_VERSION:=2.2.2
PKG_VERSION:=2.2.4
ifeq ($(ARCH),mipsel)
APP_ARCH:=mipsel

View File

@ -6,7 +6,7 @@
include $(TOPDIR)/rules.mk
PKG_VERSION:=2.2.2
PKG_VERSION:=2.2.4
PKG_RELEASE:=
LUCI_TITLE:=LuCI support for EasyTier
@ -27,6 +27,16 @@ if [ -f /etc/easytier/config.toml ] ; then
echo "不重启设备之前再次安装luci-app-easytier 配置不丢失,不用重新配置"
mv -f /etc/easytier/config.toml /tmp/config_backup.toml
fi
if [ -f /etc/easytier/et.db ] ; then
echo "备份easytier数据库/etc/easytier/et.db到/tmp/et_backup.db"
echo "不重启设备之前再次安装luci-app-easytier 配置不丢失,不用重新配置"
mv -f /etc/easytier/et.db /tmp/et_backup.db
fi
if [ -f /etc/easytier/et_machine_id ] ; then
echo "备份easytier UUID /etc/easytier/et_machine_id到/tmp/et_machine_id_backup"
echo "不重启设备之前再次安装luci-app-easytier UUID不丢失,不用重新配置"
mv -f /etc/easytier/et_machine_id /tmp/et_machine_id_backup
fi
endef
define Package/$(PKG_NAME)/postinst
@ -42,6 +52,16 @@ if [ -f /tmp/config_backup.toml ] ; then
mv -f /tmp/config_backup.toml /etc/easytier/config.toml
echo "请前往 VPN - EasyTier 界面进行重启插件"
fi
if [ -f /tmp/et_backup.db ] ; then
echo "发现easytier备份数据库/tmp/et_backup.db开始恢复到/etc/easytier/et.db"
mv -f /tmp/et_backup.db /etc/easytier/et.db
echo "请前往 VPN - EasyTier 界面进行重启插件"
fi
if [ -f /tmp/et_machine_id_backup ] ; then
echo "发现easytier备份UUID /tmp/et_machine_id_backup开始恢复到/etc/easytier/et.db"
mv -f /tmp/et_machine_id_backup /etc/easytier/et_machine_id
echo "请前往 VPN - EasyTier 界面进行重启插件"
fi
endef
include $(TOPDIR)/feeds/luci/luci.mk

View File

@ -8,9 +8,12 @@ function index()
entry({"admin", "vpn", "easytier"}, alias("admin", "vpn", "easytier", "easytier"),_("EasyTier"), 46).dependent = true
entry({"admin", "vpn", "easytier", "easytier"}, cbi("easytier"),_("EasyTier"), 47).leaf = true
entry({"admin", "vpn", "easytier", "easytier_log"}, form("easytier_log"),_("日志"), 48).leaf = true
entry({"admin", "vpn", "easytier", "easytier_log"}, form("easytier_log"),_("core日志"), 48).leaf = true
entry({"admin", "vpn", "easytier", "get_log"}, call("get_log")).leaf = true
entry({"admin", "vpn", "easytier", "clear_log"}, call("clear_log")).leaf = true
entry({"admin", "vpn", "easytier", "easytierweb_log"}, form("easytierweb_log"),_("web日志"), 49).leaf = true
entry({"admin", "vpn", "easytier", "get_wlog"}, call("get_wlog")).leaf = true
entry({"admin", "vpn", "easytier", "clear_wlog"}, call("clear_wlog")).leaf = true
entry({"admin", "vpn", "easytier", "status"}, call("act_status")).leaf = true
end
@ -18,29 +21,56 @@ function act_status()
local e = {}
local sys = require "luci.sys"
e.crunning = luci.sys.call("pgrep easytier-core >/dev/null") == 0
e.wrunning = luci.sys.call("pgrep easytier-web >/dev/null") == 0
local tagfile = io.open("/tmp/easytier_time", "r")
if tagfile then
local tagcontent = tagfile:read("*all")
tagfile:close()
if tagcontent and tagcontent ~= "" then
os.execute("start_time=$(cat /tmp/easytier_time) && time=$(($(date +%s)-start_time)) && day=$((time/86400)) && [ $day -eq 0 ] && day='' || day=${day}天 && time=$(date -u -d @${time} +'%H小时%M分%S秒') && echo $day $time > /tmp/command_easytier 2>&1")
local command_output_file = io.open("/tmp/command_easytier", "r")
if command_output_file then
e.etsta = command_output_file:read("*all")
command_output_file:close()
end
end
local tagcontent = tagfile:read("*all")
tagfile:close()
if tagcontent and tagcontent ~= "" then
os.execute("start_time=$(cat /tmp/easytier_time) && time=$(($(date +%s)-start_time)) && day=$((time/86400)) && [ $day -eq 0 ] && day='' || day=${day}天 && time=$(date -u -d @${time} +'%H小时%M分%S秒') && echo $day $time > /tmp/command_easytier 2>&1")
local command_output_file = io.open("/tmp/command_easytier", "r")
if command_output_file then
e.etsta = command_output_file:read("*all")
command_output_file:close()
end
end
end
local command2 = io.popen('test ! -z "`pidof easytier-core`" && (top -b -n1 | grep -E "$(pidof easytier-core)" 2>/dev/null | grep -v grep | awk \'{for (i=1;i<=NF;i++) {if ($i ~ /easytier-core/) break; else cpu=i}} END {print $cpu}\')')
e.etcpu = command2:read("*all")
command2:close()
local command3 = io.popen("test ! -z `pidof easytier-core` && (cat /proc/$(pidof easytier-core | awk '{print $NF}')/status | grep -w VmRSS | awk '{printf \"%.2f MB\", $2/1024}')")
e.etram = command3:read("*all")
command3:close()
local wtagfile = io.open("/tmp/easytierweb_time", "r")
if wtagfile then
local wtagcontent = wtagfile:read("*all")
wtagfile:close()
if wtagcontent and wtagcontent ~= "" then
os.execute("start_time=$(cat /tmp/easytierweb_time) && time=$(($(date +%s)-start_time)) && day=$((time/86400)) && [ $day -eq 0 ] && day='' || day=${day}天 && time=$(date -u -d @${time} +'%H小时%M分%S秒') && echo $day $time > /tmp/command_easytierweb 2>&1")
local wcommand_output_file = io.open("/tmp/command_easytierweb", "r")
if wcommand_output_file then
e.etwebsta = wcommand_output_file:read("*all")
wcommand_output_file:close()
end
end
end
local command4 = io.popen('test ! -z "`pidof easytier-web`" && (top -b -n1 | grep -E "$(pidof easytier-web)" 2>/dev/null | grep -v grep | awk \'{for (i=1;i<=NF;i++) {if ($i ~ /easytier-web/) break; else cpu=i}} END {print $cpu}\')')
e.etwebcpu = command4:read("*all")
command4:close()
local command5 = io.popen("test ! -z `pidof easytier-web` && (cat /proc/$(pidof easytier-web | awk '{print $NF}')/status | grep -w VmRSS | awk '{printf \"%.2f MB\", $2/1024}')")
e.etwebram = command5:read("*all")
command5:close()
local command8 = io.popen("([ -s /tmp/easytiernew.tag ] && cat /tmp/easytiernew.tag ) || ( curl -L -k -s --connect-timeout 3 --user-agent 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36' https://api.github.com/repos/EasyTier/EasyTier/releases/latest | grep tag_name | sed 's/[^0-9.]*//g' >/tmp/easytiernew.tag && cat /tmp/easytiernew.tag )")
e.etnewtag = command8:read("*all")
command8:close()
local command9 = io.popen("([ -s /tmp/easytier.tag ] && cat /tmp/easytier.tag ) || ( echo `$(uci -q get easytier.@easytier[0].easytierbin) -V | sed 's/^[^0-9]*//'` > /tmp/easytier.tag && cat /tmp/easytier.tag && [ ! -s /tmp/easytier.tag ] && echo '' >> /tmp/easytier.tag && cat /tmp/easytier.tag )")
e.ettag = command9:read("*all")
command9:close()
@ -64,6 +94,17 @@ function clear_log()
luci.sys.call("echo '' >/tmp/easytier.log")
end
function get_wlog()
local log = ""
local files = {"/tmp/easytierweb.log"}
for i, file in ipairs(files) do
if luci.sys.call("[ -f '" .. file .. "' ]") == 0 then
log = log .. luci.sys.exec("cat " .. file)
end
end
luci.http.write(log)
end
function clear_wlog()
luci.sys.call("echo '' >/tmp/easytierweb.log")
end

View File

@ -4,9 +4,9 @@ local nixio = require "nixio"
m = Map("easytier")
m.description = translate('一个简单、安全、去中心化的内网穿透 VPN 组网方案,使用 Rust 语言和 Tokio 框架实现。 项目地址:<a href="https://github.com/EasyTier/EasyTier">github.com/EasyTier/EasyTier</a>&nbsp;&nbsp;<a href="http://easytier.cn">官网文档</a>&nbsp;&nbsp;<a href="http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=jhP2Z4UsEZ8wvfGPLrs0VwLKn_uz0Q_p&authKey=OGKSQLfg61YPCpVQuvx%2BxE7hUKBVBEVi9PljrDKbHlle6xqOXx8sOwPPTncMambK&noverify=0&group_code=949700262">QQ群</a>&nbsp;&nbsp;<a href="https://doc.oee.icu">菜鸟教程</a>')
-- easytier
m:section(SimpleSection).template = "easytier/easytier_status"
-- easytier-core
s=m:section(TypedSection, "easytier", translate("EasyTier配置"))
s.addremove=false
s.anonymous=true
@ -28,14 +28,14 @@ btncq.write = function()
end
etcmd = s:taboption("general",ListValue, "etcmd", translate("启动方式"),
translate("默认使用命令行方式启动,也可以使用配置文件启动或<a href='https://easytier.cn/web'>WEB网页配置</a><br>切换启动方式后将以指定的方式启动,请谨慎选择"))
translate("官方Web控制台<a href='https://easytier.cn/web'>easytier.cn/web</a><br>官方配置文件生成器:<a href='https://easytier.cn/web/index.html#/config_generator'>easytier.cn/web/index.html#/config_generator</a><br>注意配置RPC端口为15888"))
etcmd.default = "etcmd"
etcmd:value("etcmd",translate("命令行"))
etcmd:value("config",translate("配置文件"))
etcmd:value("web",translate("WEB配置"))
etcmd:value("web",translate("Web配置"))
et_config = s:taboption("general",TextValue, "et_config", translate("配置文件"),
translate("配置文件在/etc/easytier/config.toml<br>命令行的启动参数和此配置文件的参数并不同步,请自行修改<br>配置文件介绍:<a href='https://easytier.rs/guide/network/config-file.html'>点此查看</a>"))
translate("配置文件在/etc/easytier/config.toml<br>命令行的启动参数和此配置文件的参数不会同步<br>注意填写tun网卡名和端口用以自动防火墙放行"))
et_config.rows = 18
et_config.wrap = "off"
et_config:depends("etcmd", "config")
@ -53,8 +53,8 @@ et_config.write = function(self, section, value)
nixio.fs.writefile(file, value:gsub("\r\n", "\n"))
end
web_config = s:taboption("general", Value, "web_config", translate("WEB服务器地址"),
translate("WEB配置服务器地址。-w 参数)<br>自建WEB服务器 输入格式udp://服务器地址:22020/账户名<br>官方WEB服务器 输入格式:账户名 <br>官方WEB服务器配置<a href='https://easytier.cn/web'>点此</a>"))
web_config = s:taboption("general", Value, "web_config", translate("Web服务器地址"),
translate("Web配置服务器地址。-w 参数)<br>自建Web服务器 输入格式udp://服务器地址:22020/账户名<br>官方Web服务器 输入格式:账户名 <br>官方Web控制台<a href='https://easytier.cn/web'>easytier.cn/web</a>"))
web_config.placeholder = "admin"
web_config:depends("etcmd", "web")
@ -63,9 +63,10 @@ network_name = s:taboption("general", Value, "network_name", translate("网络
network_name.password = true
network_name.placeholder = "test"
network_name:depends("etcmd", "etcmd")
network_name:depends("etcmd", "web")
network_secret = s:taboption("general", Value, "network_secret", translate("网络密钥"),
translate("用于验证此节点是否属于 VPN 网络的网络密钥--network-secret 参数)"))
translate("网络密钥,用于验证此节点是否属于 VPN 网络(--network-secret 参数)"))
network_secret.password = true
network_secret.placeholder = "test"
network_secret:depends("etcmd", "etcmd")
@ -83,10 +84,9 @@ ipaddr:depends("etcmd", "etcmd")
peeradd = s:taboption("general",DynamicList, "peeradd", translate("对等节点"),
translate("初始连接的对等节点,和下方参数作用一样 -p 参数)<br>公共服务器可用状态查询:<a href='https://easytier.gd.nkbpal.cn/status/easytier' target='_blank'>点此查询</a>"))
peeradd.placeholder = "tcp://public.easytier.top:11010"
peeradd:value("tcp://public.easytier.top:11010", translate("官方公共服务器-广东河源-tcp://public.easytier.top:11010"))
peeradd:value("tcp://43.136.45.249:11010", translate("广州V4-tcp://43.136.45.249:11010"))
peeradd:value("tcp://public.easytier.top:11010", translate("官方服务器-广东河源-tcp://public.easytier.top:11010"))
peeradd:value("tcp://turn.hb.629957.xyz:11010", translate("湖北十堰电信V4-tcp://turn.hb.629957.xyz:11010"))
peeradd:value("tcp://et.ie12vps.xyz:11010", translate("南京V4/V6-tcp://et.ie12vps.xyz:11010"))
peeradd:value("tcp://minebg.top:11010", translate("广州V4-tcp://minebg.top:11010"))
peeradd:value("tcp://ah.nkbpal.cn:11010", translate("安徽电信V4-tcp://ah.nkbpal.cn:11010"))
peeradd:value("udp://ah.nkbpal.cn:11010", translate("安徽电信V4-udp://ah.nkbpal.cn:11010"))
peeradd:value("wss://ah.nkbpal.cn:11012", translate("安徽电信V4-wss://ah.nkbpal.cn:11012"))
@ -109,7 +109,7 @@ external_node = s:taboption("general", Value, "external_node", translate("共享
translate("使用公共共享节点来发现对等节点,和上方参数作用一样 -e 参数)"))
external_node.default = ""
external_node.placeholder = "tcp://public.easytier.top:11010"
external_node:value("tcp://public.easytier.top:11010", translate("官方公共服务器-广东河源-tcp://public.easytier.top:11010"))
external_node:value("tcp://public.easytier.top:11010", translate("官方服务器-广东河源-tcp://public.easytier.top:11010"))
external_node:depends("etcmd", "etcmd")
proxy_network = s:taboption("general",DynamicList, "proxy_network", translate("子网代理"),
@ -121,8 +121,9 @@ mapped_listeners = s:taboption("privacy",DynamicList, "mapped_listeners", transl
mapped_listeners:depends("listenermode", "ON")
rpc_portal = s:taboption("privacy", Value, "rpc_portal", translate("门户地址端口"),
translate("用于管理的 RPC 门户地址。0 表示随机端口12345 表示监听本地主机的 12345 端口0.0.0.0:12345 表示在所有接口上监听 12345 端口。默认值为 0首选 15888 -r 参数)"))
translate("用于管理的 RPC 门户地址。0 表示随机端口12345 表示监听本地主机的 12345 端口0.0.0.0:12345 表示在所有接口上监听 12345 端口。<br>默认值为 0建议选 15888 防止无法获取状态信息 -r 参数)"))
rpc_portal.placeholder = "15888"
rpc_portal.default = "15888"
rpc_portal.datatype = "range(1,65535)"
rpc_portal:depends("etcmd", "etcmd")
@ -134,33 +135,33 @@ listenermode.default = "OFF"
listenermode:depends("etcmd", "etcmd")
listener6 = s:taboption("general",Flag, "listener6", translate("同时监听IPV6"),
translate("默认只监听IPV4对等节点只能使用IPV4连接启用后将同时监听IPV6,例如 -l tcp://[::]:11010"))
translate("默认只监听IPV4对等节点只能使用IPV4连接启用后将同时监听IPV6端口"))
listener6:depends("listenermode", "ON")
listener6:depends("etcmd", "etcmd")
tcp_port = s:taboption("general",Value, "tcp_port", translate("tcp/udp端口"),
translate("tcp/udp协议端口号11010表示 tcp/udp 将在 11010 上监听 <br>如果是WEB配置请填写和WEB配置一样的监听端口用于防火墙放行"))
translate("tcp/udp协议端口号11010表示 tcp/udp 将在 11010 上监听 <br>如果是配置文件Web配置请填写一样的监听端口用于防火墙放行"))
tcp_port.datatype = "range(1,65535)"
tcp_port.default = "11010"
tcp_port:depends("listenermode", "ON")
tcp_port:depends("etcmd", "web")
ws_port = s:taboption("general",Value, "ws_port", translate("ws端口"),
translate("ws协议端口号11011表示 ws 将在 11011 上监听 <br>如果是WEB配置请填写和WEB配置一样的监听端口用于防火墙放行"))
translate("ws协议端口号11011表示 ws 将在 11011 上监听 <br>如果是配置文件Web配置请填写一样的监听端口用于防火墙放行"))
ws_port.datatype = "range(1,65535)"
ws_port.default = "11011"
ws_port:depends("listenermode", "ON")
ws_port:depends("etcmd", "web")
wss_port = s:taboption("general",Value, "wss_port", translate("wss端口"),
translate("wss协议端口号11012表示 wss 将在 11012 上监听 <br>如果是WEB配置请填写和WEB配置一样的监听端口用于防火墙放行"))
translate("wss协议端口号11012表示 wss 将在 11012 上监听 <br>如果是配置文件Web配置请填写一样的监听端口用于防火墙放行"))
wss_port.datatype = "range(1,65535)"
wss_port.default = "11012"
wss_port:depends("listenermode", "ON")
wss_port:depends("etcmd", "web")
wg_port = s:taboption("general",Value, "wg_port", translate("wg端口"),
translate("wireguard协议端口号11011表示 wg 将在 11011 上监听 <br>如果是WEB配置请填写和WEB配置一样的监听端口用于防火墙放行"))
translate("wireguard协议端口号11011表示 wg 将在 11011 上监听 <br>如果是配置文件Web配置请填写一样的监听端口用于防火墙放行"))
wg_port.datatype = "range(1,65535)"
wg_port.placeholder = "11011"
wg_port:depends("listenermode", "ON")
@ -179,9 +180,10 @@ desvice_name.default = device_name
desvice_name:depends("etcmd", "etcmd")
instance_name = s:taboption("privacy",Value, "instance_name", translate("实例名称"),
translate("用于在同一台机器中标识此 VPN 节点的实例名称 --instance-name 参数)"))
translate("用于在同一台机器中标识此 VPN 节点的实例名称启用日志需要填写web配置时填一样的instance_name名称 -m 参数)"))
instance_name.placeholder = "default"
instance_name:depends("etcmd", "etcmd")
instance_name:depends("etcmd", "web")
vpn_portal = s:taboption("privacy",Value, "vpn_portal", translate("VPN门户URL"),
translate("定义 VPN 门户的 URL允许其他 VPN 客户端连接。<br> 示例wg://0.0.0.0:11011/10.14.14.0/24表示 VPN 门户是一个在 vpn.example.com:11010 上监听的 WireGuard 服务器,并且 VPN 客户端位于 10.14.14.0/24 网络中(--vpn-portal 参数)"))
@ -242,14 +244,16 @@ exit_nodes:depends("etcmd", "etcmd")
smoltcp = s:taboption("privacy",Flag, "smoltcp", translate("使用用户态协议栈"),
translate("为子网代理启用smoltcp堆栈--use-smoltcp 参数)"))
smoltcp.rmempty = false
smoltcp:depends("etcmd", "etcmd")
no_tun = s:taboption("privacy",Flag, "no_tun", translate("无tun模式"),
translate("不创建TUN设备可以使用子网代理访问节点 --no-tun 参数)"))
no_tun.rmempty = false
no_tun:depends("etcmd", "etcmd")
proxy_forward = s:taboption("privacy",Flag, "proxy_forward", translate("禁用内置NAT"),
translate("通过系统内核转发子网代理数据包禁用内置NAT --proxy-forward-by-system 参数)"))
proxy_forward:depends("etcmd", "etcmd")
manual_routes = s:taboption("privacy",DynamicList, "manual_routes", translate("路由CIDR"),
translate("手动分配路由CIDR将禁用子网代理和从对等节点传播的wireguard路由。--manual-routes 参数)"))
manual_routes.placeholder = "192.168.0.0/16"
@ -257,7 +261,6 @@ manual_routes:depends("etcmd", "etcmd")
relay_network = s:taboption("privacy",Flag, "relay_network", translate("转发白名单网络的流量"),
translate("仅转发白名单网络的流量,默认允许所有网络"))
relay_network.rmempty = false
relay_network:depends("etcmd", "etcmd")
whitelist = s:taboption("privacy",DynamicList, "whitelist", translate("白名单网络"),
@ -272,45 +275,37 @@ socks_port:depends("etcmd", "etcmd")
disable_p2p = s:taboption("privacy",Flag, "disable_p2p", translate("禁用P2P"),
translate("禁用P2P通信只通过-p指定的节点转发数据包 --disable-p2p 参数)"))
disable_p2p.rmempty = false
disable_p2p:depends("etcmd", "etcmd")
disable_udp = s:taboption("privacy",Flag, "disable_udp", translate("禁用UDP"),
translate("禁用UDP打洞功能 --disable-udp-hole-punching 参数)"))
disable_udp.rmempty = false
disable_udp:depends("etcmd", "etcmd")
relay_all = s:taboption("privacy",Flag, "relay_all", translate("允许转发"),
translate("转发所有对等节点的RPC数据包即使对等节点不在转发网络白名单中。<br>这可以帮助白名单外网络中的对等节点建立P2P连接。 -relay-all-peer-rpc 参数)"))
relay_all.rmempty = false
relay_all:depends("etcmd", "etcmd")
bind_device = s:taboption("privacy",Flag, "bind_device", translate("仅使用物理网卡"),
translate("将连接器的套接字绑定到物理设备以避免路由问题。<br>比如子网代理网段与某节点的网段冲突,绑定物理设备后可以与该节点正常通信。( --bind-device 参数)"))
bind_device.rmempty = false
bind_device.default = "1"
bind_device.default = "0"
bind_device:depends("etcmd", "etcmd")
kcp_proxy = s:taboption("privacy",Flag, "kcp_proxy", translate("启用KCP代理"),
translate("将TCP流量转为 KCP 流量,降低传输延迟,提升传输速度。<br>KCP 代理功能需要虚拟网内所有节点的 EasyTier 版本在 v2.2.0 以上。( --enable-kcp-proxy 参数)"))
kcp_proxy.rmempty = false
kcp_proxy:depends("etcmd", "etcmd")
kcp_input = s:taboption("privacy",Flag, "kcp_input", translate("禁用KCP输入"),
translate("不允许其他节点使用 KCP 代理 TCP 流到此节点。<br>开启 KCP 代理的节点访问此节点时,依然使用原始。( --disable-kcp-input 参数)"))
kcp_input.rmempty = false
kcp_input:depends("etcmd", "etcmd")
log = s:taboption("general",ListValue, "log", translate("程序日志"),
translate("运行日志在/tmp/easytier.log,可在上方日志查看<br>若启动失败,请前往 状态- 系统日志 查看具体启动失败日志<br>详细程度:警告<信息<调试<跟踪"))
log.default = "info"
log.default = "off"
log:value("off",translate("关闭"))
log:value("warn",translate("警告"))
log:value("info",translate("信息"))
log:value("debug",translate("调试"))
log:value("trace",translate("跟踪"))
log:depends("etcmd", "etcmd")
log:depends("etcmd", "config")
et_forward = s:taboption("privacy",MultiValue, "et_forward", translate("访问控制"),
translate("设置不同网络区域之间的流量允许规则"))
@ -513,7 +508,7 @@ end
btnrm = s:taboption("infos", Button, "btnrm")
btnrm.inputtitle = translate("检测更新")
btnrm.description = translate("点击按钮开始检测更新,刷新上方状态栏显示")
btnrm.description = translate("点击按钮开始检测更新,刷新上方状态栏版本显示")
btnrm.inputstyle = "apply"
btnrm.write = function()
os.execute("rm -rf /tmp/easytier*.tag /tmp/easytier*.newtag /tmp/easytier-core_*")
@ -523,6 +518,12 @@ end
easytierbin = s:taboption("upload", Value, "easytierbin", translate("easytier-core程序路径"),
translate("自定义easytier-core的存放路径确保填写完整的路径及名称,若指定的路径可用空间不足将会自动移至/tmp/easytier-core"))
easytierbin.placeholder = "/usr/bin/easytier-core"
easytierbin.default = "/usr/bin/easytier-core"
webbin = s:taboption("upload", Value, "webbin", translate("easytier-web程序路径"),
translate("自定义easytier-web的存放路径确保填写完整的路径及名称然后上传安装程序"))
webbin.placeholder = "/usr/bin/easytier-web"
webbin.default = "/usr/bin/easytier-web"
local upload = s:taboption("upload", FileUpload, "upload_file")
upload.optional = true
@ -561,12 +562,16 @@ http.setfilehandler(
local extracted_dir = "/tmp/easytier-linux-*/"
os.execute("mv " .. extracted_dir .. "easytier-cli /tmp/easytier-cli")
os.execute("mv " .. extracted_dir .. "easytier-core /tmp/easytier-core")
os.execute("mv " .. extracted_dir .. "easytier-core /tmp/easytier-web")
if nixio.fs.access("/tmp/easytier-cli") then
um.value = um.value .. "\n" .. translate("-程序/tmp/easytier-cli上传成功重启一次插件才生效")
end
if nixio.fs.access("/tmp/easytier-core") then
um.value = um.value .. "\n" .. translate("-程序/tmp/easytier-core上传成功重启一次插件才生效")
end
if nixio.fs.access("/tmp/easytier-web") then
um.value = um.value .. "\n" .. translate("-程序/tmp/easytier-web上传成功重启一次插件才生效")
end
end
if string.sub(meta.file, -7) == ".tar.gz" then
local file_path = dir .. meta.file
@ -574,15 +579,20 @@ http.setfilehandler(
local extracted_dir = "/tmp/easytier-linux-*/"
os.execute("mv " .. extracted_dir .. "easytier-cli /tmp/easytier-cli")
os.execute("mv " .. extracted_dir .. "easytier-core /tmp/easytier-core")
os.execute("mv " .. extracted_dir .. "easytier-core /tmp/easytier-web")
if nixio.fs.access("/tmp/easytier-cli") then
um.value = um.value .. "\n" .. translate("-程序/tmp/easytier-cli上传成功重启一次插件才生效")
end
if nixio.fs.access("/tmp/easytier-core") then
um.value = um.value .. "\n" .. translate("-程序/tmp/easytier-core上传成功重启一次插件才生效")
end
if nixio.fs.access("/tmp/easytier-web") then
um.value = um.value .. "\n" .. translate("-程序/tmp/easytier-web上传成功重启一次插件才生效")
end
end
os.execute("chmod +x /tmp/easytier-core")
os.execute("chmod +x /tmp/easytier-cli")
os.execute("chmod +x /tmp/easytier-cli")
os.execute("chmod +x /tmp/easytier-web")
end
end
)
@ -590,4 +600,57 @@ if luci.http.formvalue("upload") then
local f = luci.http.formvalue("ulfile")
end
-- easytier-web
s=m:section(TypedSection, "easytierweb", translate("自建Web服务器"))
s.addremove=false
s.anonymous=true
switch = s:option(Flag, "enabled", translate("Enable"))
switch.rmempty = false
btncq = s:option(Button, "btncq", translate("重启"))
btncq.inputtitle = translate("重启")
btncq.description = translate("在没有修改参数的情况下快速重新启动一次")
btncq.inputstyle = "apply"
btncq:depends("enabled", "1")
btncq.write = function()
luci.sys.call("/etc/init.d/easytier restart >/dev/null 2>&1 &") -- 执行重启命令
end
db_path = s:option(Value, "db_path", translate("数据库文件路径"),
translate(" sqlite3 数据库文件路径, 用于保存所有数据。( -d 参数)"))
db_path.default = "/etc/easytier/et.db"
db_path:depends("enabled", "1")
web_protocol = s:option(ListValue, "web_protocol", translate("监听协议"),
translate("配置服务器的监听协议,用于被 easytier-core 连接。( -p 参数)"))
web_protocol.default = "udp"
web_protocol:value("udp",translate("UDP"))
web_protocol:value("tcp",translate("TCP"))
web_protocol:depends("enabled", "1")
web_port = s:option(Value, "web_port", translate("服务端口"),
translate("配置服务器的监听端口,用于被 easytier-core 连接。( -c 参数)"))
web_port.datatype = "range(1,65535)"
web_port.placeholder = "22020"
web_port.default = "22020"
web_port:depends("enabled", "1")
api_port = s:option(Value, "api_port", translate("API端口"),
translate("restful 服务器的监听端口,作为 ApiHost 并被 web 前端使用。( -a 参数)"))
api_port.datatype = "range(1,65535)"
api_port.placeholder = "11211"
api_port.default = "11211"
api_port:depends("enabled", "1")
weblog = s:option(ListValue, "weblog", translate("程序日志"),
translate("运行日志在/tmp/easytierweb.log,可在上方日志查看<br>若启动失败,请前往 状态- 系统日志 查看具体启动失败日志<br>详细程度:警告<信息<调试<跟踪"))
weblog.default = "off"
weblog:value("off",translate("关闭"))
weblog:value("warn",translate("警告"))
weblog:value("info",translate("信息"))
weblog:value("debug",translate("调试"))
weblog:value("trace",translate("跟踪"))
weblog:depends("enabled", "1")
return m

View File

@ -0,0 +1,5 @@
f = SimpleForm("easytier")
f.reset = false
f.submit = false
f:append(Template("easytier/easytierweb_log"))
return f

View File

@ -1,16 +1,27 @@
<%
local uci = require 'luci.model.uci'.cursor()
protocol="http://"
%>
<script type="text/javascript">//<![CDATA[
XHR.poll(3, '<%=url([[admin]], [[vpn]], [[easytier]], [[status]])%>', null,
function(x, data) {
var st = document.getElementById('easytier_status');
if (data && st) {
var clientStatus = data.crunning ? "<span style='color:green;'> 运行中</span><img src='https://www.right.com.cn/forum/data/attachment/album/202401/30/081238k459q2d5klacs8rk.gif' width='30px' alt=''>" : "<span style='color:red;'> 未运行</span>";
var etstaContent = data.crunning ? "已运行:" + "<span style='color:#DA70D6;'>" + data.etsta + "</span>" : "";
var etcpuContent = data.crunning ? "<br>" + "CPU占用" + "<span style='color:#6A5ACD;'>" + data.etcpu + "</span>" : "";
var etstaContent = data.crunning ? "已运行:" + "<span style='color:#DA70D6;'>" + data.etsta + "</span>" : "";
var etcpuContent = data.crunning ? "<br>" + "&nbsp;&nbsp;CPU占用" + "<span style='color:#6A5ACD;'>" + data.etcpu + "</span>" : "";
var etramContent = data.crunning ? "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + "&nbsp;&nbsp;&nbsp;&nbsp;内存占用:" + "<span style='color:#0000CD;'>" + data.etram + "</span>" : "";
var ettagContent = data.crunning ? "<br>" + "当前版本:" + "<span style='color:#CD853F;'>" + data.ettag + "</span>" : "";
var ettagContent = data.crunning ? "<br>" + "&nbsp;&nbsp;当前版本:" + "<span style='color:#CD853F;'>" + data.ettag + "</span>" : "";
var etnewtagContent = data.crunning ? "&nbsp;&nbsp;&nbsp;&nbsp;" + "&nbsp;&nbsp;&nbsp;最新版本:" + "<span style='color:#FFA500;'>" + data.etnewtag + "</span>" : "";
st.innerHTML = "<em><b>easytier-core " + clientStatus + etstaContent + etcpuContent + etramContent + ettagContent + etnewtagContent + "</b></em>";
var webStatus = data.wrunning ? "<span style='color:green;'> 运行中</span><img src='https://www.right.com.cn/forum/data/attachment/album/202401/30/081238k459q2d5klacs8rk.gif' width='30px' alt=''>" : "<span style='color:red;'> 未运行</span>";
var etwebstaContent = data.wrunning ? "已运行:" + "<span style='color:#DA70D6;'>" + data.etwebsta + "</span>" : "";
var etwebcpuContent = data.wrunning ? "<br>" + "&nbsp;&nbsp;CPU占用" + "<span style='color:#6A5ACD;'>" + data.etwebcpu + "</span>" : "";
var etwebramContent = data.wrunning ? "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + "&nbsp;&nbsp;&nbsp;&nbsp;内存占用:" + "<span style='color:#0000CD;'>" + data.etwebram + "</span>" : "";
var etwtagContent = data.wrunning ? "<br>" + "&nbsp;&nbsp;当前版本:" + "<span style='color:#CD853F;'>" + data.ettag + "</span>" : "";
var etwnewtagContent = data.wrunning ? "&nbsp;&nbsp;&nbsp;&nbsp;" + "&nbsp;&nbsp;&nbsp;最新版本:" + "<span style='color:#FFA500;'>" + data.etnewtag + "</span>" : "";
var etwebContent = "&nbsp;&nbsp;&nbsp;" + "<input class=\"cbi-button cbi-button-reload mar-10\" type=\"button\" value=\" <%:Web 控制台%> \" onclick=\"window.open('<%=protocol%>" + window.location.hostname + "/" + "et.html" + "')\"/>";
st.innerHTML = "<em><b>easytier-core " + clientStatus + etstaContent + etcpuContent + etramContent + ettagContent + etnewtagContent + "</b></em><br><br><em><b>easytier-web " + webStatus + etwebstaContent + etwebcpuContent + etwebramContent + etwtagContent + etwnewtagContent + etwebContent + "</b></em>";
}
}
);

View File

@ -0,0 +1,33 @@
<%
local dsp = require "luci.dispatcher"
-%>
<script type="text/javascript">
//<![CDATA[
function clearlog(btn) {
XHR.get('<%=dsp.build_url("admin/vpn/easytier/clear_wlog")%>', null,
function(x, data) {
if(x && x.status == 200) {
var log_textarea = document.getElementById('log_textarea');
log_textarea.innerHTML = "";
log_textarea.scrollTop = log_textarea.scrollHeight;
}
}
);
}
XHR.poll(2, '<%=dsp.build_url("admin/vpn/easytier/get_wlog")%>', null,
function(x, data) {
if(x && x.status == 200 && document.getElementById("checkbox1").checked == true) {
var log_textarea = document.getElementById('log_textarea');
log_textarea.innerHTML = x.responseText;
log_textarea.scrollTop = log_textarea.scrollHeight;
}
}
);
//]]>
</script>
<fieldset class="cbi-section" id="_log_fieldset">
<input type="checkbox" id="checkbox1" style="vertical-align:middle;height: auto;"checked><%:自动刷新%></input>
<input class="cbi-button cbi-input-remove" type="button" onclick="clearlog()" value="<%:清除日志%>" />
<textarea id="log_textarea" class="cbi-input-textarea" style="width: 100%;margin-top: 10px;" data-update="change" rows="30" wrap="off" readonly="readonly"></textarea>
</fieldset>

View File

@ -2,3 +2,6 @@
config easytier
option enabled '0'
option easytierbin '/usr/bin/easytier-core'
config easytierweb
option enabled '0'

View File

@ -92,7 +92,7 @@ check_bin() {
tag="$( curl -k --connect-timeout 3 --user-agent "$user_agent" https://api.github.com/repos/EasyTier/EasyTier/releases/latest 2>&1 | grep 'tag_name' | cut -d\" -f4 )"
[ -z "$tag" ] && tag="$( curl -Lk --connect-timeout 3 --user-agent "$user_agent" -s https://api.github.com/repos/EasyTier/EasyTier/releases/latest 2>&1 | grep 'tag_name' | cut -d\" -f4 )"
fi
[ -z "$tag"] && tag=v2.1.1
[ -z "$tag"] && tag=v2.2.4
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 未找到程序 $easytierbin 开始在线下载${tag},下载较慢耐心等候" >>/tmp/easytier.log
mkdir -p "$path"
for proxy in $proxys ; do
@ -267,6 +267,7 @@ get_etconfig() {
bind_device="$(uci -q get easytier.@easytier[0].bind_device || echo 1)"
kcp_proxy="$(uci -q get easytier.@easytier[0].kcp_proxy || echo 0)"
kcp_input="$(uci -q get easytier.@easytier[0].kcp_input || echo 0)"
proxy_forward="$(uci -q get easytier.@easytier[0].proxy_forward || echo 0)"
}
set_firewall() {
@ -378,7 +379,6 @@ set_firewall() {
}
start_et() {
[ "$(uci -q get easytier.@easytier[0].enabled)" = "1" ] || return 1
easytierbin="$(uci -q get easytier.@easytier[0].easytierbin)"
[ -z "$easytierbin" ] && easytierbin="/usr/bin/easytier-core" && uci -q set easytier.@easytier[0].easytierbin=/usr/bin/easytier-core
etcmd="$(uci -q get easytier.@easytier[0].etcmd)"
@ -390,127 +390,133 @@ start_et() {
ver="$($easytierbin -V | awk {'print $2'} | tr -d '~')"
[ ! -z "$ver" ] && echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : ${easytierbin}当前版本号-${ver} " >>/tmp/easytier.log
pgrep -f easytier_check | xargs kill -9 >/dev/null 2>&1
pgrep -f easytier_checklog | xargs kill -9 >/dev/null 2>&1
ps | grep 'easytier-core' | grep -v grep | awk '{print $1}' | xargs kill >/dev/null 2>&1
ps | grep 'easytier-core' | grep -v grep | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1
if [ "$etcmd" = "config" ] ; then
check_config
else
get_etconfig
procd_open_instance
procd_set_param command "$easytierbin"
if [ "$etcmd" = "etcmd" ] ; then
[ -z "$network_name" ] || procd_append_param command --network-name "$network_name"
[ -z "$network_secret" ] || procd_append_param command --network-secret "$network_secret"
[ -z "$ipaddr" ] || procd_append_param command -i "$ipaddr"
[ "$ip_dhcp" = "0" ] || procd_append_param command -d
if [ ! -z "$peeradd" ] ; then
if [[ "$(grep "list peeradd" /etc/config/easytier | awk '{print $3}' | wc -l ) " -eq 1 ]]; then
procd_append_param command -p "$peeradd"
else
for peeraddr in $(cat /etc/config/easytier | grep 'list peeradd' | awk -F 'list peeradd' '{print $2}' | sed "s/'/\n/g" | tr -d " ' "); do
procd_append_param command -p "$peeraddr"
done
fi
fi
if [ ! -z "$proxy_network" ] ; then
if [[ "$(grep "list proxy_network" /etc/config/easytier | awk '{print $3}' | wc -l ) " -eq 1 ]]; then
procd_append_param command -n "$proxy_network"
else
for proxy_networks in $(cat /etc/config/easytier | grep 'list proxy_network' | awk -F 'list proxy_network' '{print $2}' | sed "s/'/\n/g" | tr -d " ' "); do
procd_append_param command -n "$proxy_networks"
done
fi
fi
if [ ! -z "$exit_nodes" ] ; then
if [[ "$(grep "list exit_nodes" /etc/config/easytier | awk '{print $3}' | wc -l ) " -eq 1 ]]; then
procd_append_param command --exit-nodes "$exit_nodes"
else
for exit_nodeadds in $(cat /etc/config/easytier | grep 'list exit_nodes' | awk -F 'list exit_nodes' '{print $2}' | sed "s/'/\n/g" | tr -d " ' "); do
procd_append_param command --exit-nodes "$exit_nodeadds"
done
fi
fi
if [ ! -z "$manual_routes" ] ; then
if [[ "$(grep "list manual_routes" /etc/config/easytier | awk '{print $3}' | wc -l ) " -eq 1 ]]; then
procd_append_param command --manual-routes "$manual_routes"
else
for manual_routeadds in $(cat /etc/config/easytier | grep 'list manual_routes' | awk -F 'list manual_routes' '{print $2}' | sed "s/'/\n/g" | tr -d " ' "); do
procd_append_param command --manual-routes "$manual_routeadds"
done
fi
fi
if [ ! -z "$whitelist" ] ; then
if [[ "$(grep "list whitelist" /etc/config/easytier | awk '{print $3}' | wc -l ) " -eq 1 ]]; then
procd_append_param command --relay-network-whitelist "$whitelist"
else
for whitelists in $(cat /etc/config/easytier | grep 'list whitelist' | awk -F 'list whitelist' '{print $2}' | sed "s/'/\n/g" | tr -d " ' "); do
procd_append_param command --relay-network-whitelist "$whitelists"
done
fi
fi
if [ ! -z "$mapped_listeners" ] ; then
if [[ "$(grep "list mapped_listeners" /etc/config/easytier | awk '{print $3}' | wc -l ) " -eq 1 ]]; then
procd_append_param command --mapped-listeners "$mapped_listeners"
else
for mapped_listener in $(cat /etc/config/easytier | grep 'list mapped_listeners' | awk -F 'list whitelist' '{print $2}' | sed "s/'/\n/g" | tr -d " ' "); do
procd_append_param command --mapped-listeners "$mapped_listener"
done
fi
fi
[ -z "$rpc_portal" ] || procd_append_param command -r "$rpc_portal"
[ -z "$tcp_port" ] || procd_append_param command -l "tcp:$tcp_port"
[ -z "$tcp_port" ] || procd_append_param command -l "udp:$tcp_port"
[ -z "$ws_port" ] || procd_append_param command -l "ws:$ws_port"
[ -z "$wss_port" ] || procd_append_param command -l "wss:$wss_port"
[ -z "$wg_port" ] || procd_append_param command -l "wg:$wg_port"
if [ "$listener6" = "1" ] ; then
if [ -z "$tcp_port" ] && [ -z "$ws_port" ] && [ -z "$wss_port" ] && [ -z "$wg_port" ] ; then
tcp_port="11010"
ws_port="11011"
wss_port="11012"
wg_port="11011"
fi
[ -z "$tcp_port" ] || procd_append_param command -l "tcp://[::]:$tcp_port"
[ -z "$tcp_port" ] || procd_append_param command -l "udp://[::]:$tcp_port"
[ -z "$ws_port" ] || procd_append_param command -l "ws://[::]:$ws_port"
[ -z "$wss_port" ] || procd_append_param command -l "wss://[::]:$wss_port"
[ -z "$wg_port" ] || procd_append_param command -l "wg://[::]:$wg_port"
fi
[ -z "$external_node" ] || procd_append_param command -e "$external_node"
[ "$listenermode" = "ON" ] || procd_append_param command --no-listener
[ -z "$desvice_name" ] || procd_append_param command --hostname "$desvice_name"
[ -z "$instance_name" ] || procd_append_param command -m "$instance_name"
[ -z "$vpn_portal" ] || procd_append_param command --vpn-portal "$vpn_portal"
[ -z "$mtu" ] || procd_append_param command --mtu "$mtu"
[ "$default_protocol" = "-" ] || procd_append_param command --default-protocol "$default_protocol"
[ -z "$tunname" ] || procd_append_param command --dev-name "$tunname"
[ "$disable_encryption" = "0" ] || procd_append_param command -u
[ "$multi_thread" = "0" ] || procd_append_param command --multi-thread
[ "$no_tun" = "0" ] || procd_append_param command --no-tun
[ "$smoltcp" = "0" ] || procd_append_param command --use-smoltcp
[ "$disable_ipv6" = "0" ] || procd_append_param command --disable-ipv6
[ "$latency_first" = "0" ] || procd_append_param command --latency-first
[ "$exit_node" = "0" ] || procd_append_param command --enable-exit-node
[ "$log" = "off" ] || procd_append_param command --file-log-level "$log"
[ "$log" = "off" ] || procd_append_param command --file-log-dir "/tmp"
[ "$log" = "off" ] && procd_append_param command --file-log-level "off"
[ "$disable_p2p" = "0" ] || procd_append_param command --disable-p2p
[ "$disable_udp" = "0" ] || procd_append_param command --disable-udp-hole-punching
[ "$relay_all" = "0" ] || procd_append_param command --relay-all-peer-rpc
[ -z "$socks_port" ] || procd_append_param command --socks5 "$socks_port"
[ "$comp" = "none" ] || procd_append_param command --compression "$comp"
[ "$bind_device" = "0" ] || procd_append_param command --bind-device true
[ "$bind_device" = "1" ] || procd_append_param command --bind-device false
[ "$kcp_proxy" = "0" ] || procd_append_param command --enable-kcp-proxy
[ "$kcp_input" = "0" ] || procd_append_param command --disable-kcp-input
fi
if [ "$etcmd" = "web" ] ; then
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 运行 ${easytierbin} -w ${web_config}" >>/tmp/easytier.log
[ -z "$web_config" ] || procd_append_param command -w "$web_config"
fi
if [ "$etcmd" = "config" ] ; then
check_config
else
get_etconfig
procd_open_instance "easytier_core"
procd_set_param command "$easytierbin"
if [ "$etcmd" = "etcmd" ] ; then
[ -z "$network_name" ] || procd_append_param command --network-name "$network_name"
[ -z "$network_secret" ] || procd_append_param command --network-secret "$network_secret"
[ -z "$ipaddr" ] || procd_append_param command -i "$ipaddr"
[ "$ip_dhcp" = "0" ] || procd_append_param command -d
if [ ! -z "$peeradd" ] ; then
if [[ "$(grep "list peeradd" /etc/config/easytier | awk '{print $3}' | wc -l ) " -eq 1 ]]; then
procd_append_param command -p "$peeradd"
else
for peeraddr in $(cat /etc/config/easytier | grep 'list peeradd' | awk -F 'list peeradd' '{print $2}' | sed "s/'/\n/g" | tr -d " ' "); do
procd_append_param command -p "$peeraddr"
done
fi
fi
if [ ! -z "$proxy_network" ] ; then
if [[ "$(grep "list proxy_network" /etc/config/easytier | awk '{print $3}' | wc -l ) " -eq 1 ]]; then
procd_append_param command -n "$proxy_network"
else
for proxy_networks in $(cat /etc/config/easytier | grep 'list proxy_network' | awk -F 'list proxy_network' '{print $2}' | sed "s/'/\n/g" | tr -d " ' "); do
procd_append_param command -n "$proxy_networks"
done
fi
fi
if [ ! -z "$exit_nodes" ] ; then
if [[ "$(grep "list exit_nodes" /etc/config/easytier | awk '{print $3}' | wc -l ) " -eq 1 ]]; then
procd_append_param command --exit-nodes "$exit_nodes"
else
for exit_nodeadds in $(cat /etc/config/easytier | grep 'list exit_nodes' | awk -F 'list exit_nodes' '{print $2}' | sed "s/'/\n/g" | tr -d " ' "); do
procd_append_param command --exit-nodes "$exit_nodeadds"
done
fi
fi
if [ ! -z "$manual_routes" ] ; then
if [[ "$(grep "list manual_routes" /etc/config/easytier | awk '{print $3}' | wc -l ) " -eq 1 ]]; then
procd_append_param command --manual-routes "$manual_routes"
else
for manual_routeadds in $(cat /etc/config/easytier | grep 'list manual_routes' | awk -F 'list manual_routes' '{print $2}' | sed "s/'/\n/g" | tr -d " ' "); do
procd_append_param command --manual-routes "$manual_routeadds"
done
fi
fi
if [ ! -z "$whitelist" ] ; then
if [[ "$(grep "list whitelist" /etc/config/easytier | awk '{print $3}' | wc -l ) " -eq 1 ]]; then
procd_append_param command --relay-network-whitelist "$whitelist"
else
for whitelists in $(cat /etc/config/easytier | grep 'list whitelist' | awk -F 'list whitelist' '{print $2}' | sed "s/'/\n/g" | tr -d " ' "); do
procd_append_param command --relay-network-whitelist "$whitelists"
done
fi
fi
if [ ! -z "$mapped_listeners" ] ; then
if [[ "$(grep "list mapped_listeners" /etc/config/easytier | awk '{print $3}' | wc -l ) " -eq 1 ]]; then
procd_append_param command --mapped-listeners "$mapped_listeners"
else
for mapped_listener in $(cat /etc/config/easytier | grep 'list mapped_listeners' | awk -F 'list whitelist' '{print $2}' | sed "s/'/\n/g" | tr -d " ' "); do
procd_append_param command --mapped-listeners "$mapped_listener"
done
fi
fi
[ -z "$rpc_portal" ] || procd_append_param command -r "$rpc_portal"
[ -z "$tcp_port" ] || procd_append_param command -l "tcp:$tcp_port"
[ -z "$tcp_port" ] || procd_append_param command -l "udp:$tcp_port"
[ -z "$ws_port" ] || procd_append_param command -l "ws:$ws_port"
[ -z "$wss_port" ] || procd_append_param command -l "wss:$wss_port"
[ -z "$wg_port" ] || procd_append_param command -l "wg:$wg_port"
if [ "$listener6" = "1" ] ; then
if [ -z "$tcp_port" ] && [ -z "$ws_port" ] && [ -z "$wss_port" ] && [ -z "$wg_port" ] ; then
tcp_port="11010"
ws_port="11011"
wss_port="11012"
wg_port="11011"
fi
[ -z "$tcp_port" ] || procd_append_param command -l "tcp://[::]:$tcp_port"
[ -z "$tcp_port" ] || procd_append_param command -l "udp://[::]:$tcp_port"
[ -z "$ws_port" ] || procd_append_param command -l "ws://[::]:$ws_port"
[ -z "$wss_port" ] || procd_append_param command -l "wss://[::]:$wss_port"
[ -z "$wg_port" ] || procd_append_param command -l "wg://[::]:$wg_port"
fi
[ -z "$external_node" ] || procd_append_param command -e "$external_node"
[ "$listenermode" = "ON" ] || procd_append_param command --no-listener
[ -z "$desvice_name" ] || procd_append_param command --hostname "$desvice_name"
[ -z "$instance_name" ] || procd_append_param command -m "$instance_name"
[ -z "$vpn_portal" ] || procd_append_param command --vpn-portal "$vpn_portal"
[ -z "$mtu" ] || procd_append_param command --mtu "$mtu"
[ "$default_protocol" = "-" ] || procd_append_param command --default-protocol "$default_protocol"
[ -z "$tunname" ] || procd_append_param command --dev-name "$tunname"
[ "$disable_encryption" = "0" ] || procd_append_param command -u
[ "$multi_thread" = "0" ] || procd_append_param command --multi-thread
[ "$no_tun" = "0" ] || procd_append_param command --no-tun
[ "$smoltcp" = "0" ] || procd_append_param command --use-smoltcp
[ "$disable_ipv6" = "0" ] || procd_append_param command --disable-ipv6
[ "$latency_first" = "0" ] || procd_append_param command --latency-first
[ "$exit_node" = "0" ] || procd_append_param command --enable-exit-node
[ "$log" = "off" ] || procd_append_param command --file-log-level "$log"
[ "$log" = "off" ] || procd_append_param command --file-log-dir "/tmp"
[ "$log" = "off" ] && procd_append_param command --file-log-level "off"
[ "$disable_p2p" = "0" ] || procd_append_param command --disable-p2p
[ "$disable_udp" = "0" ] || procd_append_param command --disable-udp-hole-punching
[ "$relay_all" = "0" ] || procd_append_param command --relay-all-peer-rpc
[ -z "$socks_port" ] || procd_append_param command --socks5 "$socks_port"
[ "$comp" = "none" ] || procd_append_param command --compression "$comp"
[ "$bind_device" = "0" ] || procd_append_param command --bind-device true
[ "$bind_device" = "1" ] || procd_append_param command --bind-device false
[ "$kcp_proxy" = "0" ] || procd_append_param command --enable-kcp-proxy
[ "$kcp_input" = "0" ] || procd_append_param command --disable-kcp-input
[ "$proxy_forward" = "0" ] || procd_append_param command --proxy-forward-by-system
fi
if [ "$etcmd" = "web" ] ; then
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 运行 ${easytierbin} -w ${web_config}" >>/tmp/easytier.log
[ -f /etc/easytier/et_machine_id ] || touch /etc/easytier/et_machine_id
idpath=$(dirname "$easytierbin")
[ -f "${idpath}/et_machine_id" ] || ln -sf /etc/easytier/et_machine_id ${idpath}/et_machine_id
[ -z "$web_config" ] || procd_append_param command -w "$web_config"
[ "$log" = "off" ] || procd_append_param command --file-log-level "$log"
[ "$log" = "off" ] || procd_append_param command --file-log-dir "/tmp"
fi
fi
fi
[ ! -z "$instance_name" ] && ln -sf /tmp/easytier-${instance_name}.${date_time}.log /tmp/easytier.log
procd_set_param limits core="unlimited"
@ -532,13 +538,13 @@ start_et() {
uci set firewall.easytier_socks5.enabled="1"
fi
if [ "$listenermode" = "ON" ] || [ "$etcmd" = "web" ] ; then
if [ -z "$tcp_port" ] && [ -z "$ws_port" ] && [ -z "$wss_port" ] && [ -z "$wg_port" ] ; then
tcp_port="11010"
ws_port="11011"
wss_port="11012"
wg_port="11011"
fi
set_firewall
if [ -z "$tcp_port" ] && [ -z "$ws_port" ] && [ -z "$wss_port" ] && [ -z "$wg_port" ] ; then
tcp_port="11010"
ws_port="11011"
wss_port="11012"
wg_port="11011"
fi
set_firewall
fi
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 重载防火墙和网络配置...会出现短暂断网现象... " >>/tmp/easytier.log
[ -n "$(uci changes network)" ] && uci commit network && /etc/init.d/network reload >/dev/null 2>&1
@ -546,6 +552,12 @@ start_et() {
[ -z "$proxy_network" ] || sysctl -w net.ipv4.ip_forward=1 >/dev/null 2>&1
[ ! -z "$checkip" ] && check
echo `date +%s` > /tmp/easytier_time
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 启动完成,若启动失败,请前往 状态 - 系统日志 找到easytier相关的字眼查看启动失败的原因 " >>/tmp/easytier.log
}
start_log() {
if [ "$(uci -q get easytier.@easytierweb[0].enabled)" = "1" ] || [ "$(uci -q get easytier.@easytier[0].enabled)" = "1" ] ; then
pgrep -f easytier_checklog | xargs kill -9 >/dev/null 2>&1
echo "" >/tmp/easytier_checklog
cat > /tmp/easytier_checklog<<'EOF'
@ -555,7 +567,10 @@ while true; do
sleep 120
if [ "$(find /tmp -type f -name "easytier-*.*.log" -size +2000k -exec sh -c 'echo -n > {}; echo found' \;)" = "found" ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 日志文件超过2M 清空... " >/tmp/easytier.log
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : core日志文件超过2M 清空... " >/tmp/easytier.log
fi
if [ "$(find /tmp -type f -name "easytier.*.log" -size +2000k -exec sh -c 'echo -n > {}; echo found' \;)" = "found" ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : web日志文件超过2M 清空... " >/tmp/easytierweb.log
fi
done
EOF
@ -564,25 +579,85 @@ EOF
procd_set_param respawn
procd_set_param command /tmp/easytier_checklog
procd_close_instance
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 启动完成,若启动失败,请前往 状态 - 系统日志 找到easytier相关的字眼查看启动失败的原因 " >>/tmp/easytier.log
else
return 1
fi
}
start_web() {
webbin="$(uci -q get easytier.@easytier[0].webbin)"
if [ -f "$webbin" ] ; then
[ ! -x "$webbin" ] && chmod +x "$webbin"
fi
if [ ! -f "$webbin" ] || [ "$($webbin -h 2>&1 | wc -l)" -lt 3 ] ; then
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 未找到${webbin}程序或程序不适配当前架构,请上传安装后再启动! " >>/tmp/easytierweb.log
return 1
fi
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 开始启动${webbin} " >>/tmp/easytierweb.log
db_path="$(uci -q get easytier.@easytierweb[0].db_path)"
web_protocol="$(uci -q get easytier.@easytierweb[0].web_protocol)"
web_port="$(uci -q get easytier.@easytierweb[0].web_port)"
api_port="$(uci -q get easytier.@easytierweb[0].api_port)"
weblog="$(uci -q get easytier.@easytierweb[0].weblog)"
procd_open_instance "easytier_web"
procd_set_param command "$webbin"
[ -z "$db_path" ] || procd_append_param command -d "$db_path"
[ -z "$web_protocol" ] || procd_append_param command -p "$web_protocol"
[ -z "$web_port" ] || procd_append_param command -c "$web_port"
[ -z "$api_port" ] || procd_append_param command -a "$api_port"
if [ "$weblog" != "off" ] ; then
procd_append_param command --file-log-dir /tmp
procd_append_param command --file-log-level "$weblog"
fi
procd_set_param stdout 1
procd_set_param stderr 1
procd_set_param respawn
procd_close_instance
if [ ! -z "$web_port" ] ; then
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 添加防火墙规则 easytier_web 放行服务端口 ${web_port} " >>/tmp/easytier.log
uci -q delete firewall.easytier_webserver
uci set firewall.easytier_webserver=rule
uci set firewall.easytier_webserver.name="easytier_webserver"
uci set firewall.easytier_webserver.target="ACCEPT"
uci set firewall.easytier_webserver.src="wan"
uci set firewall.easytier_webserver.proto="all"
uci set firewall.easytier_webserver.dest_port="$web_port"
uci set firewall.easytier_webserver.enabled="1"
fi
if [ ! -z "$api_port" ] ; then
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 添加防火墙规则 easytier_web 放行API端口 ${api_port} " >>/tmp/easytier.log
uci -q delete firewall.easytier_webapi
uci set firewall.easytier_webapi=rule
uci set firewall.easytier_webapi.name="easytier_webapi"
uci set firewall.easytier_webapi.target="ACCEPT"
uci set firewall.easytier_webapi.src="wan"
uci set firewall.easytier_webapi.proto="all"
uci set firewall.easytier_webapi.dest_port="$api_port"
uci set firewall.easytier_webapi.enabled="1"
fi
echo `date +%s` > /tmp/easytierweb_time
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 启动完成,若启动失败,请前往 状态 - 系统日志 找到easytier相关的字眼查看启动失败的原因 " >>/tmp/easytierweb.log
}
start_service() {
echo "start.."
date_time=$(TZ='Asia/Shanghai' date +'%Y-%m-%d')
ecmd=$(uci -q get easytier.@easytier[0].etcmd)
if [ "$ecmd" = "etcmd" ] ; then
if [ "$ecmd" = "etcmd" ] || [ "$ecmd" = "web" ] ; then
ins_name=$(uci -q get easytier.@easytier[0].instance_name)
else
else
ins_name=$(cat /etc/easytier/config.toml | grep "instance_name =" | awk '{print $3}'| tr -d '" ')
fi
fi
if [ ! -z "$ins_name" ] ; then
touch /tmp/easytier-${ins_name}.${date_time}.log
ln -sf /tmp/easytier-${ins_name}.${date_time}.log /tmp/easytier.log
else
touch /tmp/easytier-default.${date_time}.log
ln -sf /tmp/easytier-default.${date_time}.log /tmp/easytier.log
fi
fi
touch /tmp/easytier.${date_time}.log
ln -sf /tmp/easytier.${date_time}.log /tmp/easytierweb.log
cputype=$(uname -ms | tr ' ' '_' | tr '[A-Z]' '[a-z]')
[ -n "$(echo $cputype | grep -E "linux.*armv.*")" ] && cpucore="arm"
[ -n "$(echo $cputype | grep -E "linux.*armv7.*")" ] && [ -n "$(cat /proc/cpuinfo | grep vfp)" ] && cpucore="armv7"
@ -594,43 +669,65 @@ start_service() {
[ "$mipstype" = "0" ] && cpucore="mips" || cpucore="mipsel"
fi
echo "" >/tmp/easytier.log
echo "" >/tmp/easytierweb.log
#test -z "`opkg list-installed|grep curl`" && echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 缺少curl插件" >/tmp/easytier.log
[ ! -s /usr/lib/opkg/info/unzip.list ] && echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 缺少unzip插件" >/tmp/easytier.log
start_et easytier
[ "$(uci -q get easytier.@easytier[0].enabled)" = "1" ] && start_et easytier
if [ -z "$(uci -q get easytier.@easytierweb[0].enabled)" ] ; then
echo "config easytierweb" >>/etc/config/easytier
echo " option enabled '0'" >>/etc/config/easytier
fi
[ "$(uci -q get easytier.@easytierweb[0].enabled)" = "1" ] && start_web
start_log
if curl -Lks -o /tmp/easytier_web.html https://easytier.cn/web || \
curl -Lk -o /tmp/easytier_web.html https://easytier.cn/web/index.html || \
wget --no-check-certificate -q -O /tmp/easytier_web.html https://easytier.cn/web || \
wget --no-check-certificate -q -O /tmp/easytier_web.html https://easytier.cn/web/index.html; then
[ ! -L /www/et.html ] && ln -sf /tmp/easytier_web.html /www/et.html
fi
}
stop_service() {
echo "stop.."
[ "$(uci -q get easytier.@easytier[0].enabled)" = "0" ] || return 0
pgrep -f easytier_check | xargs kill -9 >/dev/null 2>&1
pgrep -f easytier_checklog | xargs kill -9 >/dev/null 2>&1
ps | grep 'easytier-core' | grep -v grep | awk '{print $1}' | xargs kill >/dev/null 2>&1
ps | grep 'easytier-core' | grep -v grep | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1
uci -q delete network.EasyTier >/dev/null 2>&1
uci -q delete firewall.easytierzone >/dev/null 2>&1
uci -q delete firewall.easytierfwlan >/dev/null 2>&1
uci -q delete firewall.easytierfwwan >/dev/null 2>&1
uci -q delete firewall.lanfweasytier >/dev/null 2>&1
uci -q delete firewall.wanfweasytier >/dev/null 2>&1
uci -q delete firewall.easytier_udp >/dev/null 2>&1
uci -q delete firewall.easytier_tcp_udp >/dev/null 2>&1
uci -q delete firewall.easytier_wss >/dev/null 2>&1
uci -q delete firewall.easytier_ws >/dev/null 2>&1
uci -q delete firewall.easytier_wg >/dev/null 2>&1
uci -q delete firewall.easytier_wireguard >/dev/null 2>&1
uci -q delete firewall.easytier_socks5 >/dev/null 2>&1
uci -q delete firewall.easytier_v6tcp >/dev/null 2>&1
uci -q delete firewall.easytier_v6udp >/dev/null 2>&1
uci -q delete firewall.easytier_v6ws >/dev/null 2>&1
uci -q delete firewall.easytier_v6wss >/dev/null 2>&1
uci -q delete firewall.easytier_v6wg >/dev/null 2>&1
[ -n "$(uci changes network)" ] && uci commit network && /etc/init.d/network reload >/dev/null 2>&1
[ -n "$(uci changes firewall)" ] && uci commit firewall && /etc/init.d/firewall reload >/dev/null 2>&1
rm -rf /tmp/easytier-cli_peer /tmp/easytier-cli_connector /tmp/easytier-cli_stun /tmp/easytier-cli_route >/dev/null 2>&1
rm -rf /tmp/easytier-cli_peer-center /tmp/easytier-cli_vpn-portal /tmp/easytier_cmd /tmp/easytier-cli_node >/dev/null 2>&1
rm -rf /tmp/easytier-*.* /tmp/easytier.log >/dev/null 2>&1
rm -rf /tmp/easytiernew.tag /tmp/easytier.tag >/dev/null 2>&1
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 停止运行" >>/tmp/easytier.log
if [ "$(uci -q get easytier.@easytier[0].enabled)" = "0" ] ; then
pgrep -f easytier_check | xargs kill -9 >/dev/null 2>&1
ps | grep 'easytier-core' | grep -v grep | awk '{print $1}' | xargs kill >/dev/null 2>&1
ps | grep 'easytier-core' | grep -v grep | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1
uci -q delete network.EasyTier >/dev/null 2>&1
uci -q delete firewall.easytierzone >/dev/null 2>&1
uci -q delete firewall.easytierfwlan >/dev/null 2>&1
uci -q delete firewall.easytierfwwan >/dev/null 2>&1
uci -q delete firewall.lanfweasytier >/dev/null 2>&1
uci -q delete firewall.wanfweasytier >/dev/null 2>&1
uci -q delete firewall.easytier_udp >/dev/null 2>&1
uci -q delete firewall.easytier_tcp_udp >/dev/null 2>&1
uci -q delete firewall.easytier_wss >/dev/null 2>&1
uci -q delete firewall.easytier_ws >/dev/null 2>&1
uci -q delete firewall.easytier_wg >/dev/null 2>&1
uci -q delete firewall.easytier_wireguard >/dev/null 2>&1
uci -q delete firewall.easytier_socks5 >/dev/null 2>&1
uci -q delete firewall.easytier_v6tcp >/dev/null 2>&1
uci -q delete firewall.easytier_v6udp >/dev/null 2>&1
uci -q delete firewall.easytier_v6ws >/dev/null 2>&1
uci -q delete firewall.easytier_v6wss >/dev/null 2>&1
uci -q delete firewall.easytier_v6wg >/dev/null 2>&1
[ -n "$(uci changes network)" ] && uci commit network && /etc/init.d/network reload >/dev/null 2>&1
[ -n "$(uci changes firewall)" ] && uci commit firewall && /etc/init.d/firewall reload >/dev/null 2>&1
rm -rf /tmp/easytier-cli_peer /tmp/easytier-cli_connector /tmp/easytier-cli_stun /tmp/easytier-cli_route >/dev/null 2>&1
rm -rf /tmp/easytier-cli_peer-center /tmp/easytier-cli_vpn-portal /tmp/easytier_cmd /tmp/easytier-cli_node >/dev/null 2>&1
rm -rf /tmp/easytier-*.* /tmp/easytier.log >/dev/null 2>&1
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : easytier-core 停止运行" >>/tmp/easytier.log
fi
if [ "$(uci -q get easytier.@easytierweb[0].enabled)" = "0" ] ; then
ps | grep 'easytier-web' | grep -v grep | awk '{print $1}' | xargs kill >/dev/null 2>&1
ps | grep 'easytier-web' | grep -v grep | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1
uci -q delete firewall.easytier_webserver
uci -q delete firewall.easytier_webapi
fi
if [ "$(uci -q get easytier.@easytier[0].enabled)" = "0" ] && [ "$(uci -q get easytier.@easytierweb[0].enabled)" = "0" ] ; then
pgrep -f easytier_checklog | xargs kill -9 >/dev/null 2>&1
rm -rf /tmp/easytiernew.tag /tmp/easytier.tag >/dev/null 2>&1
fi
}
reload_service() {