4.9 KiB
4.9 KiB
title, type, tags, date
| title | type | tags | date | ||||
|---|---|---|---|---|---|---|---|
| Ubuntu Server科学上网 | source |
|
2025-12-29 |
Source File
Summary (用中文描述)
- 核心主题:Ubuntu Server 终端场景下的科学上网多方案配置,涵盖 ProxyChains、Git 全局代理、Docker Daemon 代理、Docker 容器内代理四种场景
- 问题域:如何让 Ubuntu Server 上的各种命令行工具(git clone、docker pull、apt-get)和容器内应用通过代理访问国外资源
- 方法/机制:按场景分:① ProxyChains 劫持任意命令 ② Git 全局配置 ③ Docker Daemon systemd 注入 ④ Docker 容器环境变量注入
- 结论/价值:提供了完整的"Ubuntu Server 终端代理"工具箱,针对不同工具有不同最优方案
Key Claims (用中文描述)
- ProxyChains 通过 LD_PRELOAD 劫持动态链接库的 socket 调用,使原本不支持代理的终端命令(如 curl、wget、git clone)自动走 SOCKS5 代理
- Git 不读取系统环境变量 http_proxy/HTTP_PROXY,必须通过
git config --global设置 socks5:// 代理 - Docker Daemon(dockerd)以 systemd 服务运行,不读取普通用户环境变量,必须通过 systemd drop-in 文件注入 HTTP_PROXY 环境变量
- Docker 容器默认 bridge 网络模式下,127.0.0.1 指向容器内部而非宿主机,需使用 Docker 网络网关 IP(通常是 172.17.0.1 或 172.24.0.1)
- Docker 客户端配置文件
~/.docker/config.json的 proxies.default 字段仅影响docker run新启动的容器,不影响已运行的容器
Key Quotes
"curl -x socks5h://127.0.0.1:10808 -v https://www.google.com" — 推荐的最快最直接的代理验证方法,socks5h 的 h 表示让代理服务器解析 DNS 避免本地 DNS 污染 "proxychains4 git clone https://github.com/..." — ProxyChains 使用方法,在任意命令前加前缀即可 "git config --global http.proxy 'socks5://127.0.0.1:10808'" — Git 全局代理配置,必须显式设置 "Environment="HTTP_PROXY=http://127.0.0.1:10808/"" — Docker Daemon systemd drop-in 配置格式 "ALL_PROXY=socks5://172.24.0.1:10808" — Docker 容器内应用代理,使用 Docker 网络网关 IP 而非 127.0.0.1
Key Concepts
- ProxyChains:通过 LD_PRELOAD 技术劫持动态链接库的 socket 函数,使终端命令自动走代理的工具,支持 socks4/socks5/HTTP 代理类型
- Git 全局代理:Git 不读取系统环境变量,必须通过
git config --global设置代理配置,支持 socks5 和 HTTP 代理 - Docker Daemon Proxy:通过 systemd drop-in 文件注入环境变量使 dockerd 走代理的配置方式,配置文件位于 /etc/systemd/system/docker.service.d/http-proxy.conf
- Docker 网络网关 IP:Docker bridge 网络模式下容器访问宿主机的 IP 地址,通常为 172.17.0.1(默认 bridge)或 172.24.0.1(自定义网络),不能用 127.0.0.1
- SOCKS5h 代理:SOCKS5 协议的 h 变体(socks5h),表示 DNS 解析由代理服务器完成,防止本地 DNS 污染导致的连接失败
- 环境变量代理:通过 HTTP_PROXY/HTTPS_PROXY/ALL_PROXY 环境变量让应用走代理的配置方式,适用于 Docker 容器场景
Key Entities
- v2rayN:提供 SOCKS5 和 HTTP 代理端口(默认 10808)的跨平台代理客户端,本文档所有场景的代理来源,Ubuntu Server 上通过 v2rayN 提供代理服务
- 代理客户端:运行在终端设备上提供本地代理服务的软件,v2rayN 是典型产品
- SOCKS5 协议:一种代理协议,相比 HTTP 代理更通用,可代理任意 TCP 连接
- Docker:容器化平台,dockerd 守护进程本身需要代理配置才能 pull 国外镜像
Connections
- v2rayN ← 提供代理 ← ProxyChains
- v2rayN ← 提供代理 ← Git 全局代理
- v2rayN ← 提供代理 ← Docker Daemon Proxy
- v2rayN ← 提供代理 ← Docker 网络网关 IP
- Docker Daemon Proxy ← 依赖 ← systemd
- ProxyChains ← 底层机制 ← LD_PRELOAD 劫持
- ubuntu-server科学上网 ← 与 ← 群晖nas科学上网方法 ← 相关但场景不同(终端 vs NAS GUI)
- ubuntu-server科学上网 ← 与 ← 网件rax50路由器刷梅林固件与科学上网插件安装教程 ← 互补(终端代理 vs 路由网关代理)
- ubuntu-server科学上网 ← 与 ← 3x-ui-xray-on-bandwagonvps ← 互补(客户端配置 vs 服务端配置)
Contradictions
- 与 群晖nas科学上网方法 差异:
- 冲突点:群晖方案强调透明代理(V2RayA iptables 分流),本方案强调显式终端代理(ProxyChains/Git/Docker Daemon 配置)
- 当前观点:Ubuntu Server 终端场景下,显式配置代理比透明代理更可控、更可预测
- 对方观点:群晖 NAS 场景下,透明代理可以一次性解决所有应用的科学上网问题,无需逐个配置