分类 linux相关 下的文章

明白你的痛点。这种场景在 Linux 领域非常经典:已经有了一个现成的外部 HTTP 代理(比如公司内网的代理、或者朋友分享的代理服务器 IP 和端口),需要一个本地工具,把 Ubuntu 系统的所有网络流量“接管”并转发到这个 HTTP 代理上。

最适合你这种场景的工具,不是那些复杂的翻墙软件,而是透明代理工具。最推荐以下两款方案:

方案一:使用 v2rayA(最推荐,全图形化,一键接管全局流量)
v2rayA 是一个带 Web 界面的代理客户端。它有一个杀手级功能叫做 “透明代理(Transparent Proxy)”。你只要把你的 HTTP 代理填进去,在网页上点一下启用,它就会自动配置 Ubuntu 的系统路由,让整个系统(包括终端、浏览器、各种后台服务)无缝走这个代理。

部署步骤:
安装 v2rayA:
打开终端,运行以下命令(适用于 Ubuntu):

sudo snap install v2raya

打开管理后台:
在 Ubuntu 浏览器中打开:http://localhost:2017。第一次打开需要设置一个管理员账号密码。

添加你的 HTTP 代理:

点击 "Import"(导入) 或 "Create"(创建)。

选择协议为 http,填入你现有的 HTTP 代理服务器的 IP 地址、端口(如果有账号密码也可以填入)。

开启全局透明代理:

在左上角点击 Setting(设置)。

找到 Routing Mode(路由模式),选择 Proxy Admin Routes(或者 Global Proxy 全局代理)。

在 Transparent Proxy(透明代理) 选项中,选择 Redirect 或 TPROXY(通常选择开启实现全系统接管)。

点击保存,并在主页勾选你添加的 HTTP 服务器,点击左上角的 "Start"(启动)。
当 v2rayA 提示正在下载 geoip.dat 和 geosite.dat 时,由于网络环境限制,自动下载经常会卡住或失败。

这两个文件是 V2Ray 用于判定地理位置分流(哪些网址走直连,哪些网址走代理)的数据库。我们完全可以通过手动下载并拷贝到指定目录来解决。

一、 下载到哪个目录下?
在 Ubuntu 系统中,根据你安装内核的方式,这两个文件需要放置在以下目录。最稳妥的做法是同时放入以下两个标准路径,内核一定能读取到:

/usr/share/v2ray/ (V2Ray 核心的默认读取路径)

/var/lib/v2raya/ (v2rayA 面板的缓存路径)

二、 手动下载地址
由于官方地址在国内访问较慢,推荐使用以下两个每日更新的加速镜像下载站。你需要下载 geoip.dat 和 geosite.dat 这两个文件:

推荐加速通道(Loyalsoldier 优化版,分流更准):

点击下载 geoip.dat

点击下载 geosite.dat

官方原版备份通道:

点击下载 官方 geoip.dat

点击下载 官方 geosite.dat (注意:官方原版名为 dlc.dat,下载后必须重命名为 geosite.dat)

三、 终端一步到位的快速安装命令
如果你在 Ubuntu 终端里操作,可以直接利用现有的 HTTP 代理(或者直接硬连)执行以下命令,自动下载并精准移动到对应目录:

Bash

1. 创建目标目录(以防万一不存在)

sudo mkdir -p /usr/share/v2ray /var/lib/v2raya

2. 进入临时目录下载(这里使用了 GitHub 加速链接)

cd /tmp
wget https://ghproxy.com/https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat
wget https://ghproxy.com/https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat

3. 复制到 V2Ray 核心目录

sudo cp geoip.dat geosite.dat /usr/share/v2ray/

4. 移动到 v2rayA 目录并修正权限

sudo mv geoip.dat geosite.dat /var/lib/v2raya/
sudo chown -R v2raya:v2raya /var/lib/v2raya/
💡 小提示:如果你是用 Windows 电脑下载好了这两个文件,可以通过 scp、SFTP、或者如果是虚拟机直接拖进 Ubuntu 中。

四、 重启服务生效
文件放置完毕后,重启 v2rayA 服务,它检测到本地已有这两个文件,就不会再弹出下载提示,而是直接秒启成功:

Bash
sudo systemctl restart v2raya
重新刷新浏览器访问 http://localhost:2017,你就可以开始畅快配置你的 HTTP 代理了!

