Article

为 Ubuntu AI 服务器配置基于 Mac 局域网代理的分层代理方案,避免 APT 国内镜像绕远,同时支持 GitHub、Docker Hub、PyPI、Hugging Face 和 ComfyUI。

2026/7/21#ubuntu#proxy#git#docker#apt#linux

Ubuntu 服务器代理配置:系统、APT、Git、Docker 与下载工具分层设置

本文记录如何为 Ubuntu 服务器配置代理。

当前网络结构如下:

Mac mini
IP:192.168.2.2
代理端口:7897

        │ 2.5G 有线直连

Ubuntu AI Server

目标不是让所有流量无差别经过代理,而是采用更稳定的分层方案:

  • Ubuntu 官方软件包通过清华镜像直接下载
  • GitHub、Docker Hub、Hugging Face 等国外服务按需使用代理
  • 局域网、SSH、NAS 和本地服务不走代理
  • Git 代理可以快速开启或关闭

一、先确认 Mac 代理允许局域网连接

Ubuntu 要通过 Mac 使用代理,Mac 上的代理程序必须允许 LAN 访问。

在 Clash、Clash Verge、Mihomo、Surge 等软件中检查:

Allow LAN:开启
监听地址:0.0.0.0
端口:7897

不能只监听:

127.0.0.1:7897

在 Mac 上检查监听状态:

lsof -nP -iTCP:7897 -sTCP:LISTEN

理想输出应包含:

*:7897

或者:

0.0.0.0:7897

如果只显示:

127.0.0.1:7897

Ubuntu 无法连接。


二、在 Ubuntu 测试到 Mac 的网络

先确认 Ubuntu 可以访问 Mac:

ping -c 4 192.168.2.2

再测试代理端口:

nc -vz 192.168.2.2 7897

成功时应看到类似:

