Files
nexus/wiki/sources/ubuntu-server科学上网.md
2026-04-22 08:02:59 +08:00

61 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: "Ubuntu Server科学上网"
type: source
tags: [docker, proxychains, ubuntu, v2rayn]
date: 2025-12-29
---
## Source File
- [[raw/Home Office/Ubuntu Server科学上网.md]]
## 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 Daemondockerd以 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 场景下,透明代理可以一次性解决所有应用的科学上网问题,无需逐个配置