61 lines
4.9 KiB
Markdown
61 lines
4.9 KiB
Markdown
---
|
||
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 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 场景下,透明代理可以一次性解决所有应用的科学上网问题,无需逐个配置
|