111 lines
4.4 KiB
Plaintext
111 lines
4.4 KiB
Plaintext
cat << 'EOF' > ultimate_proxy.sh
|
||
#!/bin/bash
|
||
|
||
RED='\033[31m'
|
||
GREEN='\033[32m'
|
||
YELLOW='\033[33m'
|
||
BLUE='\033[34m'
|
||
PLAIN='\033[0m'
|
||
|
||
echo -e "${BLUE}=====================================================${PLAIN}"
|
||
echo -e "${BLUE} 终极自愈版·全局代理与 Docker 穿透助手 (含还原机制) ${PLAIN}"
|
||
echo -e "${BLUE}=====================================================${PLAIN}"
|
||
|
||
PROXY_IP="45.192.240.121"
|
||
PROXY_PORT="21628"
|
||
PROXY_URL="socks5://${PROXY_IP}:${PROXY_PORT}"
|
||
|
||
echo -e "\n${BLUE}[阶段 1] 依赖与环境自检...${PLAIN}"
|
||
if ! command -v proxychains4 &> /dev/null; then
|
||
echo -e "${YELLOW}缺少 proxychains4,尝试自动安装...${PLAIN}"
|
||
if ! apt-get install proxychains4 -y -qq >/dev/null 2>&1; then
|
||
echo -e "${RED}Apt 源可能损坏,自动切换 Debian 12 官方源修复...${PLAIN}"
|
||
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 2>/dev/null
|
||
sudo bash -c 'cat << SRC > /etc/apt/sources.list
|
||
deb http://deb.debian.org/debian bookworm main
|
||
deb http://deb.debian.org/debian bookworm-updates main
|
||
deb http://security.debian.org/debian-security bookworm-security main
|
||
SRC'
|
||
sudo apt-get update -qq && sudo apt-get install proxychains4 curl -y -qq
|
||
fi
|
||
fi
|
||
|
||
echo -e "${BLUE}[阶段 2] 注入终端环境变量...${PLAIN}"
|
||
export http_proxy="${PROXY_URL}"
|
||
export https_proxy="${PROXY_URL}"
|
||
export all_proxy="${PROXY_URL}"
|
||
export HTTP_PROXY="${PROXY_URL}"
|
||
export HTTPS_PROXY="${PROXY_URL}"
|
||
export ALL_PROXY="${PROXY_URL}"
|
||
export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com,.aliyuncs.com"
|
||
alias sudo='sudo -E'
|
||
|
||
# 测试终端变量
|
||
TEST_1=$(curl -L --max-time 5 -s ip.gs)
|
||
if [ "$TEST_1" == "$PROXY_IP" ]; then
|
||
echo -e "${GREEN} -> 终端环境变量注入成功!${PLAIN}"
|
||
else
|
||
echo -e "${RED} -> 终端环境变量测试失败,请检查代理节点状态。${PLAIN}"
|
||
fi
|
||
|
||
echo -e "${BLUE}[阶段 3] 部署 Proxychains (修复 Error 52 DNS问题)...${PLAIN}"
|
||
TEMP_PC_CONF="/tmp/ultimate_pc.conf"
|
||
# 核心修复:移除 proxy_dns,防止不支持 UDP 的节点断连报错
|
||
cat << CONF > $TEMP_PC_CONF
|
||
strict_chain
|
||
remote_dns_subnet 224
|
||
tcp_read_time_out 15000
|
||
tcp_connect_time_out 8000
|
||
[ProxyList]
|
||
socks5 $PROXY_IP $PROXY_PORT
|
||
CONF
|
||
alias pc="proxychains4 -q -f $TEMP_PC_CONF"
|
||
|
||
# 测试 Proxychains
|
||
TEST_2=$(pc curl -L --max-time 5 -s ip.gs 2>/dev/null)
|
||
if [ "$TEST_2" == "$PROXY_IP" ]; then
|
||
echo -e "${GREEN} -> 强制劫持工具 (pc) 部署成功,Error 52 已解决!${PLAIN}"
|
||
else
|
||
echo -e "${YELLOW} -> pc 测试失败,但如果阶段 2 成功,普通命令仍可用。${PLAIN}"
|
||
fi
|
||
|
||
echo -e "${BLUE}[阶段 4] 突破 Docker 守护进程隔离...${PLAIN}"
|
||
if command -v docker &> /dev/null; then
|
||
mkdir -p /etc/systemd/system/docker.service.d
|
||
# 为 Docker 后台服务单独注入代理
|
||
cat << DOCKER_CONF > /etc/systemd/system/docker.service.d/http-proxy.conf
|
||
[Service]
|
||
Environment="HTTP_PROXY=${PROXY_URL}"
|
||
Environment="HTTPS_PROXY=${PROXY_URL}"
|
||
Environment="NO_PROXY=localhost,127.0.0.1,.aliyuncs.com"
|
||
DOCKER_CONF
|
||
systemctl daemon-reload
|
||
systemctl restart docker
|
||
echo -e "${GREEN} -> Docker 代理已挂载并重启完毕!${PLAIN}"
|
||
else
|
||
echo -e "${YELLOW} -> 未检测到 Docker,跳过此步骤。${PLAIN}"
|
||
fi
|
||
|
||
echo -e "\n${BLUE}[阶段 5] 生成一键清场工具...${PLAIN}"
|
||
# 定义清理函数,满足你“不想终身全局”的需求
|
||
proxy_clean() {
|
||
echo -e "${YELLOW}正在清除所有代理痕迹...${PLAIN}"
|
||
unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY
|
||
unalias sudo pc 2>/dev/null
|
||
rm -f /tmp/ultimate_pc.conf
|
||
if [ -f /etc/systemd/system/docker.service.d/http-proxy.conf ]; then
|
||
rm -f /etc/systemd/system/docker.service.d/http-proxy.conf
|
||
systemctl daemon-reload
|
||
systemctl restart docker
|
||
fi
|
||
echo -e "${GREEN}清理完毕!系统已恢复直连状态。${PLAIN}"
|
||
}
|
||
echo -e "${GREEN} -> 已生成 'proxy_clean' 命令。${PLAIN}"
|
||
|
||
echo -e "\n${GREEN}=====================================================${PLAIN}"
|
||
echo -e "${GREEN} 所有网络魔法已就绪!${PLAIN}"
|
||
echo -e " 1. 你现在可以直接运行 ${YELLOW}docker compose up -d${PLAIN} 拉取镜像了。"
|
||
echo -e " 2. 遇到不听话的脚本,命令前加 ${YELLOW}pc${PLAIN} (如 pc wget ...)。"
|
||
echo -e " 3. 用完之后,想恢复原状,只需输入: ${RED}proxy_clean${PLAIN}"
|
||
echo -e "${GREEN}=====================================================${PLAIN}"
|
||
EOF |