#ubuntu #proxychains #docker #v2rayn ```table-of-contents ``` ## 安装V2RayN 请参考以下文章来安装V2RayN [[🟠3X-UI Xray on BandwagonVPS]] [[🟠安装v2rayN]] ![[IMG-20251229190624376.png]] ## 验证代理可以科学上网 ### 使用 `curl` 直接测试(最推荐) 这是最快、最直接的方法。我们可以强制 `curl` 使用 SOCKS5 代理去访问 Google 的状态页。 **执行命令:** Bash ``` curl -x socks5h://127.0.0.1:10808 -v https://www.google.com ``` - **参数解释:** - `-x socks5h://`:指定使用 SOCKS5 代理。注意加个 `h`,这表示让代理服务器去解析域名(防止本地 DNS 污染导致测试失败)。 - `-v`:(Verbose) 显示详细连接过程。 - **判断标准:** - 如果看到 `HTTP/2 200` 或者大量的 HTML 文本,说明**代理成功**。 - 如果显示 `Connection refused` 或 `Timeout`,说明**端口未开放或 V2Ray 未运行**。 ## 配置 ProxyChains ProxyChains 是最灵活的工具,它可以让原本不支持代理的终端命令通过代理运行。 1. **编辑配置文件:** ``` sudo nano /etc/proxychains4.conf ``` (如果是旧版本可能是 `/etc/proxychains.conf`) 2. 修改 ProxyList: 滑动到文件末尾,注释掉默认的 socks4,添加你的 V2Ray 节点信息: ``` [ProxyList] # 格式: 类型 IP 端口 socks5 127.0.0.1 10808 ``` 3. 使用方法: 在任何命令前加上 proxychains4 即可。例如: ``` proxychains4 curl https://www.google.com `````` 使用: ``` bash proxychains git clone https://github.com/... proxychains curl https://google.com ``` ## 2. 配置 Git 代理 Git 不会自动走系统变量,建议为其设置全局配置。 - **设置 SOCKS5 代理(推荐):** Bash ``` git config --global http.proxy 'socks5://127.0.0.1:10808' git config --global https.proxy 'socks5://127.0.0.1:10808' ``` - **取消设置:** Bash ``` git config --global --unset http.proxy git config --global --unset https.proxy ``` --- ## 3. 配置 Docker Pull (Daemon 代理) `docker pull` 是由 Docker 守护进程(Daemon)执行的,它不读取普通用户的环境变量。 1. **创建配置目录:** Bash ``` sudo mkdir -p /etc/systemd/system/docker.service.d ``` 2. **创建代理配置文件:** Bash ``` sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf ``` 3. **添加以下内容:** Ini, TOML ``` [Service] Environment="HTTP_PROXY=http://127.0.0.1:10808/" Environment="HTTPS_PROXY=http://127.0.0.1:10808/" Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.somecorporate.com" ``` _(注:这里通常使用 HTTP 代理端口)_ 4. **重启 Docker 服务:** ``` sudo systemctl daemon-reload sudo systemctl restart docker ``` **检查 Docker 守护进程是否加载了代理:** **执行命令:** ``` docker info | grep -i proxy ``` - **预期输出:** 如果你配置成功,你应该能看到类似下面的信息: ``` HTTP Proxy: http://127.0.0.1:10808 HTTPS Proxy: http://127.0.0.1:10808 No Proxy: localhost,127.0.0.1 ``` _(注:如果这里没有输出,说明 `/etc/systemd/system/docker.service.d/http-proxy.conf` 配置未生效,请记得执行 `systemctl daemon-reload` 和 `systemctl restart docker`)_ --- ## 4. 配置 Docker 容器内应用代理 #### docker-compose.yml里面直接加 env ``` `environment: - ALL_PROXY=socks5://172.24.0.1:10808 ``` For example:gi ``` version: "3.9" services: homarr: image: ghcr.io/homarr-labs/homarr container_name: homarr restart: unless-stopped ports: - "7575:7575" volumes: - /home/shenwei/Docker/homarr/appdata:/appdata - /var/run/docker.sock:/var/run/docker.sock environment: - SECRET_ENCRYPTION_KEY=4a418def4be700be26672aa57a4c3d4b94abd2cf97021b5c4ecd3c1644c1f071 - ALL_PROXY=socks5://172.24.0.1:10808 ``` 2个方法知道如何获取docker network gate IP 1. Docker Portainer ![[IMG-20251229190624729.png]] 2. 获取运行时container的network gateway 适用于容器已经在运行的情况。进入容器的交互式 shell: ``` docker exec -it /bin/bash ``` - 如果容器没有 `bash`,可以用 `sh`: ``` docker exec -it sh ``` 运行以下命令获取network gateway IP: ``` ip route | awk '/default/ { print $3 }' ``` For example: ``` bash root@shenwei-HP-ZBook-01:/home/shenwei/Docker/homarr# docker exec -it homarr /bin/bash 23c94b2dfeb5:/app# ip route default via 172.24.0.1 dev eth0 172.24.0.0/16 dev eth0 scope link src 172.24.0.2 23c94b2dfeb5:/app# ip route | awk '/default/ { print $3 }' 172.24.0.1 ``` 如果你希望容器内部的程序(如 `apt-get`、`pip`)能上网,有两种方案: ### 方案 A:全局配置(推荐 Docker 17.07+) 修改当前用户的 Docker 客户端配置文件,这样所有 `docker run` 的容器都会自动带上代理环境变量。 1. **编辑配置文件:** Bash ``` mkdir -p ~/.docker nano ~/.docker/config.json ``` 2. **添加内容:** JSON ``` { "proxies": { "default": { "httpProxy": "http://127.0.0.1:1081", "httpsProxy": "http://127.0.0.1:1081", "noProxy": "localhost,127.0.0.1" } } } ``` **注意:** 如果你的容器使用的是 `bridge` 网络,`127.0.0.1` 指向的是容器内部。你需要将 IP 改为宿主机的虚拟网桥 IP(通常是 `172.17.0.1`)。 ### 方案 B:运行时临时指定 在启动容器时通过 `-e` 参数注入环境变量: Bash ``` docker run -e HTTP_PROXY="http://宿主机IP:1081" -e HTTPS_PROXY="http://宿主机IP:1081" my_image ``` --- ## 总结建议 |**场景**|**推荐方式**| |---|---| |**临时终端命令**|`proxychains4 `| |**Git 操作**|`git config --global`| |**下载 Docker 镜像**|修改 `systemd/system/docker.service.d`| |**容器内部业务**|修改 `~/.docker/config.json`| 如果你在配置过程中遇到“连接被拒绝 (Connection Refused)”的问题,请检查 V2Ray 配置文件中是否开启了 HTTP 代理协议,并确认端口号是否正确。