diff --git a/de12系统代理 b/de12系统代理 index 89d9aff..639b32f 100644 --- a/de12系统代理 +++ b/de12系统代理 @@ -1,83 +1,111 @@ -cat << 'EOF' > super_proxy.sh +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} 全能版·临时全局代理注入助手 ${PLAIN}" -echo -e "${BLUE}=======================================${PLAIN}" -echo -e "${YELLOW}特性: 环境变量注入 + Sudo穿透 + 强制代理(Proxychains)${PLAIN}" -echo -e "${YELLOW}寿命: 仅限当前窗口,关闭窗口或重启系统后【彻底失效】${PLAIN}\n" +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" +PROXY_IP="45.192.240.121" +PROXY_PORT="21628" +PROXY_URL="socks5://${PROXY_IP}:${PROXY_PORT}" -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} +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 -PROXY_URL="${DEFAULT_PROTO}://${PROXY_IP}:${PROXY_PORT}" - -echo -e "\n${BLUE}[1/4] 注入全套环境变量...${PLAIN}" +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}" - -echo -e "${BLUE}[2/4] 配置 Sudo 环境穿透...${PLAIN}" -# 让 sudo 命令自动带上 -E 参数,继承当前的环境变量 +export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com,.aliyuncs.com" alias sudo='sudo -E' -echo -e "${BLUE}[3/4] 部署临时强制代理 (Proxychains)...${PLAIN}" -# 检查并静默安装 proxychains4 (软件本身会安装,但配置是临时的) -if ! command -v proxychains4 &> /dev/null; then - echo -e "${YELLOW}检测到缺少 proxychains4 组件,正在通过包管理器临时安装...${PLAIN}" - sudo apt-get update -qq && sudo apt-get install proxychains4 -y -qq +# 测试终端变量 +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 -# 在 /tmp 生成临时配置文件 (系统重启后 /tmp 会被自动清空,不留痕迹) -TEMP_PC_CONF="/tmp/temp_proxychains_$$.conf" +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 -proxy_dns remote_dns_subnet 224 tcp_read_time_out 15000 tcp_connect_time_out 8000 [ProxyList] -$DEFAULT_PROTO $PROXY_IP $PROXY_PORT +socks5 $PROXY_IP $PROXY_PORT CONF - -# 创建快捷别名 'pc',调用临时配置文件 alias pc="proxychains4 -q -f $TEMP_PC_CONF" -echo -e "${BLUE}[4/4] 验证出口网络...${PLAIN}" -# 优先使用强制代理测试连通性 -TEST_IP=$(pc curl -L --max-time 5 -s ip.gs) - -if [ -n "$TEST_IP" ]; then - echo -e "\n${GREEN}=======================================${PLAIN}" - echo -e "${GREEN}网络已全面打通!当前出口 IP: ${YELLOW}${TEST_IP}${PLAIN}" - echo -e "${GREEN}=======================================${PLAIN}" - echo -e "【使用秘籍】:" - echo -e "1. ${YELLOW}听话的程序${PLAIN}: 直接运行 (如 wget, curl),环境变量已生效。" - echo -e "2. ${YELLOW}需提权操作${PLAIN}: 直接用 sudo (已配置穿透,不掉代理)。" - echo -e "3. ${YELLOW}不听话的程序${PLAIN}: 命令前加 ${GREEN}pc${PLAIN} (例如: ${GREEN}pc apt update${PLAIN} 或 ${GREEN}pc ./install.sh${PLAIN})。" - echo -e "4. ${YELLOW}绝对领域${PLAIN}: 运行 ${GREEN}pc bash${PLAIN} ,将开启一个被死死按在代理里的子终端。" - echo -e "\n${RED}[提示] 退出当前窗口、敲击 exit,或重启机器,以上所有魔法自动消失。${PLAIN}" +# 测试 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 "\n${RED}[失败] 代理节点无法连接,请检查 IP、端口或防火墙状态!${PLAIN}" + 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 $TEMP_PC_CONF -fi + 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 \ No newline at end of file