Connection to 192.168.2.2 7897 port [tcp/*] succeeded!

测试 HTTP 代理:

curl -I -x http://192.168.2.2:7897 https://github.com

成功时通常能看到:

HTTP/1.1 200 Connection established

以及后续的 GitHub HTTP 响应。

如果看到:

Connection refused

说明 Mac 上没有监听该端口,或未开启 LAN 访问。


三、不要让 APT 强制走代理

Ubuntu 已经使用清华 TUNA 镜像时,APT 通常不需要代理。

如果存在旧的 APT 代理配置:

cat /etc/apt/apt.conf.d/80proxy

内容可能是:

Acquire::http::Proxy "http://192.168.2.2:7897";
Acquire::https::Proxy "http://192.168.2.2:7897";

建议删除或备份:

sudo mv /etc/apt/apt.conf.d/80proxy ~/80proxy.bak

然后更新:

sudo apt clean
sudo apt update

如果输出包含:

Hit: https://mirrors.tuna.tsinghua.edu.cn/ubuntu noble InRelease

说明 Ubuntu 软件源可以直接访问。

为什么清华源不需要代理

APT 下载链路应为:

Ubuntu

  └── 清华 TUNA Ubuntu 镜像

而不是:

Ubuntu

  └── Mac 代理

          └── 清华 TUNA Ubuntu 镜像

后者会增加代理压力,也可能因为 Mac 代理未启动而导致整个 apt update 失败。


四、检查并清理失效的软件源

APT 更新失败不一定是代理问题,也可能是第三方软件源失效。

查看全部第三方源:

ls -al /etc/apt/sources.list.d/

例如 OpenRGB PPA 在 Ubuntu 24.04 Noble 上可能返回:

404 Not Found
does not have a Release file

删除失效 PPA:

sudo add-apt-repository --remove ppa:thopiekar/openrgb

如果无法自动删除,可手动查找:

grep -R "thopiekar/openrgb" /etc/apt/sources.list /etc/apt/sources.list.d/

然后删除对应文件:

sudo rm /etc/apt/sources.list.d/对应文件名.list

再次运行:

sudo apt update

五、临时开启当前终端代理

只希望当前终端中的 curlwget、安装脚本等走代理时,可以执行:

export http_proxy=http://192.168.2.2:7897
export https_proxy=http://192.168.2.2:7897
export HTTP_PROXY=http://192.168.2.2:7897
export HTTPS_PROXY=http://192.168.2.2:7897

设置不代理地址:

export no_proxy="localhost,127.0.0.1,::1,192.168.2.0/24"
export NO_PROXY="$no_proxy"

检查:

env | grep -i proxy

关闭当前终端代理:

unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY
unset no_proxy NO_PROXY

这种方式只影响当前 Shell,关闭终端后自动失效。


六、在 Bash 中创建通用代理开关

编辑:

nano ~/.bashrc

加入:

proxy_on() {
    export http_proxy="http://192.168.2.2:7897"
    export https_proxy="http://192.168.2.2:7897"
    export HTTP_PROXY="$http_proxy"
    export HTTPS_PROXY="$https_proxy"
    export no_proxy="localhost,127.0.0.1,::1,192.168.2.0/24"
    export NO_PROXY="$no_proxy"

    echo "Proxy ON: $http_proxy"
}

proxy_off() {
    unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY
    unset no_proxy NO_PROXY

    echo "Proxy OFF"
}

proxy_status() {
    env | grep -i proxy || echo "No proxy variables are active"
}

重新加载:

source ~/.bashrc

以后可以直接使用:

proxy_on
proxy_status
proxy_off

七、Git HTTPS 代理快捷开关

Git 的 http.proxy 只对 HTTPS 仓库有效,例如:

https://github.com/user/repository.git

它不会影响 SSH 地址:

git@github.com:user/repository.git

~/.bashrc 中加入:

gpon() {
    git config --global http.proxy "http://192.168.2.2:7897"
    git config --global https.proxy "http://192.168.2.2:7897"

    echo "Git HTTPS proxy ON"
    git config --global --get http.proxy
}

gpoff() {
    git config --global --unset-all http.proxy 2>/dev/null || true
    git config --global --unset-all https.proxy 2>/dev/null || true

    echo "Git HTTPS proxy OFF"
}

gpstatus() {
    echo "http.proxy  = $(git config --global --get http.proxy || echo '<unset>')"
    echo "https.proxy = $(git config --global --get https.proxy || echo '<unset>')"
}

加载配置:

source ~/.bashrc

使用:

gpon
gpstatus
gpoff

单次 Git 命令使用代理

不修改全局配置:

git -c http.proxy=http://192.168.2.2:7897     -c https.proxy=http://192.168.2.2:7897     clone https://github.com/user/repository.git

八、Docker Daemon 代理

Docker 拉取以下镜像时通常需要代理:

  • docker.io
  • ghcr.io
  • NVIDIA Container Toolkit 相关资源
  • AI-Dock、Open WebUI、ComfyUI 镜像

创建 systemd 配置目录:

sudo mkdir -p /etc/systemd/system/docker.service.d

创建配置:

sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf

写入:

[Service]
Environment="HTTP_PROXY=http://192.168.2.2:7897"
Environment="HTTPS_PROXY=http://192.168.2.2:7897"
Environment="NO_PROXY=localhost,127.0.0.1,::1,192.168.2.0/24"

重新加载并重启 Docker:

sudo systemctl daemon-reload
sudo systemctl restart docker

检查:

systemctl show docker --property=Environment

测试:

docker pull hello-world

关闭 Docker 代理

sudo rm /etc/systemd/system/docker.service.d/http-proxy.conf
sudo systemctl daemon-reload
sudo systemctl restart docker

九、Docker Compose 容器内部代理

Docker Daemon 代理只负责拉取镜像,不一定自动传入容器。

ComfyUI、Open WebUI 等容器内部要访问 GitHub、Hugging Face 或 PyPI时,可在 docker-compose.yml 中加入:

services:
  comfyui:
    environment:
      HTTP_PROXY: http://192.168.2.2:7897
      HTTPS_PROXY: http://192.168.2.2:7897
      http_proxy: http://192.168.2.2:7897
      https_proxy: http://192.168.2.2:7897
      NO_PROXY: localhost,127.0.0.1,::1,192.168.2.0/24
      no_proxy: localhost,127.0.0.1,::1,192.168.2.0/24

更新容器:

docker compose up -d --force-recreate

检查容器环境:

docker exec comfyui env | grep -i proxy

十、pip 代理

可以使用单次代理:

pip install requests --proxy http://192.168.2.2:7897

也可以配置用户级代理:

mkdir -p ~/.config/pip
nano ~/.config/pip/pip.conf

写入:

[global]
proxy = http://192.168.2.2:7897
timeout = 120

查看配置:

pip config list

删除代理:

rm ~/.config/pip/pip.conf

如果主要安装常见 Python 包,也可以考虑配置国内 PyPI 镜像,而不是长期使用代理。


十一、Conda 代理

开启:

conda config --set proxy_servers.http http://192.168.2.2:7897
conda config --set proxy_servers.https http://192.168.2.2:7897

查看:

conda config --show proxy_servers

关闭:

conda config --remove-key proxy_servers

十二、Hugging Face 和模型下载

当前终端临时开启代理:

proxy_on

然后使用:

huggingface-cli download 作者名/模型名

或:

wget https://huggingface.co/...

下载结束后关闭:

proxy_off

对于 ComfyUI Manager 或容器内部模型下载,应在 Compose 中配置容器环境变量。


十三、NodeSource 安装脚本

NodeSource 安装命令:

curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -

其中:

  • curl 是否走代理取决于当前终端环境变量
  • sudo -E 会保留当前代理变量
  • 脚本内部还会执行 apt update

由于 APT 已使用国内镜像,建议先确保第三方源没有错误,再运行脚本。

操作流程:

sudo apt update
proxy_on
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
proxy_off
sudo apt install -y nodejs

如果 apt update 因失效 PPA 中断,应先删除失效软件源。


十四、推荐的最终代理策略

工具或流量 建议
Ubuntu 官方 APT 清华镜像直连
国内软件源 直连
Git HTTPS 按需开启
GitHub SSH 使用 SSH Key,必要时单独配置 SSH 代理
Docker 拉镜像 Docker Daemon 代理
ComfyUI 容器联网 Compose 环境变量
pip 单次代理或国内镜像
Conda 按需配置
Hugging Face 临时代理
NAS、SSH、局域网服务 加入 NO_PROXY

这类分层配置比把代理永久写入 /etc/environment 更稳定,也更容易排查问题。