原来是通过 Snap 方式安装的!这就能解释为什么之前的路径可能不对了。

Snap 软件具有严格的沙盒隔离机制(Confined),它无法直接读取系统常规的 /usr/share/v2ray/ 路径。Snap 版本的 v2rayA 有自己专属的封闭数据目录。

对于 Snap 安装的 v2rayA,这两个 .dat 文件应该放置在以下路径:

一、 Snap 的正确存放路径
你需要把 geoip.dat 和 geosite.dat 放入/var/snap/v2ray/curent/geoip/

二、 重启 Snap 服务
文件放好之后,通过 Snap 命令重启 v2rayA 服务来让它检测本地文件:

Bash
sudo snap restart v2raya
重启后,刷新网页后台 http://localhost:2017,那条烦人的下载提示就会彻底消失,可以正常进入配置界面了。

方案二:使用 Proxychains-ng(适合只需要终端/特定软件代理的用户)
如果你不想安装大件的网页服务,只是希望在 Ubuntu 终端里执行某些命令(如 git clone、wget、运行某个特定的程序)时强行让它们走你的 HTTP 代理,Proxychains-ng 是神器。

它可以通过 Hook 的方式,强行让任何指定的软件走你配置的 HTTP 代理。

部署步骤:
安装 Proxychains-ng:

Bash
sudo apt update
sudo apt install proxychains4 -y
配置你的 HTTP 代理:
编辑它的配置文件:

Bash
sudo nano /etc/proxychains4.conf
滚动到文件的最底部,你会看到 [ProxyList]。把默认的 socks4 127.0.0.1 9050 删掉或注释掉,换成你的 HTTP 代理:

Plaintext
[ProxyList]

格式:协议 IP地址 端口 [用户名] [密码]

http 192.168.1.100 8080
(请把 192.168.1.100 和 8080 替换为你真实的 HTTP 代理服务器地址)
保存并退出(Ctrl+O,Ctrl+X)。

如何使用:
以后你只要在你想运行的命令前加上 proxychains4 即可。例如:

Bash

让 curl 走 HTTP 代理获取外网 IP

proxychains4 curl myip.ipip.net

让 apt 走 HTTP 代理更新

sudo proxychains4 apt update

甚至让某个图形化软件走代理

proxychains4 google-chrome
总结建议:
如果你想一劳永逸,让 Ubuntu 整个系统(不管什么软件)都自动走这个 HTTP 代理,选 方案一 (v2rayA)。

如果你只是偶尔在终端里下载代码、跑脚本需要用到这个代理,不想污染整个系统的网络环境,选 方案二 (Proxychains-ng)。

在 Ubuntu 中设置系统代理,取决于你是需要图形界面(GUI)全局上网,还是只需要终端命令行(Terminal)联网。以下为你提供最常用的几种设置方法。

方法一:通过图形界面设置(全局代理)
如果你使用的是 Ubuntu 桌面版,这是最简单的方法,能影响大部分自带浏览器和系统应用。

打开系统的 Settings(设置)。

在左侧边栏中点击 Network(网络)。

在右侧找到 Network Proxy(网络代理),点击它右边的齿轮按钮。

将模式从 Off 改为 Manual(手动)。

根据你的代理软件类型填入地址和端口:

HTTP / HTTPS: 通常填 127.0.0.1,端口填你代理软件的对应端口(如 7890)。

Socks Host: 如果是 Socks5 代理,填入 127.0.0.1 和对应端口(如 7891 或 1080)。

设置完成后关闭窗口,配置会自动生效。

方法二:通过终端设置临时代理(仅限当前终端)
很多时候,图形界面的代理对终端(Terminal)是不起作用的。如果你只需要在终端里临时下载个文件或更新软件,可以直接在终端运行以下命令:

Bash

设置 HTTP 和 HTTPS 代理(请将 7890 替换为你的实际代理端口)

export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"

如果是 Socks5 代理

export http_proxy="socks5://127.0.0.1:7891"
export https_proxy="socks5://127.0.0.1:7891"
注意: 这种方法只对当前打开的终端窗口有效。关闭窗口或新建窗口后就会失效。
如果想取消当前终端的代理,可以运行:unset http_proxy https_proxy

