mirror of
https://github.com/schroinerxy/Sing-box.git
synced 2026-06-22 04:35:49 +08:00
Create sb_00.sh
This commit is contained in:
@@ -0,0 +1,369 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 定义颜色
|
||||
re="\033[0m"
|
||||
red="\033[1;91m"
|
||||
green="\e[1;32m"
|
||||
yellow="\e[1;33m"
|
||||
purple="\e[1;35m"
|
||||
red() { echo -e "\e[1;91m$1\033[0m"; }
|
||||
green() { echo -e "\e[1;32m$1\033[0m"; }
|
||||
yellow() { echo -e "\e[1;33m$1\033[0m"; }
|
||||
purple() { echo -e "\e[1;35m$1\033[0m"; }
|
||||
reading() { read -p "$(red "$1")" "$2"; }
|
||||
|
||||
USERNAME=$(whoami)
|
||||
HOSTNAME=$(hostname)
|
||||
export UUID=${UUID:-'bc97f674-c578-4940-9234-0a1da46041b9'}
|
||||
export NEZHA_SERVER=${NEZHA_SERVER:-''}
|
||||
export NEZHA_PORT=${NEZHA_PORT:-'5555'}
|
||||
export NEZHA_KEY=${NEZHA_KEY:-''}
|
||||
export ARGO_DOMAIN=${ARGO_DOMAIN:-''}
|
||||
export ARGO_AUTH=${ARGO_AUTH:-''}
|
||||
export VMESS_PORT=${VMESS_PORT:-'40000'}
|
||||
export TUIC_PORT=${TUIC_PORT:-'50000'}
|
||||
export HY2_PORT=${HY2_PORT:-'60000'}
|
||||
|
||||
[[ "$HOSTNAME" == "s1.ct8.pl" ]] && WORKDIR="domains/${USERNAME}.ct8.pl/logs" || WORKDIR="domains/${USERNAME}.serv00.net/logs"
|
||||
[ -d "$WORKDIR" ] || (mkdir -p "$WORKDIR" && chmod 777 "$WORKDIR")
|
||||
ps -ef | grep $(whoami) | grep -v sshd | grep -v grep | awk '{print $2}' | xargs kill -9
|
||||
|
||||
download_singbox() {
|
||||
purple "正在安装中,请稍后..."
|
||||
ARCH=$(uname -m) && DOWNLOAD_DIR="." && mkdir -p "$DOWNLOAD_DIR" && FILE_INFO=()
|
||||
if [ "$ARCH" == "arm" ] || [ "$ARCH" == "arm64" ] || [ "$ARCH" == "aarch64" ]; then
|
||||
FILE_INFO=("https://github.com/eooce/test/releases/download/arm64/sb web" "https://github.com/eooce/test/releases/download/arm64/bot13 bot" "https://github.com/eooce/test/releases/download/ARM/swith npm")
|
||||
elif [ "$ARCH" == "amd64" ] || [ "$ARCH" == "x86_64" ] || [ "$ARCH" == "x86" ]; then
|
||||
FILE_INFO=("https://eooce.2go.us.kg/web web" "https://eooce.2go.us.kg/bot bot" "https://eooce.2go.us.kg/npm npm")
|
||||
else
|
||||
echo "Unsupported architecture: $ARCH"
|
||||
exit 1
|
||||
fi
|
||||
for entry in "${FILE_INFO[@]}"; do
|
||||
URL=$(echo "$entry" | cut -d ' ' -f 1)
|
||||
NEW_FILENAME=$(echo "$entry" | cut -d ' ' -f 2)
|
||||
FILENAME="$DOWNLOAD_DIR/$NEW_FILENAME"
|
||||
if [ -e "$FILENAME" ]; then
|
||||
green "$FILENAME already exists, Skipping download"
|
||||
else
|
||||
wget -q -O "$FILENAME" "$URL"
|
||||
green "Downloading $FILENAME"
|
||||
fi
|
||||
chmod +x $FILENAME
|
||||
done
|
||||
}
|
||||
|
||||
generate_config() {
|
||||
|
||||
openssl ecparam -genkey -name prime256v1 -out "private.key"
|
||||
openssl req -new -x509 -days 3650 -key "private.key" -out "cert.pem" -subj "/CN=$USERNAME.serv00.net"
|
||||
|
||||
cat > config.json << EOF
|
||||
{
|
||||
"log": {
|
||||
"disabled": true,
|
||||
"level": "info",
|
||||
"timestamp": true
|
||||
},
|
||||
"dns": {
|
||||
"servers": [
|
||||
{
|
||||
"tag": "google",
|
||||
"address": "tls://8.8.8.8",
|
||||
"strategy": "ipv4_only",
|
||||
"detour": "direct"
|
||||
}
|
||||
],
|
||||
"rules": [
|
||||
{
|
||||
"rule_set": [
|
||||
"geosite-openai"
|
||||
],
|
||||
"server": "wireguard"
|
||||
},
|
||||
{
|
||||
"rule_set": [
|
||||
"geosite-netflix"
|
||||
],
|
||||
"server": "wireguard"
|
||||
},
|
||||
{
|
||||
"rule_set": [
|
||||
"geosite-category-ads-all"
|
||||
],
|
||||
"server": "block"
|
||||
}
|
||||
],
|
||||
"final": "google",
|
||||
"strategy": "",
|
||||
"disable_cache": false,
|
||||
"disable_expire": false
|
||||
},
|
||||
"inbounds": [
|
||||
{
|
||||
"tag": "hysteria-in",
|
||||
"type": "hysteria2",
|
||||
"listen": "::",
|
||||
"listen_port": $HY2_PORT,
|
||||
"users": [
|
||||
{
|
||||
"password": "$UUID"
|
||||
}
|
||||
],
|
||||
"masquerade": "https://bing.com",
|
||||
"tls": {
|
||||
"enabled": true,
|
||||
"alpn": [
|
||||
"h3"
|
||||
],
|
||||
"certificate_path": "cert.pem",
|
||||
"key_path": "private.key"
|
||||
}
|
||||
},
|
||||
{
|
||||
"tag": "vmess-ws-in",
|
||||
"type": "vmess",
|
||||
"listen": "::",
|
||||
"listen_port": $VMESS_PORT,
|
||||
"users": [
|
||||
{
|
||||
"uuid": "$UUID"
|
||||
}
|
||||
],
|
||||
"transport": {
|
||||
"type": "ws",
|
||||
"path": "/vmess",
|
||||
"early_data_header_name": "Sec-WebSocket-Protocol"
|
||||
}
|
||||
},
|
||||
{
|
||||
"tag": "tuic-in",
|
||||
"type": "tuic",
|
||||
"listen": "::",
|
||||
"listen_port": $TUIC_PORT,
|
||||
"users": [
|
||||
{
|
||||
"uuid": "$UUID",
|
||||
"password": "admin123"
|
||||
}
|
||||
],
|
||||
"congestion_control": "bbr",
|
||||
"tls": {
|
||||
"enabled": true,
|
||||
"alpn": [
|
||||
"h3"
|
||||
],
|
||||
"certificate_path": "cert.pem",
|
||||
"key_path": "private.key"
|
||||
}
|
||||
}
|
||||
|
||||
],
|
||||
"outbounds": [
|
||||
{
|
||||
"type": "direct",
|
||||
"tag": "direct"
|
||||
},
|
||||
{
|
||||
"type": "block",
|
||||
"tag": "block"
|
||||
},
|
||||
{
|
||||
"type": "dns",
|
||||
"tag": "dns-out"
|
||||
},
|
||||
{
|
||||
"type": "wireguard",
|
||||
"tag": "wireguard-out",
|
||||
"server": "162.159.195.100",
|
||||
"server_port": 4500,
|
||||
"local_address": [
|
||||
"172.16.0.2/32",
|
||||
"2606:4700:110:83c7:b31f:5858:b3a8:c6b1/128"
|
||||
],
|
||||
"private_key": "mPZo+V9qlrMGCZ7+E6z2NI6NOV34PD++TpAR09PtCWI=",
|
||||
"peer_public_key": "bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=",
|
||||
"reserved": [
|
||||
26,
|
||||
21,
|
||||
228
|
||||
]
|
||||
}
|
||||
],
|
||||
"route": {
|
||||
"rules": [
|
||||
{
|
||||
"protocol": "dns",
|
||||
"outbound": "dns-out"
|
||||
},
|
||||
{
|
||||
"ip_is_private": true,
|
||||
"outbound": "direct"
|
||||
},
|
||||
{
|
||||
"rule_set": [
|
||||
"geosite-openai"
|
||||
],
|
||||
"outbound": "wireguard-out"
|
||||
},
|
||||
{
|
||||
"rule_set": [
|
||||
"geosite-netflix"
|
||||
],
|
||||
"outbound": "wireguard-out"
|
||||
},
|
||||
{
|
||||
"rule_set": [
|
||||
"geosite-category-ads-all"
|
||||
],
|
||||
"outbound": "block"
|
||||
}
|
||||
],
|
||||
"rule_set": [
|
||||
{
|
||||
"tag": "geosite-netflix",
|
||||
"type": "remote",
|
||||
"format": "binary",
|
||||
"url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-netflix.srs",
|
||||
"download_detour": "direct"
|
||||
},
|
||||
{
|
||||
"tag": "geosite-openai",
|
||||
"type": "remote",
|
||||
"format": "binary",
|
||||
"url": "https://raw.githubusercontent.com/MetaCubeX/meta-rules-dat/sing/geo/geosite/openai.srs",
|
||||
"download_detour": "direct"
|
||||
},
|
||||
{
|
||||
"tag": "geosite-category-ads-all",
|
||||
"type": "remote",
|
||||
"format": "binary",
|
||||
"url": "https://raw.githubusercontent.com/SagerNet/sing-geosite/rule-set/geosite-category-ads-all.srs",
|
||||
"download_detour": "direct"
|
||||
}
|
||||
],
|
||||
"final": "direct"
|
||||
},
|
||||
"experimental": {
|
||||
"cache_file": {
|
||||
"path": "cache.db",
|
||||
"cache_id": "mycacheid",
|
||||
"store_fakeip": true
|
||||
}
|
||||
}
|
||||
}
|
||||
EOF
|
||||
}
|
||||
|
||||
argo_configure() {
|
||||
if [[ -z $ARGO_AUTH || -z $ARGO_DOMAIN ]]; then
|
||||
green "ARGO_DOMAIN or ARGO_AUTH is empty,use quick tunnel"
|
||||
return
|
||||
fi
|
||||
|
||||
if [[ $ARGO_AUTH =~ TunnelSecret ]]; then
|
||||
echo $ARGO_AUTH > tunnel.json
|
||||
cat > tunnel.yml << EOF
|
||||
tunnel: $(cut -d\" -f12 <<< "$ARGO_AUTH")
|
||||
credentials-file: tunnel.json
|
||||
protocol: http2
|
||||
|
||||
ingress:
|
||||
- hostname: $ARGO_DOMAIN
|
||||
service: http://localhost:$VMESS_PORT
|
||||
originRequest:
|
||||
noTLSVerify: true
|
||||
- service: http_status:404
|
||||
EOF
|
||||
else
|
||||
green "ARGO_AUTH mismatch TunnelSecret,use token connect to tunnel"
|
||||
fi
|
||||
}
|
||||
|
||||
run_sb() {
|
||||
if [ -e npm ]; then
|
||||
tlsPorts=("443" "8443" "2096" "2087" "2083" "2053")
|
||||
if [[ "${tlsPorts[*]}" =~ "${NEZHA_PORT}" ]]; then
|
||||
NEZHA_TLS="--tls"
|
||||
else
|
||||
NEZHA_TLS=""
|
||||
fi
|
||||
if [ -n "$NEZHA_SERVER" ] && [ -n "$NEZHA_PORT" ] && [ -n "$NEZHA_KEY" ]; then
|
||||
export TMPDIR=$(pwd)
|
||||
nohup ./npm -s ${NEZHA_SERVER}:${NEZHA_PORT} -p ${NEZHA_KEY} ${NEZHA_TLS} >/dev/null 2>&1 &
|
||||
sleep 2
|
||||
pgrep -x "npm" > /dev/null && green "npm is running" || { red "npm is not running, restarting..."; pkill -x "npm" && nohup ./npm -s "${NEZHA_SERVER}:${NEZHA_PORT}" -p "${NEZHA_KEY}" ${NEZHA_TLS} >/dev/null 2>&1 & sleep 2; purple "npm restarted"; }
|
||||
else
|
||||
purple "NEZHA variable is empty,skiping runing"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -e web ]; then
|
||||
nohup ./web run -c config.json >/dev/null 2>&1 &
|
||||
sleep 2
|
||||
pgrep -x "web" > /dev/null && green "web is running" || { red "web is not running, restarting..."; pkill -x "web" && nohup ./web run -c config.json >/dev/null 2>&1 & sleep 2; purple "web restarted"; }
|
||||
fi
|
||||
|
||||
if [ -e bot ]; then
|
||||
if [[ $ARGO_AUTH =~ ^[A-Z0-9a-z=]{120,250}$ ]]; then
|
||||
args="tunnel --edge-ip-version auto --no-autoupdate --protocol http2 run --token ${ARGO_AUTH}"
|
||||
elif [[ $ARGO_AUTH =~ TunnelSecret ]]; then
|
||||
args="tunnel --edge-ip-version auto --config tunnel.yml run"
|
||||
else
|
||||
args="tunnel --edge-ip-version auto --no-autoupdate --protocol http2 --logfile boot.log --loglevel info --url http://localhost:$VMESS_PORT"
|
||||
fi
|
||||
nohup ./bot $args >/dev/null 2>&1 &
|
||||
sleep 2
|
||||
pgrep -x "bot" > /dev/null && green "bot is running" || { red "bot is not running, restarting..."; pkill -x "bot" && nohup ./bot "${args}" >/dev/null 2>&1 & sleep 2; purple "bot restarted"; }
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
get_links(){
|
||||
get_argodomain() {
|
||||
if [[ -n $ARGO_AUTH ]]; then
|
||||
echo "$ARGO_DOMAIN"
|
||||
else
|
||||
grep -oE 'https://[[:alnum:]+\.-]+\.trycloudflare\.com' boot.log | sed 's@https://@@'
|
||||
fi
|
||||
}
|
||||
argodomain=$(get_argodomain)
|
||||
echo -e "\e[1;32mArgoDomain:\e[1;35m${argodomain}\e[0m\n"
|
||||
sleep 1
|
||||
IP=$(curl -s ipv4.ip.sb || { ipv6=$(curl -s --max-time 1 ipv6.ip.sb); echo "[$ipv6]"; })
|
||||
sleep 1
|
||||
ISP=$(curl -s https://speed.cloudflare.com/meta | awk -F\" '{print $26"-"$18}' | sed -e 's/ /_/g')
|
||||
sleep 1
|
||||
yellow "注意:v2ray或其他软件的跳过证书验证需设置为true,否则hy2或tuic节点可能不通\n"
|
||||
cat > list.txt <<EOF
|
||||
vmess://$(echo "{ \"v\": \"2\", \"ps\": \"$ISP\", \"add\": \"$IP\", \"port\": \"$VMESS_PORT\", \"id\": \"$UUID\", \"aid\": \"0\", \"scy\": \"none\", \"net\": \"ws\", \"type\": \"none\", \"host\": \"\", \"path\": \"/vmess?ed=2048\", \"tls\": \"\", \"sni\": \"\", \"alpn\": \"\", \"fp\": \"\"}" | base64 -w0)
|
||||
|
||||
vmess://$(echo "{ \"v\": \"2\", \"ps\": \"$ISP\", \"add\": \"www.visa.com.tw\", \"port\": \"443\", \"id\": \"$UUID\", \"aid\": \"0\", \"scy\": \"none\", \"net\": \"ws\", \"type\": \"none\", \"host\": \"$argodomain\", \"path\": \"/vmess?ed=2048\", \"tls\": \"tls\", \"sni\": \"$argodomain\", \"alpn\": \"\", \"fp\": \"\"}" | base64 -w0)
|
||||
|
||||
hysteria2://$UUID@$IP:$HY2_PORT/?sni=www.bing.com&alpn=h3&insecure=1#$ISP
|
||||
|
||||
tuic://$UUID:admin123@$IP:$TUIC_PORT?sni=www.bing.com&congestion_control=bbr&udp_relay_mode=native&alpn=h3&allow_insecure=1#$ISP
|
||||
EOF
|
||||
cat list.txt
|
||||
purple "list.txt saved successfully"
|
||||
purple "Running done!"
|
||||
yellow "Serv00|ct8老王sing-box一键四协议安装脚本(vmess-ws|vmess-ws-tls(argo)|hysteria2|tuic)\n"
|
||||
echo -e "${green}issues反馈:${re}${yellow}https://github.com/eooce/Sing-box/issues${re}\n"
|
||||
echo -e "${green}反馈论坛:${re}${yellow}https://bbs.vps8.me${re}\n"
|
||||
echo -e "${green}TG反馈群组:${re}${yellow}https://t.me/vps888${re}\n"
|
||||
purple "转载请著名出处,请勿滥用\n"
|
||||
sleep 3
|
||||
rm -rf web bot npm boot.log config.json sb.log core tunnel.yml tunnel.json fake_useragent_0.2.0.json
|
||||
|
||||
}
|
||||
|
||||
install_singbox() {
|
||||
clear
|
||||
cd $WORKDIR
|
||||
download_singbox && wait
|
||||
generate_config
|
||||
argo_configure
|
||||
run_sb && sleep 3
|
||||
get_links
|
||||
}
|
||||
install_singbox
|
||||
Reference in New Issue
Block a user