126 lines
5.1 KiB
Bash
126 lines
5.1 KiB
Bash
#!/bin/bash
|
||
|
||
# ==========================================
|
||
# 全能自愈版·临时全局代理注入助手 (带 Docker 选择)
|
||
# 适用环境: Debian / Ubuntu 等
|
||
# ==========================================
|
||
|
||
# 颜色定义
|
||
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}"
|
||
|
||
# 默认代理节点配置
|
||
DEFAULT_IP="45.192.240.121"
|
||
DEFAULT_PORT="21628"
|
||
DEFAULT_PROTO="socks5"
|
||
|
||
read -p "请输入代理 IP [$DEFAULT_IP]: " PROXY_IP
|
||
PROXY_IP=${PROXY_IP:-$DEFAULT_IP}
|
||
read -p "请输入代理端口 [$DEFAULT_PORT]: " PROXY_PORT
|
||
PROXY_PORT=${PROXY_PORT:-$DEFAULT_PORT}
|
||
|
||
PROXY_URL="${DEFAULT_PROTO}://${PROXY_IP}:${PROXY_PORT}"
|
||
|
||
echo -e "\n${BLUE}[1/6] 检查并修复系统软件源...${PLAIN}"
|
||
if ! apt-get update -qq 2>/dev/null; then
|
||
echo -e "${YELLOW}检测到当前软件源失效,正在自动备份并替换为 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
|
||
echo -e "${GREEN} -> 软件源修复完成!${PLAIN}"
|
||
else
|
||
echo -e "${GREEN} -> 软件源状态正常。${PLAIN}"
|
||
fi
|
||
|
||
echo -e "${BLUE}[2/6] 检查并安装必要依赖...${PLAIN}"
|
||
if ! command -v proxychains4 &> /dev/null || ! command -v curl &> /dev/null; then
|
||
echo -e "${YELLOW}正在自动安装 proxychains4 和 curl...${PLAIN}"
|
||
sudo apt-get install -y -qq proxychains4 curl >/dev/null 2>&1
|
||
echo -e "${GREEN} -> 依赖安装完毕!${PLAIN}"
|
||
else
|
||
echo -e "${GREEN} -> 依赖已存在。${PLAIN}"
|
||
fi
|
||
|
||
echo -e "${BLUE}[3/6] 注入底层环境变量与 Sudo 穿透...${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'
|
||
echo -e "${GREEN} -> 终端变量注入成功!${PLAIN}"
|
||
|
||
echo -e "${BLUE}[4/6] 部署临时强制代理 (修复 Error 52)...${PLAIN}"
|
||
TEMP_PC_CONF="/tmp/ultimate_pc.conf"
|
||
cat << CONF > $TEMP_PC_CONF
|
||
strict_chain
|
||
remote_dns_subnet 224
|
||
tcp_read_time_out 15000
|
||
tcp_connect_time_out 8000
|
||
[ProxyList]
|
||
$DEFAULT_PROTO $PROXY_IP $PROXY_PORT
|
||
CONF
|
||
alias pc="proxychains4 -q -f $TEMP_PC_CONF"
|
||
echo -e "${GREEN} -> pc 强制代理工具就绪!${PLAIN}"
|
||
|
||
echo -e "${BLUE}[5/6] 突破 Docker 守护进程隔离 (交互)...${PLAIN}"
|
||
if command -v docker &> /dev/null; then
|
||
echo -e "${YELLOW}检测到系统已安装 Docker。${PLAIN}"
|
||
read -p "是否为 Docker 守护进程添加代理?(解决拉取镜像超时问题) [y/n, 默认: y]: " ADD_DOCKER
|
||
ADD_DOCKER=${ADD_DOCKER:-y}
|
||
|
||
if [[ "$ADD_DOCKER" =~ ^[Yy]$ ]]; then
|
||
echo -e "${YELLOW}正在配置并重启 Docker...${PLAIN}"
|
||
sudo mkdir -p /etc/systemd/system/docker.service.d
|
||
sudo bash -c "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"
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl restart docker
|
||
echo -e "${GREEN} -> Docker 代理已挂载并重启完毕!${PLAIN}"
|
||
else
|
||
echo -e "${GREEN} -> 已跳过 Docker 代理配置。${PLAIN}"
|
||
fi
|
||
else
|
||
echo -e "${YELLOW} -> 未检测到 Docker,跳过此步骤。${PLAIN}"
|
||
fi
|
||
|
||
echo -e "${BLUE}[6/6] 生成一键清场工具...${PLAIN}"
|
||
# 将 proxy_clean 声明为函数留在内存里
|
||
proxy_clean() {
|
||
echo -e "${YELLOW}正在清除所有代理痕迹...${PLAIN}"
|
||
unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY no_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
|
||
sudo rm -f /etc/systemd/system/docker.service.d/http-proxy.conf
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl restart docker
|
||
echo -e "${GREEN} -> Docker 代理已卸载并重启服务。${PLAIN}"
|
||
fi
|
||
echo -e "${GREEN}清理完毕!系统已彻底恢复直连状态。${PLAIN}"
|
||
}
|
||
echo -e "${GREEN} -> 已生成 'proxy_clean' 命令。${PLAIN}"
|
||
|
||
echo -e "\n${GREEN}=====================================================${PLAIN}"
|
||
echo -e "${GREEN} 所有网络魔法已就绪!${PLAIN}"
|
||
echo -e " 1. 终端环境已全面代理 (curl, wget 畅通无阻)。"
|
||
echo -e " 2. 遇到不听话的顽固脚本,命令前加 ${YELLOW}pc${PLAIN} (如: pc ./install.sh)。"
|
||
echo -e " 3. 完事后想恢复原状,只需输入命令: ${RED}proxy_clean${PLAIN}"
|
||
echo -e "${GREEN}=====================================================${PLAIN}" |