方法三:通过配置文件设置永久代理(针对当前用户)
如果你希望每次打开终端都自动加载代理,可以将其写入用户的配置文件中。

打开并编辑 .bashrc 文件(如果你使用的是 zsh,则是 .zshrc):

Bash
nano ~/.bashrc
连滚动到文件最底部,添加以下内容:

Bash
export http_proxy="http://127.0.0.1:7890"
export https_proxy="http://127.0.0.1:7890"

可选:设置不走代理的地址

export no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
保存并退出(Nano 编辑器按 Ctrl + O 保存,Ctrl + X 退出)。

执行以下命令让配置立即生效:

Bash
source ~/.bashrc
方法四:专为 apt 包管理器设置代理
有时候即使配置了系统代理,使用 sudo apt update 时依然会卡住。这是因为 sudo 命令默认不会透传普通用户的环境变量。你需要为 apt 独立配置代理:

创建或编辑 apt 的配置文件:

Bash
sudo nano /etc/apt/apt.conf.d/99proxy
写入以下内容(注意末尾有分号):

Plaintext
Acquire::http::Proxy "http://127.0.0.1:7890/";
Acquire::https::Proxy "http://127.0.0.1:7890/";
保存并退出即可。不需要重启服务,apt 会自动读取。

💡 验证代理是否成功
设置完成后,你可以在终端运行以下命令来测试是否成功走代理:

Bash
curl -I https://www.google.com
如果返回 HTTP/2 200 或相关的状态码,说明代理已经成功连接!

  1. 版本选择建议
    推荐使用 Windows 10 企业版 LTSC (Long-Term Servicing Channel)。

理由: LTSC 版本极度精简,没有应用商店、Edge 浏览器、Cortana 以及频繁的功能更新。它占用资源极少,非常适合作为虚拟机运行。

硬件要求: 建议至少分配 2 核 CPU 和 4GB 内存(如果资源紧张,2GB 也能跑,但会比较吃力)。

  1. 准备工作
    在开始之前,除了 Windows 镜像,你必须下载 VirtIO 驱动。Windows 默认不识别 KVM 的半虚拟化磁盘和网卡,不加载驱动会搜不到硬盘。

Windows 10 ISO: 你的系统镜像。下载地址:https://msdn.itellyou.cn/上去找简体中文版:ed2k://|file|cn_windows_10_enterprise_ltsc_2019_x64_dvd_9c09ff24.iso|4478906368|E7C526499308841A4A6D116C857DB669|/

VirtIO Win ISO: 从 Fedora 官方存储库 下载最新的稳定版(virtio-win.iso)。https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md

  1. 安装步骤
    第一步:检查并开启 KVM 模块
    确保你的 CPU 支持虚拟化并已在 BIOS 中开启:

Bash

lsmod | grep kvm

如果没有输出,尝试加载:modprobe kvm_intel (或 kvm_amd)

第二步:安装必要软件包
Bash

yum install -y qemu-kvm libvirt virt-install virt-manager
systemctl start libvirtd
systemctl enable libvirtd
第三步:创建虚拟机
你可以使用 virt-manager 图形界面(如果你有 X11 转发),或者直接使用命令行。以下是推荐的命令行创建方式:

Bash

virt-install \
--name=win10_vm \
--ram=4096 \
--vcpus=2 \
--os-type=windows \
--os-variant=win10 \
--disk path=/var/lib/libvirt/images/win10.qcow2,size=50,bus=virtio \
--network bridge=virbr0,model=virtio \
--cdrom=/path/to/windows_10_ltsc.iso \
--disk /path/to/virtio-win.iso,device=cdrom \
--graphics vnc,listen=0.0.0.0 \
--boot cdrom,hd

我的命令如下:

virt-install \
--name=win10_vm \
--ram=4096 \
--vcpus=4 \
--os-type=windows \
--os-variant=win10 \
--disk path=/home/kvm/vdisks/win10_template.qcow2,size=50,bus=virtio \
--network bridge=br1,model=virtio \
--cdrom=/home/kvm/isos/win10_ltsc.iso \
--disk /home/kvm/isos/virtio-win-0.1.285.iso,device=cdrom \
--graphics vnc,listen=0.0.0.0,port=7900 \
--boot cdrom,hd,menu=on \
--noautoconsole --autostart
关键点解释:

