mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-02 21:33:56 +08:00
🌴 Sync 2026-03-05 23:51:42
This commit is contained in:
1 parent
97c049ed0a
commit
0acff03804
14253 files changed
+3893239
No files matched your search
@@ -0,0 +1,7 @@
|
||||
|
||||
config easytier
|
||||
option enabled '0'
|
||||
option easytierbin '/usr/bin/easytier-core'
|
||||
option auto_config_interface '1'
|
||||
option auto_config_firewall '1'
|
||||
option interface_netmask '255.0.0.0'
|
||||
@@ -0,0 +1,15 @@
|
||||
instance_name = "default"
|
||||
instance_id = "f9f05421-7c6b-47d6-a67d-4d58d49f51d8"
|
||||
dhcp = true
|
||||
listeners = []
|
||||
exit_nodes = []
|
||||
rpc_portal = "0.0.0.0:15888"
|
||||
|
||||
[network_identity]
|
||||
network_name = "mynetwork"
|
||||
network_secret = "mysecret"
|
||||
|
||||
[[peer]]
|
||||
uri = "tcp://public.easytier.top:11010"
|
||||
|
||||
|
||||
Executable
+825
@@ -0,0 +1,825 @@
|
||||
#!/bin/sh /etc/rc.common
|
||||
# Copyright (C) 2008-2020 OpenWrt.org
|
||||
|
||||
START=99
|
||||
USE_PROCD=1
|
||||
|
||||
# 引入模块化脚本
|
||||
EASYTIER_LIB_DIR="/usr/share/easytier"
|
||||
[ -f "${EASYTIER_LIB_DIR}/utils.sh" ] && . "${EASYTIER_LIB_DIR}/utils.sh"
|
||||
[ -f "${EASYTIER_LIB_DIR}/firewall.sh" ] && . "${EASYTIER_LIB_DIR}/firewall.sh"
|
||||
[ -f "${EASYTIER_LIB_DIR}/download.sh" ] && . "${EASYTIER_LIB_DIR}/download.sh"
|
||||
|
||||
check() {
|
||||
if [ ! -z "$checkip" ]; then
|
||||
echo ' ' >/tmp/easytier_check
|
||||
cat > /tmp/easytier_check <<'EOF'
|
||||
#!/bin/sh
|
||||
time="$(($(uci -q get easytier.@easytier[0].checktime) * 60))"
|
||||
if [ -z "$time" ]; then
|
||||
time=120
|
||||
uci -q set easytier.@easytier[0].checktime=2
|
||||
uci commit easytier
|
||||
fi
|
||||
|
||||
while true; do
|
||||
if [ "$(uci -q get easytier.@easytier[0].enabled)" = "1" ]; then
|
||||
/bin/ping -c 3 223.5.5.5 -w 5 >/dev/null 2>&1
|
||||
if [ "$?" == "0" ]; then
|
||||
if [ ! -z "$(uci -q get easytier.@easytier[0].checkip)" ]; then
|
||||
online=""
|
||||
for ip in $(uci -q get easytier.@easytier[0].checkip); do
|
||||
ms=`echo $(/bin/ping -4 $ip -c 2 -w 4 -q) | awk -F '/' '{print $4}'`
|
||||
[ ! -z "$ms" ] && echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 通断检测:${ip} 延迟:${ms}ms " >>/tmp/easytier.log && online=1
|
||||
[ -z "$ms" ] && echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 通断检测:${ip} 网络中断 " >>/tmp/easytier.log
|
||||
done
|
||||
[ "$online" != "1" ] && echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 通断检测:$(uci -q get easytier.@easytier[0].checkip) 所有指定IP皆无法ping通,重新启动程序! " >>/tmp/easytier.log && /etc/init.d/easytier restart
|
||||
fi
|
||||
else
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 通断检测:检测到互联网未能成功访问,跳过检测 " >>/tmp/easytier.log
|
||||
fi
|
||||
else
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 通断检测:程序已关闭,退出检测 " >>/tmp/easytier.log
|
||||
/etc/init.d/easytier restart
|
||||
break
|
||||
fi
|
||||
sleep $((time))
|
||||
[ "$(du -k /log/easytier.log | cut -f1)" = "1000" ] && echo " " >/tmp/easytier.log
|
||||
done
|
||||
EOF
|
||||
chmod +x /tmp/easytier_check
|
||||
procd_open_instance
|
||||
procd_set_param respawn
|
||||
procd_set_param command /tmp/easytier_check
|
||||
procd_close_instance
|
||||
fi
|
||||
}
|
||||
|
||||
# get_tz 函数已移至 utils.sh,保留兼容性包装
|
||||
# 如果 utils.sh 未加载,使用内联定义
|
||||
if ! type get_tz >/dev/null 2>&1; then
|
||||
get_tz() {
|
||||
SET_TZ=""
|
||||
[ -e "/etc/localtime" ] && return
|
||||
for tzfile in /etc/TZ /var/etc/TZ
|
||||
do
|
||||
[ -e "$tzfile" ] || continue
|
||||
tz="$(cat $tzfile 2>/dev/null)"
|
||||
done
|
||||
[ -z "$tz" ] && return
|
||||
SET_TZ=$tz
|
||||
}
|
||||
fi
|
||||
|
||||
check_bin() {
|
||||
curltest=`which curl`
|
||||
user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
|
||||
#github加速地址,一行一个 你可以自建改为你自己的
|
||||
proxys="
|
||||
https://ghproxy.net/
|
||||
https://gh-proxy.com/
|
||||
https://cdn.gh-proxy.com/
|
||||
https://ghfast.top/
|
||||
"
|
||||
if [ -z "$curltest" ] || [ ! -s "`which curl`" ] ; then
|
||||
tag="$( wget --no-check-certificate -T 5 -t 3 --user-agent "$user_agent" --max-redirect=0 --output-document=- https://api.github.com/repos/EasyTier/EasyTier/releases/latest 2>&1 | grep 'tag_name' | cut -d\" -f4 )"
|
||||
[ -z "$tag" ] && tag="$( wget --no-check-certificate -T 5 -t 3 --user-agent "$user_agent" --quiet --output-document=- https://api.github.com/repos/EasyTier/EasyTier/releases/latest 2>&1 | grep 'tag_name' | cut -d\" -f4 )"
|
||||
else
|
||||
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
|
||||
# 如果获取失败,从 UCI 配置或使用默认版本
|
||||
if [ -z "$tag" ]; then
|
||||
tag=$(uci -q get easytier.@easytier[0].fallback_version)
|
||||
[ -z "$tag" ] && tag="v2.5.0"
|
||||
fi
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 开始在线下载${tag}版本,${proxy}https://github.com/EasyTier/EasyTier/releases/download/${tag}/easytier-linux-${cpucore}-${tag}.zip下载较慢耐心等候" >>/tmp/easytier.log
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 开始在线下载${tag}版本,${proxy}https://github.com/EasyTier/EasyTier/releases/download/${tag}/easytier-linux-${cpucore}-${tag}.zip下载较慢耐心等候" >>/tmp/easytierweb.log
|
||||
mkdir -p "$path"
|
||||
for proxy in $proxys ; do
|
||||
if curl -L -k -o /tmp/easytier.zip --connect-timeout 10 --retry 3 "${proxy}https://github.com/EasyTier/EasyTier/releases/download/${tag}/easytier-linux-${cpucore}-${tag}.zip" || \
|
||||
wget --no-check-certificate --timeout=10 --tries=3 -O /tmp/easytier.zip "${proxy}https://github.com/EasyTier/EasyTier/releases/download/${tag}/easytier-linux-${cpucore}-${tag}.zip" ; then
|
||||
unzip -j -q -o /tmp/easytier.zip -d /tmp
|
||||
chmod +x /tmp/easytier-core /tmp/easytier-cli /tmp/easytier-web /tmp/easytier-web-embed || true
|
||||
if [ "$(uci -q get easytier.@easytier[0].enabled)" = "1" ] ; then
|
||||
mv -f /tmp/easytier-core ${path}/
|
||||
mv -f /tmp/easytier-cli ${path}/
|
||||
chmod +x "$easytierbin"
|
||||
if [ "$($easytierbin -h 2>&1 | wc -l)" -gt 3 ] ; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : ${easytierbin} 下载成功" >>/tmp/easytier.log
|
||||
else
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : ${proxy}https://github.com/EasyTier/EasyTier/releases/download/${tag}/easytier-linux-${cpucore}-${tag}.zip 下载不完整,请手动下载上传程序" >>/tmp/easytier.log
|
||||
fi
|
||||
fi
|
||||
if [ "$(uci -q get easytier.@easytier[0].web_enabled)" = "1" ] ; then
|
||||
mv -f /tmp/easytier-web-embed ${webbin} || true
|
||||
chmod +x "$webbin"
|
||||
if [ "$($webbin -h 2>&1 | wc -l)" -gt 3 ] ; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : ${webbin} 下载成功" >>/tmp/easytierweb.log
|
||||
else
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : ${proxy}https://github.com/EasyTier/EasyTier/releases/download/${tag}/easytier-linux-${cpucore}-${tag}.zip 下载不完整,请手动下载上传程序" >>/tmp/easytierweb.log
|
||||
fi
|
||||
fi
|
||||
|
||||
rm -rf /tmp/easytier.zip
|
||||
break
|
||||
else
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : ${proxy}https://github.com/EasyTier/EasyTier/releases/download/${tag}/easytier-linux-${cpucore}-${tag}.zip 下载失败,请手动下载上传程序" >>/tmp/easytier.log
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : ${proxy}https://github.com/EasyTier/EasyTier/releases/download/${tag}/easytier-linux-${cpucore}-${tag}.zip 下载失败,请手动下载上传程序" >>/tmp/easytierweb.log
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
check_config() {
|
||||
config_file="/etc/easytier/config.toml"
|
||||
instance_name=$(cat $config_file | grep "instance_name =" | awk '{print $3}'| tr -d '" ')
|
||||
socks_port=$(cat $config_file | grep "socks5_proxy" | awk -F ":" '{print $3}'| tr -d '" ')
|
||||
[ -z "$(grep -F 'listeners = []' $config_file)" ] && listenermode="ON"
|
||||
tcp_port=$(grep -oE '"tcp://(\[::\]|0\.0\.0\.0):[0-9]+"' "$config_file" | head -n1 | sed -E 's/.*:([0-9]+)"/\1/')
|
||||
udp_port=$(grep -oE '"udp://(\[::\]|0\.0\.0\.0):[0-9]+"' "$config_file" | head -n1 | sed -E 's/.*:([0-9]+)"/\1/')
|
||||
ws_port=$(grep -oE '"ws://(\[::\]|0\.0\.0\.0):[0-9]+"' "$config_file" | head -n1 | sed -E 's/.*:([0-9]+)"/\1/')
|
||||
wss_port=$(grep -oE '"wss://(\[::\]|0\.0\.0\.0):[0-9]+"' "$config_file" | head -n1 | sed -E 's/.*:([0-9]+)"/\1/')
|
||||
wg_port=$(grep -oE '"wg://(\[::\]|0\.0\.0\.0):[0-9]+"' "$config_file" | head -n1 | sed -E 's/.*:([0-9]+)"/\1/')
|
||||
quic_port=$(grep -oE '"quic://(\[::\]|0\.0\.0\.0):[0-9]+"' "$config_file" | head -n1 | sed -E 's/.*:([0-9]+)"/\1/')
|
||||
tunname=$(grep "dev_name =" "$config_file" | awk '{print $3}' | tr -d "'\", ")
|
||||
proxy_network=$(grep -F '[[proxy_network]]' $config_file)
|
||||
wireguard_port=$(cat $config_file | grep "wireguard_listen = " | awk -F ":" '{print $2}'| tr -d '/", ')
|
||||
log="$(uci -q get easytier.@easytier[0].log || echo off)"
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 检测配置文件可用性 ${easytierbin} --check-config --config-file ${config_file}" >>/tmp/easytier.log
|
||||
${easytierbin} --check-config --config-file ${config_file} >> /tmp/easytier.log 2>&1 &
|
||||
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 开始运行 ${easytierbin} -c ${config_file}" >>/tmp/easytier.log
|
||||
procd_open_instance
|
||||
get_tz
|
||||
[ -z "$SET_TZ" ] || procd_set_param env TZ="$SET_TZ"
|
||||
procd_set_param command /bin/sh -c "
|
||||
${easytierbin} -c ${config_file} --console-log-level ${log} >> /tmp/easytier.log 2>&1 &
|
||||
ET_CORE_PID=\$!
|
||||
{
|
||||
while true; do
|
||||
LOG_SIZE=\$(ls -l /tmp/easytier.log | awk '{print int(\$5/1024)}')
|
||||
if [ \$LOG_SIZE -gt 5120 ]; then
|
||||
tail -n 500 /tmp/easytier.log > /tmp/easytier.log.tmp
|
||||
mv /tmp/easytier.log.tmp /tmp/easytier.log
|
||||
fi
|
||||
sleep 300
|
||||
done
|
||||
} &
|
||||
LOG_MANAGEMENT_PID=\$!
|
||||
trap \"kill -TERM \$ET_CORE_PID; kill -TERM \$LOG_MANAGEMENT_PID; exit\" SIGINT SIGTERM EXIT
|
||||
wait \$ET_CORE_PID
|
||||
"
|
||||
|
||||
}
|
||||
|
||||
get_etconfig() {
|
||||
web_config="$(uci -q get easytier.@easytier[0].web_config)"
|
||||
network_name="$(uci -q get easytier.@easytier[0].network_name)"
|
||||
network_secret="$(uci -q get easytier.@easytier[0].network_secret)"
|
||||
ip_dhcp="$(uci -q get easytier.@easytier[0].ip_dhcp || echo 0)"
|
||||
ipaddr="$(uci -q get easytier.@easytier[0].ipaddr)"
|
||||
ip6addr="$(uci -q get easytier.@easytier[0].ip6addr)"
|
||||
external_node="$(uci -q get easytier.@easytier[0].external_node)"
|
||||
proxy_network="$(uci -q get easytier.@easytier[0].proxy_network)"
|
||||
rpc_portal="$(uci -q get easytier.@easytier[0].rpc_portal || echo 15888)"
|
||||
rpc_portal_whitelist="$(uci -q get easytier.@easytier[0].rpc_portal_whitelist)"
|
||||
listenermode="$(uci -q get easytier.@easytier[0].listenermode)"
|
||||
tunname="$(uci -q get easytier.@easytier[0].tunname)"
|
||||
relay_network="$(uci -q get easytier.@easytier[0].relay_network || echo 0)"
|
||||
tcp_port="$(uci -q get easytier.@easytier[0].tcp_port | awk '{print $1}')"
|
||||
ws_port="$(uci -q get easytier.@easytier[0].ws_port)"
|
||||
wss_port="$(uci -q get easytier.@easytier[0].wss_port)"
|
||||
wg_port="$(uci -q get easytier.@easytier[0].wg_port)"
|
||||
quic_port="$(uci -q get easytier.@easytier[0].quic_port)"
|
||||
peeradd="$(uci -q get easytier.@easytier[0].peeradd)"
|
||||
desvice_name="$(uci -q get easytier.@easytier[0].desvice_name)"
|
||||
[ -z "$desvice_name" ] || desvice_name=$(echo "$desvice_name" | sed 's/[\\$`"()|><&;]/\\&/g')
|
||||
instance_name="$(uci -q get easytier.@easytier[0].instance_name)"
|
||||
vpn_portal="$(uci -q get easytier.@easytier[0].vpn_portal)"
|
||||
mtu="$(uci -q get easytier.@easytier[0].mtu)"
|
||||
default_protocol="$(uci -q get easytier.@easytier[0].default_protocol)"
|
||||
disable_encryption="$(uci -q get easytier.@easytier[0].disable_encryption || echo 0)"
|
||||
whitelist="$(uci -q get easytier.@easytier[0].whitelist)"
|
||||
multi_thread="$(uci -q get easytier.@easytier[0].multi_thread || echo 0)"
|
||||
multi_thread_count="$(uci -q get easytier.@easytier[0].multi_thread_count)"
|
||||
disable_ipv6="$(uci -q get easytier.@easytier[0].disable_ipv6 || echo 0)"
|
||||
latency_first="$(uci -q get easytier.@easytier[0].latency_first || echo 0)"
|
||||
exit_node="$(uci -q get easytier.@easytier[0].exit_node || echo 0)"
|
||||
smoltcp="$(uci -q get easytier.@easytier[0].smoltcp || echo 0)"
|
||||
exit_nodes="$(uci -q get easytier.@easytier[0].exit_nodes || echo 0)"
|
||||
no_tun="$(uci -q get easytier.@easytier[0].no_tun || echo 0)"
|
||||
manual_routes="$(uci -q get easytier.@easytier[0].manual_routes)"
|
||||
log="$(uci -q get easytier.@easytier[0].log || echo off)"
|
||||
check="$(uci -q get easytier.@easytier[0].check || echo 0)"
|
||||
disable_p2p="$(uci -q get easytier.@easytier[0].disable_p2p || echo 0)"
|
||||
disable_udp="$(uci -q get easytier.@easytier[0].disable_udp || echo 0)"
|
||||
relay_all="$(uci -q get easytier.@easytier[0].relay_all || echo 0)"
|
||||
checkip="$(uci -q get easytier.@easytier[0].checkip)"
|
||||
socks_port="$(uci -q get easytier.@easytier[0].socks_port)"
|
||||
comp="$(uci -q get easytier.@easytier[0].comp || echo none)"
|
||||
mapped_listeners="$(uci -q get easytier.@easytier[0].mapped_listeners)"
|
||||
bind_device="$(uci -q get easytier.@easytier[0].bind_device || echo 0)"
|
||||
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)"
|
||||
port_forward="$(uci -q get easytier.@easytier[0].port_forward)"
|
||||
accept_dns="$(uci -q get easytier.@easytier[0].accept_dns || echo 0)"
|
||||
private_mode="$(uci -q get easytier.@easytier[0].private_mode || echo 0)"
|
||||
quic_proxy="$(uci -q get easytier.@easytier[0].quic_proxy || echo 0)"
|
||||
quic_input="$(uci -q get easytier.@easytier[0].quic_input || echo 0)"
|
||||
foreign_relay_bps_limit="$(uci -q get easytier.@easytier[0].foreign_relay_bps_limit)"
|
||||
extra_args="$(uci -q get easytier.@easytier[0].extra_args)"
|
||||
encryption_algorithm="$(uci -q get easytier.@easytier[0].encryption_algorithm)"
|
||||
|
||||
p2p_only="$(uci -q get easytier.@easytier[0].p2p_only || echo 0)"
|
||||
disable_tcp="$(uci -q get easytier.@easytier[0].disable_tcp || echo 0)"
|
||||
disable_sym="$(uci -q get easytier.@easytier[0].disable_sym || echo 0)"
|
||||
udp_white_port="$(uci -q get easytier.@easytier[0].udp_white_port)"
|
||||
tcp_white_port="$(uci -q get easytier.@easytier[0].tcp_white_port)"
|
||||
disable_relay_kcp="$(uci -q get easytier.@easytier[0].disable_relay_kcp || echo 0)"
|
||||
relay_kcp="$(uci -q get easytier.@easytier[0].relay_kcp || echo 0)"
|
||||
auto_config_interface="$(uci -q get easytier.@easytier[0].auto_config_interface || echo 1)"
|
||||
interface_netmask="$(uci -q get easytier.@easytier[0].interface_netmask)"
|
||||
auto_config_firewall="$(uci -q get easytier.@easytier[0].auto_config_firewall || echo 1)"
|
||||
|
||||
}
|
||||
|
||||
set_firewall() {
|
||||
# Check if auto_config_firewall is enabled
|
||||
if [ "$auto_config_firewall" != "1" ]; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 自动防火墙配置已禁用,跳过配置" >>/tmp/easytier.log
|
||||
return
|
||||
fi
|
||||
|
||||
if [ ! -z "$tcp_port" ] ; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 添加防火墙规则 easytier_tcp_udp 放行端口 ${tcp_port} " >>/tmp/easytier.log
|
||||
uci -q delete firewall.easytier_tcp_udp
|
||||
uci set firewall.easytier_tcp_udp=rule
|
||||
uci set firewall.easytier_tcp_udp.name="easytier_tcp_udp"
|
||||
uci set firewall.easytier_tcp_udp.target="ACCEPT"
|
||||
uci set firewall.easytier_tcp_udp.src="wan"
|
||||
uci set firewall.easytier_tcp_udp.proto="tcp udp"
|
||||
uci set firewall.easytier_tcp_udp.dest_port="$tcp_port"
|
||||
uci set firewall.easytier_tcp_udp.enabled="1"
|
||||
fi
|
||||
if [ ! -z "$udp_port" ] ; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 添加防火墙规则 easytier_udp 放行UDP端口 ${udp_port} " >>/tmp/easytier.log
|
||||
uci -q delete firewall.easytier_udp
|
||||
uci set firewall.easytier_udp=rule
|
||||
uci set firewall.easytier_udp.name="easytier_udp"
|
||||
uci set firewall.easytier_udp.target="ACCEPT"
|
||||
uci set firewall.easytier_udp.src="wan"
|
||||
uci set firewall.easytier_udp.proto="udp"
|
||||
uci set firewall.easytier_udp.dest_port="$udp_port"
|
||||
uci set firewall.easytier_udp.enabled="1"
|
||||
fi
|
||||
if [ ! -z "$wss_port" ] ; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 添加防火墙规则 easytier_wss 放行端口 ${wss_port} " >>/tmp/easytier.log
|
||||
uci -q delete firewall.easytier_wss
|
||||
uci set firewall.easytier_wss=rule
|
||||
uci set firewall.easytier_wss.name="easytier_wss"
|
||||
uci set firewall.easytier_wss.target="ACCEPT"
|
||||
uci set firewall.easytier_wss.src="wan"
|
||||
uci set firewall.easytier_wss.proto="tcp"
|
||||
uci set firewall.easytier_wss.dest_port="$wss_port"
|
||||
uci set firewall.easytier_wss.enabled="1"
|
||||
fi
|
||||
if [ ! -z "$ws_port" ] ; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 添加防火墙规则 easytier_ws 放行端口 ${ws_port} " >>/tmp/easytier.log
|
||||
uci -q delete firewall.easytier_ws
|
||||
uci set firewall.easytier_ws=rule
|
||||
uci set firewall.easytier_ws.name="easytier_ws"
|
||||
uci set firewall.easytier_ws.target="ACCEPT"
|
||||
uci set firewall.easytier_ws.src="wan"
|
||||
uci set firewall.easytier_ws.proto="tcp"
|
||||
uci set firewall.easytier_ws.dest_port="$ws_port"
|
||||
uci set firewall.easytier_ws.enabled="1"
|
||||
fi
|
||||
if [ ! -z "$wg_port" ] ; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 添加防火墙规则 easytier_wg 放行端口 ${wg_port} " >>/tmp/easytier.log
|
||||
uci -q delete firewall.easytier_wg
|
||||
uci set firewall.easytier_wg=rule
|
||||
uci set firewall.easytier_wg.name="easytier_wg"
|
||||
uci set firewall.easytier_wg.target="ACCEPT"
|
||||
uci set firewall.easytier_wg.src="wan"
|
||||
uci set firewall.easytier_wg.proto="udp"
|
||||
uci set firewall.easytier_wg.dest_port="$wg_port"
|
||||
uci set firewall.easytier_wg.enabled="1"
|
||||
fi
|
||||
if [ ! -z "$quic_port" ] ; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 添加防火墙规则 easytier_quic 放行端口 ${quic_port} " >>/tmp/easytier.log
|
||||
uci -q delete firewall.easytier_quic
|
||||
uci set firewall.easytier_quic=rule
|
||||
uci set firewall.easytier_quic.name="easytier_quic"
|
||||
uci set firewall.easytier_quic.target="ACCEPT"
|
||||
uci set firewall.easytier_quic.src="wan"
|
||||
uci set firewall.easytier_quic.proto="tcp udp"
|
||||
uci set firewall.easytier_quic.dest_port="$quic_port"
|
||||
uci set firewall.easytier_quic.enabled="1"
|
||||
fi
|
||||
|
||||
[ -z "$tunname" ] && tunname="tun0"
|
||||
|
||||
# Check if auto_config_interface is enabled
|
||||
if [ "$auto_config_interface" = "1" ]; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 自动网络接口配置已启用" >>/tmp/easytier.log
|
||||
uci -q delete network.EasyTier >/dev/null 2>&1
|
||||
if [ -z "$(uci -q get network.EasyTier)" ]; then
|
||||
uci set network.EasyTier='interface'
|
||||
if [ -z "$ipaddr" ]; then
|
||||
uci set network.EasyTier.proto='none'
|
||||
else
|
||||
uci set network.EasyTier.proto='static'
|
||||
uci set network.EasyTier.ipaddr=$ipaddr
|
||||
[ -z "$interface_netmask" ] && interface_netmask="255.0.0.0"
|
||||
uci set network.EasyTier.netmask="$interface_netmask"
|
||||
fi
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 添加网络接口 EasyTier 绑定虚拟接口 ${tunname},子网掩码: ${interface_netmask:-255.0.0.0}" >>/tmp/easytier.log
|
||||
uci set network.EasyTier.device="$tunname"
|
||||
uci set network.EasyTier.device="$tunname"
|
||||
fi
|
||||
if [ -z "$(uci -q get firewall.easytierzone)" ]; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 添加防火墙规则,放行网络接口 EasyTier 允许出入转发,开启IP动态伪装 MSS钳制" >>/tmp/easytier.log
|
||||
uci set firewall.easytierzone='zone'
|
||||
uci set firewall.easytierzone.input='ACCEPT'
|
||||
uci set firewall.easytierzone.output='ACCEPT'
|
||||
uci set firewall.easytierzone.forward='ACCEPT'
|
||||
uci set firewall.easytierzone.masq='1'
|
||||
uci set firewall.easytierzone.mtu_fix='1'
|
||||
uci set firewall.easytierzone.name='EasyTier'
|
||||
uci set firewall.easytierzone.network='EasyTier'
|
||||
fi
|
||||
else
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 自动网络接口配置已禁用,不创建网络接口" >>/tmp/easytier.log
|
||||
uci -q delete network.EasyTier >/dev/null 2>&1
|
||||
uci -q delete firewall.easytierzone >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
et_forward="$(uci -q get easytier.@easytier[0].et_forward)"
|
||||
if [ "${et_forward//etfwlan/}" != "$et_forward" ]; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 允许从虚拟网络 EasyTier 到局域网 lan 的流量" >>/tmp/easytier.log
|
||||
uci set firewall.easytierfwlan=forwarding
|
||||
uci set firewall.easytierfwlan.dest='lan'
|
||||
uci set firewall.easytierfwlan.src='EasyTier'
|
||||
else
|
||||
uci -q delete firewall.easytierfwlan
|
||||
fi
|
||||
if [ "${et_forward//etfwwan/}" != "$et_forward" ]; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 允许从虚拟网络 EasyTier 到广域网 wan 的流量" >>/tmp/easytier.log
|
||||
uci set firewall.easytierfwwan=forwarding
|
||||
uci set firewall.easytierfwwan.dest='wan'
|
||||
uci set firewall.easytierfwwan.src='EasyTier'
|
||||
else
|
||||
uci -q delete firewall.easytierfwwan
|
||||
fi
|
||||
if [ "${et_forward//lanfwet/}" != "$et_forward" ]; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 允许从局域网 lan 到虚拟网络 EasyTier 的流量" >>/tmp/easytier.log
|
||||
uci set firewall.lanfweasytier=forwarding
|
||||
uci set firewall.lanfweasytier.dest='EasyTier'
|
||||
uci set firewall.lanfweasytier.src='lan'
|
||||
else
|
||||
uci -q delete firewall.lanfweasytier
|
||||
fi
|
||||
if [ "${et_forward//wanfwet/}" != "$et_forward" ]; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 允许从广域网 wan 到虚拟网络 EasyTier 的流量" >>/tmp/easytier.log
|
||||
uci set firewall.wanfweasytier=forwarding
|
||||
uci set firewall.wanfweasytier.dest='EasyTier'
|
||||
uci set firewall.wanfweasytier.src='wan'
|
||||
else
|
||||
uci -q delete firewall.wanfweasytier
|
||||
fi
|
||||
}
|
||||
|
||||
start_et() {
|
||||
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)"
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : easytier-core_${cpucore}开始启动" >>/tmp/easytier.log
|
||||
path=$(dirname "$easytierbin")
|
||||
if [[ -f /tmp/easytier-core || -f /tmp/easytier-cli ]] && [[ "${path:0:4}" != "/tmp" ]]; then
|
||||
chmod +x /tmp/easytier-core 2>/dev/null
|
||||
chmod +x /tmp/easytier-cli 2>/dev/null
|
||||
mkdir -p "$path"
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 找到上传的程序/tmp/easytier-core,替换为$easytierbin " >>/tmp/easytier.log
|
||||
upsize="$(du -k /tmp/easytier-core | cut -f1)"
|
||||
result=$(expr $size - $upsize)
|
||||
[ -z "$size"] && echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 获取可用空间失败,请使用ssh手动上传至 ${easytierbin} ${path}/easytier-cli" >>/tmp/easytier.log
|
||||
if [ "$(($(/tmp/easytier-core -h 2>&1 | wc -l)))" -gt 3 ] && [ "$result" -gt 1000 ] ; then
|
||||
mv -f /tmp/easytier-core "$easytierbin" 2>/dev/null
|
||||
mv -f /tmp/easytier-cli "${path}/easytier-cli" 2>/dev/null
|
||||
else
|
||||
if [ -z "$size" ] && [ "$(($(/tmp/easytier-core -h 2>&1 | wc -l)))" -gt 3 ] ; then
|
||||
mv -f /tmp/easytier-core "$easytierbin" 2>/dev/null
|
||||
mv -f /tmp/easytier-cli "${path}/easytier-cli" 2>/dev/null
|
||||
fi
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 无法替换,上传的程序不完整或自定义路径的可用空间不足,当前空间剩余${size}kb" >>/tmp/easytier.log
|
||||
fi
|
||||
fi
|
||||
if [ ! -f "$easytierbin" ] && [ "$size" -lt 5000 ] && [ ! -z "$size" ] ; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 自定义程序路径的可用空间不足,当前可用空间剩余${size}kb,自动切换为内存/tmp/easytier-core" >>/tmp/easytier.log
|
||||
sed -i "/easytierbin/c option easytierbin '/tmp/easytier-core' " /etc/config/easytier
|
||||
easytierbin=/tmp/easytier-core
|
||||
fi
|
||||
if [ -f "$easytierbin" ] ; then
|
||||
if [ ! -x "$easytierbin" ] ; then
|
||||
chmod +x "$easytierbin"
|
||||
chmod +x ${path}/easytier-cli
|
||||
fi
|
||||
fi
|
||||
if [ ! -f "$easytierbin" ] || [ "$(($($easytierbin -h 2>&1 | wc -l)))" -lt 3 ] ; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : $easytierbin 不存在或程序不完整,开始在线下载..." >>/tmp/easytier.log
|
||||
check_bin
|
||||
fi
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
get_etconfig
|
||||
if [ "$etcmd" = "config" ] ; then
|
||||
#配置文件启动方式
|
||||
check_config
|
||||
else
|
||||
procd_open_instance "easytier_core"
|
||||
get_tz
|
||||
[ -z "$SET_TZ" ] || procd_set_param env TZ="$SET_TZ"
|
||||
core_cmd=""
|
||||
if [ "$etcmd" = "etcmd" ] ; then
|
||||
#默认方式启动
|
||||
[ -z "$network_name" ] || core_cmd="${core_cmd} --network-name $network_name"
|
||||
[ -z "$network_secret" ] || core_cmd="${core_cmd} --network-secret $network_secret"
|
||||
[ -z "$ipaddr" ] || core_cmd="${core_cmd} -i $ipaddr"
|
||||
[ -z "$ip6addr" ] || core_cmd="${core_cmd} --ipv6 $ip6addr"
|
||||
[ "$ip_dhcp" = "0" ] || core_cmd="${core_cmd} -d"
|
||||
if [ ! -z "$peeradd" ] ; then
|
||||
if [[ "$(grep "list peeradd" /etc/config/easytier | awk '{print $3}' | wc -l ) " -eq 1 ]]; then
|
||||
core_cmd="${core_cmd} -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
|
||||
core_cmd="${core_cmd} -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
|
||||
core_cmd="${core_cmd} -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
|
||||
core_cmd="${core_cmd} -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
|
||||
core_cmd="${core_cmd} --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
|
||||
core_cmd="${core_cmd} --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
|
||||
core_cmd="${core_cmd} --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
|
||||
core_cmd="${core_cmd} --manual-routes $manual_routeadds"
|
||||
done
|
||||
fi
|
||||
fi
|
||||
if [ "$relay_network" = "1" ] ; then
|
||||
if [ ! -z "$whitelist" ] ; then
|
||||
if [[ "$(grep "list whitelist" /etc/config/easytier | awk '{print $3}' | wc -l ) " -eq 1 ]]; then
|
||||
core_cmd="${core_cmd} --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
|
||||
core_cmd="${core_cmd} --relay-network-whitelist $whitelists"
|
||||
done
|
||||
fi
|
||||
else
|
||||
core_cmd="${core_cmd} --relay-network-whitelist"
|
||||
fi
|
||||
fi
|
||||
if [ ! -z "$mapped_listeners" ] ; then
|
||||
if [[ "$(grep "list mapped_listeners" /etc/config/easytier | awk '{print $3}' | wc -l ) " -eq 1 ]]; then
|
||||
core_cmd="${core_cmd} --mapped-listeners $mapped_listeners"
|
||||
else
|
||||
for mapped_listener in $(cat /etc/config/easytier | grep 'list mapped_listeners' | awk -F 'list mapped_listeners' '{print $2}' | sed "s/'/\n/g" | tr -d " ' "); do
|
||||
core_cmd="${core_cmd} --mapped-listeners $mapped_listener"
|
||||
done
|
||||
fi
|
||||
fi
|
||||
if [ ! -z "$port_forward" ] ; then
|
||||
if [[ "$(grep "list port_forward" /etc/config/easytier | awk '{print $3}' | wc -l ) " -eq 1 ]]; then
|
||||
core_cmd="${core_cmd} --port-forward $port_forward"
|
||||
else
|
||||
for port_forwards in $(cat /etc/config/easytier | grep 'list port_forward' | awk -F 'list port_forward' '{print $2}' | sed "s/'/\n/g" | tr -d " ' "); do
|
||||
core_cmd="${core_cmd} --port-forward $port_forwards"
|
||||
done
|
||||
fi
|
||||
fi
|
||||
[ -z "$rpc_portal" ] || core_cmd="${core_cmd} -r $rpc_portal"
|
||||
[ -z "$rpc_portal_whitelist" ] || core_cmd="${core_cmd} --rpc-portal-whitelist $rpc_portal_whitelist"
|
||||
[ -z "$tcp_port" ] || core_cmd="${core_cmd} -l tcp:$tcp_port"
|
||||
[ -z "$tcp_port" ] || core_cmd="${core_cmd} -l udp:$tcp_port"
|
||||
[ -z "$ws_port" ] || core_cmd="${core_cmd} -l ws:$ws_port"
|
||||
[ -z "$wss_port" ] || core_cmd="${core_cmd} -l wss:$wss_port"
|
||||
[ -z "$wg_port" ] || core_cmd="${core_cmd} -l wg:$wg_port"
|
||||
[ -z "$quic_port" ] || core_cmd="${core_cmd} -l quic:$quic_port"
|
||||
[ -z "$external_node" ] || core_cmd="${core_cmd} -e $external_node"
|
||||
[ "$listenermode" = "ON" ] || core_cmd="${core_cmd} --no-listener"
|
||||
[ -z "$desvice_name" ] || core_cmd="${core_cmd} --hostname $desvice_name"
|
||||
[ -z "$instance_name" ] || core_cmd="${core_cmd} -m $instance_name"
|
||||
[ -z "$vpn_portal" ] || core_cmd="${core_cmd} --vpn-portal $vpn_portal"
|
||||
[ -z "$mtu" ] || core_cmd="${core_cmd} --mtu $mtu"
|
||||
[ "$default_protocol" = "-" ] || core_cmd="${core_cmd} --default-protocol $default_protocol"
|
||||
[ -z "$tunname" ] || core_cmd="${core_cmd} --dev-name $tunname"
|
||||
[ "$disable_encryption" = "0" ] || core_cmd="${core_cmd} -u"
|
||||
[ "$multi_thread" = "0" ] || core_cmd="${core_cmd} --multi-thread"
|
||||
[ -z "$multi_thread_count" ] || core_cmd="${core_cmd} --multi-thread-count $multi_thread_count"
|
||||
[ "$no_tun" = "0" ] || core_cmd="${core_cmd} --no-tun"
|
||||
[ "$smoltcp" = "0" ] || core_cmd="${core_cmd} --use-smoltcp"
|
||||
[ "$disable_ipv6" = "0" ] || core_cmd="${core_cmd} --disable-ipv6"
|
||||
[ "$latency_first" = "0" ] || core_cmd="${core_cmd} --latency-first"
|
||||
[ "$exit_node" = "0" ] || core_cmd="${core_cmd} --enable-exit-node"
|
||||
[ "$disable_p2p" = "0" ] || core_cmd="${core_cmd} --disable-p2p"
|
||||
[ "$relay_all" = "0" ] || core_cmd="${core_cmd} --relay-all-peer-rpc"
|
||||
[ -z "$socks_port" ] || core_cmd="${core_cmd} --socks5 $socks_port"
|
||||
[ "$comp" = "none" ] || core_cmd="${core_cmd} --compression $comp"
|
||||
[ "$bind_device" = "0" ] || core_cmd="${core_cmd} --bind-device true"
|
||||
[ "$bind_device" = "1" ] || core_cmd="${core_cmd} --bind-device false"
|
||||
[ "$kcp_proxy" = "0" ] || core_cmd="${core_cmd} --enable-kcp-proxy"
|
||||
[ "$kcp_input" = "0" ] || core_cmd="${core_cmd} --disable-kcp-input"
|
||||
[ "$proxy_forward" = "0" ] || core_cmd="${core_cmd} --proxy-forward-by-system"
|
||||
[ "$accept_dns" = "0" ] || core_cmd="${core_cmd} --accept-dns true"
|
||||
[ "$private_mode" = "0" ] || core_cmd="${core_cmd} --private-mode true"
|
||||
[ "$quic_proxy" = "0" ] || core_cmd="${core_cmd} --enable-quic-proxy"
|
||||
[ "$quic_input" = "0" ] || core_cmd="${core_cmd} --disable-quic-input"
|
||||
[ -z "$foreign_relay_bps_limit" ] || core_cmd="${core_cmd} --foreign-relay-bps-limit $foreign_relay_bps_limit"
|
||||
if [ -n "$encryption_algorithm" ] && [ "$encryption_algorithm" != "aes-gcm" ]; then
|
||||
core_cmd="${core_cmd} --encryption-algorithm ${encryption_algorithm}"
|
||||
fi
|
||||
[ "$p2p_only" = "0" ] || core_cmd="${core_cmd} --p2p-only"
|
||||
[ "$disable_tcp" = "0" ] || core_cmd="${core_cmd} --disable-tcp-hole-punching"
|
||||
[ "$disable_udp" = "0" ] || core_cmd="${core_cmd} --disable-udp-hole-punching"
|
||||
[ "$disable_sym" = "0" ] || core_cmd="${core_cmd} --disable-sym-hole-punching"
|
||||
[ "$disable_relay_kcp" = "0" ] || core_cmd="${core_cmd} --disable-relay-kcp true"
|
||||
[ "$relay_kcp" = "0" ] || core_cmd="${core_cmd} --enable-relay-foreign-network-kcp true"
|
||||
[ -z "$udp_white_port" ] || core_cmd="${core_cmd} --udp-whitelist $udp_white_port"
|
||||
[ -z "$tcp_white_port" ] || core_cmd="${core_cmd} --tcp-whitelist $tcp_white_port"
|
||||
[ -z "$extra_args" ] || core_cmd="${core_cmd} $extra_args"
|
||||
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 运行 ${easytierbin} ${core_cmd} --console-log-level ${log}" >>/tmp/easytier.log
|
||||
|
||||
|
||||
fi
|
||||
if [ "$etcmd" = "web" ] ; then
|
||||
#WEB控制台启动
|
||||
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
|
||||
if [ ! -s /etc/easytier/et_machine_id ]; then
|
||||
cat /proc/sys/kernel/random/uuid > /etc/easytier/et_machine_id
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 生成新的 UUID 到 /etc/easytier/et_machine_id" >>/tmp/easytier.log
|
||||
fi
|
||||
et_uuid="$(cat /etc/easytier/et_machine_id | tr -d ' \n')"
|
||||
[ -z "$et_uuid" ] || core_cmd="${core_cmd} --machine-id $et_uuid"
|
||||
[ -z "$web_config" ] || core_cmd="${core_cmd} -w $web_config"
|
||||
[ -z "$desvice_name" ] || core_cmd="${core_cmd} --hostname $desvice_name"
|
||||
fi
|
||||
procd_set_param command /bin/sh -c "
|
||||
${easytierbin} ${core_cmd} --console-log-level ${log} >> /tmp/easytier.log 2>&1 &
|
||||
ET_CORE_PID=\$!
|
||||
{
|
||||
while true; do
|
||||
LOG_SIZE=\$(ls -l /tmp/easytier.log | awk '{print int(\$5/1024)}')
|
||||
if [ \$LOG_SIZE -gt 5120 ]; then
|
||||
tail -n 500 /tmp/easytier.log > /tmp/easytier.log.tmp
|
||||
mv /tmp/easytier.log.tmp /tmp/easytier.log
|
||||
fi
|
||||
sleep 300
|
||||
done
|
||||
} &
|
||||
LOG_MANAGEMENT_PID=\$!
|
||||
trap \"kill -TERM \$ET_CORE_PID; kill -TERM \$LOG_MANAGEMENT_PID; exit\" SIGINT SIGTERM EXIT
|
||||
wait \$ET_CORE_PID
|
||||
"
|
||||
fi
|
||||
|
||||
procd_set_param limits core="unlimited"
|
||||
procd_set_param limits nofile="1000000 1000000"
|
||||
procd_set_param stdout 1
|
||||
procd_set_param stderr 1
|
||||
procd_set_param respawn
|
||||
procd_close_instance
|
||||
|
||||
if [ ! -z "$socks_port" ] ; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 添加防火墙规则 easytier_socks5 放行端口 ${socks_port} " >>/tmp/easytier.log
|
||||
uci -q delete firewall.easytier_socks5
|
||||
uci set firewall.easytier_socks5=rule
|
||||
uci set firewall.easytier_socks5.name="easytier_socks5"
|
||||
uci set firewall.easytier_socks5.target="ACCEPT"
|
||||
uci set firewall.easytier_socks5.src="wan"
|
||||
uci set firewall.easytier_socks5.proto="tcp"
|
||||
uci set firewall.easytier_socks5.dest_port="$socks_port"
|
||||
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
|
||||
fi
|
||||
set_firewall
|
||||
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 : 启动完成!" >>/tmp/easytier.log
|
||||
}
|
||||
|
||||
start_web() {
|
||||
webbin="$(uci -q get easytier.@easytier[0].webbin)"
|
||||
if [ -f /tmp/easytier-web-embed ] ; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 找到上传的easytier-web程序,替换${webbin} " >>/tmp/easytierweb.log
|
||||
mv -f /tmp/easytier-web-embed "$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
|
||||
check_bin
|
||||
fi
|
||||
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.@easytier[0].web_db_path)"
|
||||
web_protocol="$(uci -q get easytier.@easytier[0].web_protocol)"
|
||||
web_port="$(uci -q get easytier.@easytier[0].web_port)"
|
||||
api_port="$(uci -q get easytier.@easytier[0].web_api_port)"
|
||||
html_port="$(uci -q get easytier.@easytier[0].web_html_port)"
|
||||
weblog="$(uci -q get easytier.@easytier[0].web_weblog)"
|
||||
api_host="$(uci -q get easytier.@easytier[0].web_api_host)"
|
||||
geoip_db="$(uci -q get easytier.@easytier[0].web_geoip_db)"
|
||||
fw_web="$(uci -q get easytier.@easytier[0].web_fw_web || echo 0)"
|
||||
fw_api="$(uci -q get easytier.@easytier[0].web_fw_api || echo 0)"
|
||||
procd_open_instance "easytier_web"
|
||||
get_tz
|
||||
[ -z "$SET_TZ" ] || procd_set_param env TZ="$SET_TZ"
|
||||
web_cmd=""
|
||||
[ -z "$db_path" ] || web_cmd="${web_cmd} -d $db_path"
|
||||
[ -z "$web_protocol" ] || web_cmd="${web_cmd} -p $web_protocol"
|
||||
[ -z "$web_port" ] || web_cmd="${web_cmd} -c $web_port"
|
||||
[ -z "$api_port" ] || web_cmd="${web_cmd} -a $api_port"
|
||||
[ -z "$api_host" ] || web_cmd="${web_cmd} --api-host $api_host"
|
||||
[ -z "$geoip_db" ] || web_cmd="${web_cmd} --geoip-db $geoip_db"
|
||||
if [ -z "$html_port" ] ; then
|
||||
web_cmd="${web_cmd} --no-web"
|
||||
else
|
||||
web_cmd="${web_cmd} -l $html_port"
|
||||
fi
|
||||
if [ "$weblog" != "off" ] ; then
|
||||
web_cmd="${web_cmd} --console-log-level $weblog"
|
||||
fi
|
||||
procd_set_param command /bin/sh -c "
|
||||
${webbin} ${web_cmd} >> /tmp/easytierweb.log 2>&1 &
|
||||
ET_WEB_PID=\$!
|
||||
{
|
||||
while true; do
|
||||
LOG_SIZE=\$(ls -l /tmp/easytierweb.log | awk '{print int(\$5/1024)}')
|
||||
if [ \$LOG_SIZE -gt 5120 ]; then
|
||||
tail -n 500 /tmp/easytierweb.log > /tmp/easytierweb.log.tmp
|
||||
mv /tmp/easytierweb.log.tmp /tmp/easytierweb.log
|
||||
fi
|
||||
sleep 300
|
||||
done
|
||||
} &
|
||||
LOG_MANAGEMENT_PID=\$!
|
||||
trap \"kill -TERM \$ET_WEB_PID; kill -TERM \$LOG_MANAGEMENT_PID; exit\" SIGINT SIGTERM EXIT
|
||||
wait \$ET_WEB_PID
|
||||
"
|
||||
procd_set_param stdout 1
|
||||
procd_set_param stderr 1
|
||||
procd_set_param respawn
|
||||
procd_close_instance
|
||||
if [ ! -z "$web_port" ] && [ "$fw_web" = "1" ] ; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 添加防火墙规则 easytier_web 放行服务端口 ${web_port} " >>/tmp/easytierweb.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="tcp udp"
|
||||
uci set firewall.easytier_webserver.dest_port="$web_port"
|
||||
uci set firewall.easytier_webserver.enabled="1"
|
||||
fi
|
||||
if [ ! -z "$api_port" ] && [ "$fw_api" = "1" ] ; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 添加防火墙规则 easytier_web 放行API端口 ${api_port} " >>/tmp/easytierweb.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="tcp"
|
||||
uci set firewall.easytier_webapi.dest_port="$api_port"
|
||||
uci set firewall.easytier_webapi.enabled="1"
|
||||
fi
|
||||
if [ ! -z "$html_port" ] && [ "$fw_api" = "1" ] && [ "$html_port" != "$api_port" ] ; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 添加防火墙规则 easytier_web 放行html端口 ${html_port} " >>/tmp/easytierweb.log
|
||||
uci -q delete firewall.easytier_webhtml
|
||||
uci set firewall.easytier_webhtml=rule
|
||||
uci set firewall.easytier_webhtml.name="easytier_webhtml"
|
||||
uci set firewall.easytier_webhtml.target="ACCEPT"
|
||||
uci set firewall.easytier_webhtml.src="wan"
|
||||
uci set firewall.easytier_webhtml.proto="tcp"
|
||||
uci set firewall.easytier_webhtml.dest_port="$html_port"
|
||||
uci set firewall.easytier_webhtml.enabled="1"
|
||||
fi
|
||||
echo `date +%s` > /tmp/easytierweb_time
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 启动完成! " >>/tmp/easytierweb.log
|
||||
}
|
||||
|
||||
start_service() {
|
||||
echo "start.."
|
||||
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"
|
||||
[ -n "$(echo $cputype | grep -E "linux.*aarch64.*|linux.*armv8.*")" ] && cpucore="aarch64"
|
||||
[ -n "$(echo $cputype | grep -E "linux.*86.*")" ] && cpucore="i386"
|
||||
[ -n "$(echo $cputype | grep -E "linux.*86_64.*")" ] && cpucore="x86_64"
|
||||
if [ -n "$(echo $cputype | grep -E "linux.*mips.*")" ] ; then
|
||||
mipstype=$(echo -n I | hexdump -o 2>/dev/null | awk '{ print substr($2,6,1); exit}')
|
||||
[ "$mipstype" = "0" ] && cpucore="mips" || cpucore="mipsel"
|
||||
fi
|
||||
echo "" >/tmp/easytier.log
|
||||
echo "" >/tmp/easytierweb.log
|
||||
size="$(df -k | awk '/\/overlay$/ {sub(/K$/, "", $4); print $4}')"
|
||||
[ -z "$size" ] && size="$(df -kP /usr/bin | awk 'NR==2 {print $(NF-2) }')"
|
||||
if [ -z "$(uci -q get easytier.@easytier[0].web_enabled)" ] ; then
|
||||
# Migrate old config if needed or just init
|
||||
# For now just set default 0 if not present
|
||||
uci -q set easytier.@easytier[0].web_enabled='0'
|
||||
uci commit easytier
|
||||
fi
|
||||
[ "$(uci -q get easytier.@easytier[0].web_enabled)" = "1" ] && start_web
|
||||
[ "$(uci -q get easytier.@easytier[0].enabled)" = "1" ] && start_et easytier
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 重载防火墙和网络配置...会出现短暂断网现象... " >>/tmp/easytier.log
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') easytier : 重载防火墙和网络配置...会出现短暂断网现象... " >>/tmp/easytierweb.log
|
||||
[ -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
|
||||
|
||||
}
|
||||
|
||||
stop_service() {
|
||||
echo "stop.."
|
||||
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_tcp >/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_quic >/dev/null 2>&1
|
||||
uci -q delete firewall.easytier_wireguard >/dev/null 2>&1
|
||||
uci -q delete firewall.easytier_socks5 >/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 /tmp/easytier-cli_acl >/dev/null 2>&1
|
||||
rm -rf /tmp/easytier-cli_peer-center /tmp/easytier-cli_vpn-portal /tmp/easytier_cmd /tmp/easytier-cli_node /tmp/easytier-cli_mapped_listener >/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.@easytier[0].web_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
|
||||
uci -q delete firewall.easytier_webhtml
|
||||
fi
|
||||
}
|
||||
|
||||
reload_service() {
|
||||
stop
|
||||
start
|
||||
}
|
||||
|
||||
service_triggers() {
|
||||
procd_add_reload_trigger "easytier"
|
||||
#如果WAN网络接口上线则触发重新启动easytier
|
||||
procd_add_interface_trigger "interface.*.up" wan /etc/init.d/easytier reload
|
||||
}
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
#!/bin/sh
|
||||
[ ! -f "/usr/share/ucitrack/luci-app-easytier.json" ] && {
|
||||
cat > /usr/share/ucitrack/luci-app-easytier.json << EEOF
|
||||
{
|
||||
"config": "easytier",
|
||||
"init": "easytier"
|
||||
}
|
||||
EEOF
|
||||
}
|
||||
|
||||
uci -q batch <<-EOF >/dev/null
|
||||
delete ucitrack.@easytier[-1]
|
||||
add ucitrack easytier
|
||||
set ucitrack.@easytier[-1].init=easytier
|
||||
commit ucitrack
|
||||
EOF
|
||||
|
||||
chmod +x /etc/init.d/easytier
|
||||
/etc/init.d/easytier enable
|
||||
rm -rf /tmp/luci-indexcache /tmp/luci-modulecache
|
||||
exit 0
|
||||
+151
@@ -0,0 +1,151 @@
|
||||
#!/bin/sh
|
||||
# EasyTier Download Management
|
||||
# Handles binary downloads from GitHub with proxy support
|
||||
|
||||
# 引入工具函数
|
||||
. /usr/share/easytier/utils.sh 2>/dev/null || true
|
||||
|
||||
# 默认 GitHub 加速代理列表
|
||||
DEFAULT_PROXYS="
|
||||
https://ghproxy.net/
|
||||
https://gh-proxy.com/
|
||||
https://cdn.gh-proxy.com/
|
||||
https://ghfast.top/
|
||||
"
|
||||
|
||||
# 获取代理列表
|
||||
# 优先从 UCI 配置读取,否则使用默认值
|
||||
get_proxy_list() {
|
||||
local proxys=$(uci -q get easytier.@easytier[0].github_proxys)
|
||||
[ -z "$proxys" ] && proxys="$DEFAULT_PROXYS"
|
||||
echo "$proxys"
|
||||
}
|
||||
|
||||
# 获取最新版本号
|
||||
get_latest_version() {
|
||||
local user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
|
||||
local tag=""
|
||||
local curltest=$(which curl)
|
||||
|
||||
if [ -z "$curltest" ] || [ ! -s "$(which curl)" ]; then
|
||||
tag=$(wget --no-check-certificate -T 5 -t 3 --user-agent "$user_agent" --max-redirect=0 --output-document=- \
|
||||
https://api.github.com/repos/EasyTier/EasyTier/releases/latest 2>&1 | grep 'tag_name' | cut -d\" -f4)
|
||||
[ -z "$tag" ] && tag=$(wget --no-check-certificate -T 5 -t 3 --user-agent "$user_agent" --quiet --output-document=- \
|
||||
https://api.github.com/repos/EasyTier/EasyTier/releases/latest 2>&1 | grep 'tag_name' | cut -d\" -f4)
|
||||
else
|
||||
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
|
||||
|
||||
# 如果获取失败,从 UCI 配置或使用默认版本
|
||||
if [ -z "$tag" ]; then
|
||||
tag=$(uci -q get easytier.@easytier[0].fallback_version)
|
||||
[ -z "$tag" ] && tag="v2.5.0"
|
||||
fi
|
||||
|
||||
echo "$tag"
|
||||
}
|
||||
|
||||
# 下载二进制文件
|
||||
# 参数: $1=版本号 $2=CPU架构 $3=目标路径
|
||||
download_binary() {
|
||||
local tag="$1"
|
||||
local cpucore="$2"
|
||||
local path="$3"
|
||||
local proxys=$(get_proxy_list)
|
||||
local download_url="https://github.com/EasyTier/EasyTier/releases/download/${tag}/easytier-linux-${cpucore}-${tag}.zip"
|
||||
|
||||
mkdir -p "$path"
|
||||
|
||||
for proxy in $proxys; do
|
||||
log_message "INFO" "easytier" "尝试使用代理 ${proxy} 下载" "/tmp/easytier.log"
|
||||
|
||||
if curl -L -k -o /tmp/easytier.zip --connect-timeout 10 --retry 3 "${proxy}${download_url}" || \
|
||||
wget --no-check-certificate --timeout=10 --tries=3 -O /tmp/easytier.zip "${proxy}${download_url}"; then
|
||||
|
||||
unzip -j -q -o /tmp/easytier.zip -d /tmp
|
||||
chmod +x /tmp/easytier-core /tmp/easytier-cli /tmp/easytier-web /tmp/easytier-web-embed 2>/dev/null || true
|
||||
rm -rf /tmp/easytier.zip
|
||||
|
||||
log_message "INFO" "easytier" "下载成功" "/tmp/easytier.log"
|
||||
return 0
|
||||
else
|
||||
log_message "WARN" "easytier" "${proxy}${download_url} 下载失败" "/tmp/easytier.log"
|
||||
fi
|
||||
done
|
||||
|
||||
log_message "ERROR" "easytier" "所有代理下载均失败,请手动下载上传程序" "/tmp/easytier.log"
|
||||
return 1
|
||||
}
|
||||
|
||||
# 检查并下载程序
|
||||
# 参数: $1=程序路径 $2=目标路径 $3=CPU架构
|
||||
check_and_download() {
|
||||
local easytierbin="$1"
|
||||
local path="$2"
|
||||
local cpucore="$3"
|
||||
|
||||
# 检查程序是否存在且完整
|
||||
if [ ! -f "$easytierbin" ] || [ "$($easytierbin -h 2>&1 | wc -l)" -lt 3 ]; then
|
||||
log_message "INFO" "easytier" "$easytierbin 不存在或程序不完整,开始在线下载..." "/tmp/easytier.log"
|
||||
|
||||
local tag=$(get_latest_version)
|
||||
log_message "INFO" "easytier" "开始在线下载${tag}版本" "/tmp/easytier.log"
|
||||
|
||||
if download_binary "$tag" "$cpucore" "$path"; then
|
||||
# 移动下载的文件到目标位置
|
||||
if [ "$(uci -q get easytier.@easytier[0].enabled)" = "1" ]; then
|
||||
mv -f /tmp/easytier-core "${path}/" 2>/dev/null
|
||||
mv -f /tmp/easytier-cli "${path}/" 2>/dev/null
|
||||
chmod +x "$easytierbin" 2>/dev/null
|
||||
fi
|
||||
|
||||
if [ "$(uci -q get easytier.@easytier[0].web_enabled)" = "1" ]; then
|
||||
local webbin=$(uci -q get easytier.@easytier[0].webbin)
|
||||
[ -z "$webbin" ] && webbin="/usr/bin/easytier-web"
|
||||
mv -f /tmp/easytier-web-embed "$webbin" 2>/dev/null || true
|
||||
chmod +x "$webbin" 2>/dev/null
|
||||
fi
|
||||
|
||||
return 0
|
||||
fi
|
||||
|
||||
return 1
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
# 处理上传的程序
|
||||
# 参数: $1=目标路径 $2=程序路径
|
||||
handle_uploaded_binary() {
|
||||
local path="$1"
|
||||
local easytierbin="$2"
|
||||
local size=$(get_available_space "$path")
|
||||
|
||||
if [ -f /tmp/easytier-core ] || [ -f /tmp/easytier-cli ]; then
|
||||
if [ "${path:0:4}" != "/tmp" ]; then
|
||||
chmod +x /tmp/easytier-core 2>/dev/null
|
||||
chmod +x /tmp/easytier-cli 2>/dev/null
|
||||
mkdir -p "$path"
|
||||
|
||||
log_message "INFO" "easytier" "找到上传的程序/tmp/easytier-core,替换为$easytierbin" "/tmp/easytier.log"
|
||||
|
||||
local upsize=$(du -k /tmp/easytier-core 2>/dev/null | cut -f1)
|
||||
local result=$((size - upsize))
|
||||
|
||||
if [ "$(/tmp/easytier-core -h 2>&1 | wc -l)" -gt 3 ] && [ "$result" -gt 1000 ]; then
|
||||
mv -f /tmp/easytier-core "$easytierbin" 2>/dev/null
|
||||
mv -f /tmp/easytier-cli "${path}/easytier-cli" 2>/dev/null
|
||||
return 0
|
||||
else
|
||||
log_message "WARN" "easytier" "无法替换,上传的程序不完整或自定义路径的可用空间不足,当前空间剩余${size}kb" "/tmp/easytier.log"
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
return 1
|
||||
}
|
||||
+194
@@ -0,0 +1,194 @@
|
||||
#!/bin/sh
|
||||
# EasyTier Firewall Management
|
||||
# Manages firewall rules and network interfaces for EasyTier
|
||||
|
||||
# 引入工具函数
|
||||
. /usr/share/easytier/utils.sh 2>/dev/null || true
|
||||
|
||||
# 添加单条防火墙规则
|
||||
# 参数: $1=规则名称 $2=协议 $3=端口 $4=描述
|
||||
add_firewall_rule() {
|
||||
local rule_name="$1"
|
||||
local proto="$2"
|
||||
local port="$3"
|
||||
local desc="$4"
|
||||
|
||||
[ -z "$port" ] && return 1
|
||||
|
||||
log_message "INFO" "easytier" "添加防火墙规则 ${rule_name} 放行端口 ${port}" "/tmp/easytier.log"
|
||||
|
||||
uci -q delete "firewall.${rule_name}"
|
||||
uci set "firewall.${rule_name}=rule"
|
||||
uci set "firewall.${rule_name}.name=${rule_name}"
|
||||
uci set "firewall.${rule_name}.target=ACCEPT"
|
||||
uci set "firewall.${rule_name}.src=wan"
|
||||
uci set "firewall.${rule_name}.proto=${proto}"
|
||||
uci set "firewall.${rule_name}.dest_port=${port}"
|
||||
uci set "firewall.${rule_name}.enabled=1"
|
||||
}
|
||||
|
||||
# 设置所有 EasyTier 防火墙规则
|
||||
# 需要设置的变量: tcp_port, udp_port, ws_port, wss_port, wg_port, quic_port, socks_port
|
||||
set_firewall_rules() {
|
||||
[ -n "$tcp_port" ] && add_firewall_rule "easytier_tcp_udp" "tcp udp" "$tcp_port" "EasyTier TCP/UDP"
|
||||
[ -n "$udp_port" ] && add_firewall_rule "easytier_udp" "udp" "$udp_port" "EasyTier UDP"
|
||||
[ -n "$ws_port" ] && add_firewall_rule "easytier_ws" "tcp" "$ws_port" "EasyTier WS"
|
||||
[ -n "$wss_port" ] && add_firewall_rule "easytier_wss" "tcp" "$wss_port" "EasyTier WSS"
|
||||
[ -n "$wg_port" ] && add_firewall_rule "easytier_wg" "udp" "$wg_port" "EasyTier WG"
|
||||
[ -n "$quic_port" ] && add_firewall_rule "easytier_quic" "tcp udp" "$quic_port" "EasyTier QUIC"
|
||||
[ -n "$socks_port" ] && add_firewall_rule "easytier_socks5" "tcp" "$socks_port" "EasyTier SOCKS5"
|
||||
}
|
||||
|
||||
# 设置网络接口
|
||||
# 参数: $1=接口名称 $2=IP地址(可选)
|
||||
setup_network_interface() {
|
||||
local tunname="${1:-tun0}"
|
||||
local ipaddr="$2"
|
||||
|
||||
uci -q delete network.EasyTier >/dev/null 2>&1
|
||||
|
||||
if [ -z "$(uci -q get network.EasyTier)" ]; then
|
||||
uci set network.EasyTier='interface'
|
||||
if [ -z "$ipaddr" ]; then
|
||||
uci set network.EasyTier.proto='none'
|
||||
else
|
||||
uci set network.EasyTier.proto='static'
|
||||
uci set network.EasyTier.ipaddr="$ipaddr"
|
||||
uci set network.EasyTier.netmask='255.0.0.0'
|
||||
fi
|
||||
log_message "INFO" "easytier" "添加网络接口 EasyTier 绑定虚拟接口 ${tunname}" "/tmp/easytier.log"
|
||||
uci set network.EasyTier.device="$tunname"
|
||||
uci set network.EasyTier.device="$tunname"
|
||||
fi
|
||||
}
|
||||
|
||||
# 设置防火墙区域
|
||||
setup_firewall_zone() {
|
||||
if [ -z "$(uci -q get firewall.easytierzone)" ]; then
|
||||
log_message "INFO" "easytier" "添加防火墙规则,放行网络接口 EasyTier 允许出入转发,开启IP动态伪装 MSS钳制" "/tmp/easytier.log"
|
||||
uci set firewall.easytierzone='zone'
|
||||
uci set firewall.easytierzone.input='ACCEPT'
|
||||
uci set firewall.easytierzone.output='ACCEPT'
|
||||
uci set firewall.easytierzone.forward='ACCEPT'
|
||||
uci set firewall.easytierzone.masq='1'
|
||||
uci set firewall.easytierzone.mtu_fix='1'
|
||||
uci set firewall.easytierzone.name='EasyTier'
|
||||
uci set firewall.easytierzone.network='EasyTier'
|
||||
fi
|
||||
}
|
||||
|
||||
# 设置转发规则
|
||||
# 参数: $1=et_forward 配置值
|
||||
setup_forwarding_rules() {
|
||||
local et_forward="$1"
|
||||
|
||||
if [ "${et_forward#*etfwlan}" != "$et_forward" ]; then
|
||||
log_message "INFO" "easytier" "允许从虚拟网络 EasyTier 到局域网 lan 的流量" "/tmp/easytier.log"
|
||||
uci set firewall.easytierfwlan=forwarding
|
||||
uci set firewall.easytierfwlan.dest='lan'
|
||||
uci set firewall.easytierfwlan.src='EasyTier'
|
||||
else
|
||||
uci -q delete firewall.easytierfwlan
|
||||
fi
|
||||
|
||||
if [ "${et_forward#*etfwwan}" != "$et_forward" ]; then
|
||||
log_message "INFO" "easytier" "允许从虚拟网络 EasyTier 到广域网 wan 的流量" "/tmp/easytier.log"
|
||||
uci set firewall.easytierfwwan=forwarding
|
||||
uci set firewall.easytierfwwan.dest='wan'
|
||||
uci set firewall.easytierfwwan.src='EasyTier'
|
||||
else
|
||||
uci -q delete firewall.easytierfwwan
|
||||
fi
|
||||
|
||||
if [ "${et_forward#*lanfwet}" != "$et_forward" ]; then
|
||||
log_message "INFO" "easytier" "允许从局域网 lan 到虚拟网络 EasyTier 的流量" "/tmp/easytier.log"
|
||||
uci set firewall.lanfweasytier=forwarding
|
||||
uci set firewall.lanfweasytier.dest='EasyTier'
|
||||
uci set firewall.lanfweasytier.src='lan'
|
||||
else
|
||||
uci -q delete firewall.lanfweasytier
|
||||
fi
|
||||
|
||||
if [ "${et_forward#*wanfwet}" != "$et_forward" ]; then
|
||||
log_message "INFO" "easytier" "允许从广域网 wan 到虚拟网络 EasyTier 的流量" "/tmp/easytier.log"
|
||||
uci set firewall.wanfweasytier=forwarding
|
||||
uci set firewall.wanfweasytier.dest='EasyTier'
|
||||
uci set firewall.wanfweasytier.src='wan'
|
||||
else
|
||||
uci -q delete firewall.wanfweasytier
|
||||
fi
|
||||
}
|
||||
|
||||
# 清理所有 EasyTier 防火墙规则
|
||||
clean_firewall_rules() {
|
||||
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_tcp >/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_quic >/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_webserver >/dev/null 2>&1
|
||||
uci -q delete firewall.easytier_webapi >/dev/null 2>&1
|
||||
uci -q delete firewall.easytier_webhtml >/dev/null 2>&1
|
||||
}
|
||||
|
||||
# 设置 Web 控制台防火墙规则
|
||||
# 参数: $1=web_port $2=api_port $3=html_port $4=fw_web $5=fw_api
|
||||
setup_web_firewall() {
|
||||
local web_port="$1"
|
||||
local api_port="$2"
|
||||
local html_port="$3"
|
||||
local fw_web="$4"
|
||||
local fw_api="$5"
|
||||
|
||||
if [ -n "$web_port" ] && [ "$fw_web" = "1" ]; then
|
||||
log_message "INFO" "easytier" "添加防火墙规则 easytier_web 放行服务端口 ${web_port}" "/tmp/easytierweb.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="tcp udp"
|
||||
uci set firewall.easytier_webserver.dest_port="$web_port"
|
||||
uci set firewall.easytier_webserver.enabled="1"
|
||||
fi
|
||||
|
||||
if [ -n "$api_port" ] && [ "$fw_api" = "1" ]; then
|
||||
log_message "INFO" "easytier" "添加防火墙规则 easytier_web 放行API端口 ${api_port}" "/tmp/easytierweb.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="tcp"
|
||||
uci set firewall.easytier_webapi.dest_port="$api_port"
|
||||
uci set firewall.easytier_webapi.enabled="1"
|
||||
fi
|
||||
|
||||
if [ -n "$html_port" ] && [ "$fw_api" = "1" ] && [ "$html_port" != "$api_port" ]; then
|
||||
log_message "INFO" "easytier" "添加防火墙规则 easytier_web 放行html端口 ${html_port}" "/tmp/easytierweb.log"
|
||||
uci -q delete firewall.easytier_webhtml
|
||||
uci set firewall.easytier_webhtml=rule
|
||||
uci set firewall.easytier_webhtml.name="easytier_webhtml"
|
||||
uci set firewall.easytier_webhtml.target="ACCEPT"
|
||||
uci set firewall.easytier_webhtml.src="wan"
|
||||
uci set firewall.easytier_webhtml.proto="tcp"
|
||||
uci set firewall.easytier_webhtml.dest_port="$html_port"
|
||||
uci set firewall.easytier_webhtml.enabled="1"
|
||||
fi
|
||||
}
|
||||
|
||||
# 应用防火墙和网络配置更改
|
||||
apply_network_changes() {
|
||||
[ -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
|
||||
}
|
||||
+89
@@ -0,0 +1,89 @@
|
||||
#!/bin/sh
|
||||
# EasyTier Utility Functions
|
||||
# Common helper functions for EasyTier init scripts
|
||||
|
||||
# 获取时区设置
|
||||
get_tz() {
|
||||
SET_TZ=""
|
||||
[ -e "/etc/localtime" ] && return
|
||||
for tzfile in /etc/TZ /var/etc/TZ; do
|
||||
[ -e "$tzfile" ] || continue
|
||||
tz="$(cat $tzfile 2>/dev/null)"
|
||||
done
|
||||
[ -z "$tz" ] && return
|
||||
SET_TZ=$tz
|
||||
}
|
||||
|
||||
# 获取 CPU 架构
|
||||
get_cpu_arch() {
|
||||
local cputype=$(uname -ms | tr ' ' '_' | tr '[A-Z]' '[a-z]')
|
||||
local cpucore=""
|
||||
|
||||
[ -n "$(echo $cputype | grep -E 'linux.*armv.*')" ] && cpucore="arm"
|
||||
[ -n "$(echo $cputype | grep -E 'linux.*armv7.*')" ] && [ -n "$(cat /proc/cpuinfo | grep vfp)" ] && cpucore="armv7"
|
||||
[ -n "$(echo $cputype | grep -E 'linux.*aarch64.*|linux.*armv8.*')" ] && cpucore="aarch64"
|
||||
[ -n "$(echo $cputype | grep -E 'linux.*86.*')" ] && cpucore="i386"
|
||||
[ -n "$(echo $cputype | grep -E 'linux.*86_64.*')" ] && cpucore="x86_64"
|
||||
|
||||
if [ -n "$(echo $cputype | grep -E 'linux.*mips.*')" ]; then
|
||||
local mipstype=$(echo -n I | hexdump -o 2>/dev/null | awk '{ print substr($2,6,1); exit}')
|
||||
[ "$mipstype" = "0" ] && cpucore="mips" || cpucore="mipsel"
|
||||
fi
|
||||
|
||||
echo "$cpucore"
|
||||
}
|
||||
|
||||
# 统一日志记录
|
||||
log_message() {
|
||||
local level="$1"
|
||||
local component="$2"
|
||||
local message="$3"
|
||||
local logfile="${4:-/tmp/easytier.log}"
|
||||
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') ${component} : ${message}" >> "$logfile"
|
||||
}
|
||||
|
||||
# 日志大小管理
|
||||
manage_log_size() {
|
||||
local logfile="$1"
|
||||
local max_size_kb="${2:-5120}"
|
||||
local keep_lines="${3:-500}"
|
||||
|
||||
while true; do
|
||||
local log_size=$(ls -l "$logfile" 2>/dev/null | awk '{print int($5/1024)}')
|
||||
if [ "${log_size:-0}" -gt "$max_size_kb" ]; then
|
||||
tail -n "$keep_lines" "$logfile" > "${logfile}.tmp"
|
||||
mv "${logfile}.tmp" "$logfile"
|
||||
fi
|
||||
sleep 300
|
||||
done
|
||||
}
|
||||
|
||||
# 获取可用磁盘空间 (KB)
|
||||
get_available_space() {
|
||||
local path="$1"
|
||||
local size=$(df -k | awk '/\/overlay$/ {sub(/K$/, "", $4); print $4}')
|
||||
[ -z "$size" ] && size=$(df -kP "$path" 2>/dev/null | awk 'NR==2 {print $(NF-2)}')
|
||||
echo "${size:-0}"
|
||||
}
|
||||
|
||||
# 安全执行命令并返回结果
|
||||
safe_exec() {
|
||||
local cmd="$1"
|
||||
local result=$(eval "$cmd" 2>/dev/null)
|
||||
echo "$result"
|
||||
}
|
||||
|
||||
# 检查进程是否运行
|
||||
is_process_running() {
|
||||
local process_name="$1"
|
||||
pgrep -f "$process_name" >/dev/null 2>&1
|
||||
return $?
|
||||
}
|
||||
|
||||
# 停止进程
|
||||
stop_process() {
|
||||
local process_name="$1"
|
||||
ps | grep "$process_name" | grep -v grep | awk '{print $1}' | xargs kill >/dev/null 2>&1
|
||||
ps | grep "$process_name" | grep -v grep | awk '{print $1}' | xargs kill -9 >/dev/null 2>&1
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"luci-app-easytier": {
|
||||
"description": "Grant UCI access for luci-app-easytier",
|
||||
"read": {
|
||||
"uci": [ "easytier" ]
|
||||
},
|
||||
"write": {
|
||||
"uci": [ "easytier" ]
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user