bus=virtio: 磁盘使用 VirtIO 模式,速度最快。

model=virtio: 网卡使用 VirtIO 模式。

这里挂载了两个光驱:一个是 Windows 安装盘,一个是驱动盘。
注意这里,如果没有找到引导光驱可以使用virsh reset win10_vm重启虚拟机,然后按esc选择引导设备。
第四步:Windows 安装过程中的驱动加载
启动虚拟机后,通过 VNC 连接。

在选择安装磁盘的界面,你会发现找不到硬盘。别担心,点击 “加载驱动程序” (Load Driver)。

浏览到 VirtIO 驱动光盘:

磁盘驱动:选择 viostor\w10\amd64。

网络驱动(可选,安装完再装也行):选择 NetKVM\w10\amd64。

加载后,硬盘就会显示出来,正常分区安装即可。

第五步:完善驱动
进入 Windows 系统后,打开“设备管理器”,你会发现还有一些带黄色感叹号的设备(如 PCI 设备、内存气球驱动)。

右键点击它们 -> 更新驱动程序 -> 指向 VirtIO 驱动光盘根目录,让它自动搜索安装即可。

  1. 性能优化小贴士
    磁盘格式:务必使用 qcow2,支持快照且节省空间。

写缓存:在 XML 配置中将 disk cache 设置为 none 或 writeback 可以显著提升磁盘 IO。

远程桌面:安装完成后,建议开启 Windows 自带的 RDP (远程桌面)。RDP 的操作体验比 VNC 流畅得多。

原因是:Docker 不吃你在 Xubuntu 里设置的终端代理环境变量。

下面我把原因 → 正确解决方案 → 最稳的国内方案一次性讲清楚。

一、为什么你设置了代理,docker pull mongo 还是失败?
关键点(一定要记住):
docker pull 走的是 Docker daemon(dockerd),不是你的 shell

也就是说:

你在终端里:

bash
复制代码
export http_proxy=...
只对 curl / apt / wget 生效

对 docker pull 完全无效

因为:

docker pull → 请求是 dockerd 进程发出的

dockerd 不继承你的终端环境变量

所以在国内就会出现:

curl 能访问外网

docker pull 一直 timeout / connection reset

二、方案一(推荐):配置 Docker daemon 走代理 ✅
这是官方正确做法。

1️⃣ 创建 Docker systemd 代理目录
bash
复制代码
sudo mkdir -p /etc/systemd/system/docker.service.d
2️⃣ 写入代理配置
假设你的代理是:

cpp
复制代码
http://127.0.0.1:7890
创建文件:

bash
复制代码
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf
内容如下(按你真实代理改):

ini
复制代码
[Service]
Environment="HTTP_PROXY=http://127.0.0.1:7890"
Environment="HTTPS_PROXY=http://127.0.0.1:7890"
Environment="NO_PROXY=localhost,127.0.0.1"
保存退出。

3️⃣ 重新加载并重启 Docker
bash
复制代码
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl restart docker
4️⃣ 验证 Docker 是否真的吃到了代理
bash
复制代码
docker info | grep -i proxy
如果看到类似:

javascript
复制代码
HTTP Proxy: http://127.0.0.1:7890
HTTPS Proxy: http://127.0.0.1:7890
✅ 说明配置成功

5️⃣ 再次拉取 MongoDB
bash
复制代码
docker pull mongo:7.0
👉 这一步在国内 90% 情况可以成功

三、方案二(国内最稳):直接用国内 Docker 镜像源 🚀(强烈推荐)
即使你有代理,我也强烈建议你加国内镜像源,更快、更稳。

1️⃣ 编辑 Docker daemon 配置
bash
复制代码
sudo nano /etc/docker/daemon.json
填入(可全部复制):

json
复制代码
{
"registry-mirrors": [

"https://dockerproxy.com",
"https://mirror.ccs.tencentyun.com",
"https://hub-mirror.c.163.com"

]
}
2️⃣ 重启 Docker
bash
复制代码
sudo systemctl restart docker
3️⃣ 拉取 MongoDB(不需要代理也能成功)
bash
复制代码
docker pull mongo:7.0
✅ 这是国内成功率最高方案

四、推荐你用的最终组合方案(最稳)
✅ Docker daemon 代理 + 国内镜像源

代理:应对非镜像流量

镜像源:极快、极稳