0%

VPN设置

Linux 配置 clash 代理

创建并配置服务文件‌

编辑 /etc/systemd/system/clash_meta.service,内容示例如下(需根据实际路径调整):

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=Clash Meta Service
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/clash_meta -f /path/to/config
Restart=always
User=root

[Install]
WantedBy=multi-user.target

关键参数说明:

  • ExecStart:指定 clash_meta 的启动命令和配置目录。
  • Restart=always:确保服务崩溃后自动重启‌

启用开机自启‌

执行以下命令使配置生效:

1
2
3
sudo systemctl daemon-reload  # 重新加载配置
sudo systemctl enable clash_meta # 设置开机自启
sudo systemctl start clash_meta # 立即启动服务

命令的作用分析‌

  • sudo systemctl daemon-reload‌

重新加载 systemd 的配置文件(如 .service 文件),仅对本次修改生效,‌不影响开机自启‌。
(例如:修改了 /etc/systemd/system/clash_meta.service 后需执行此命令使配置生效)

  • ‌sudo systemctl enable clash_meta‌

‌关键命令‌:将 clash_meta 服务添加到开机自启列表,‌下次开机会自动启动‌。
(实际效果:在 /etc/systemd/system/multi-user.target.wants/ 下创建服务符号链接)

  • ‌sudo systemctl start clash_meta‌
    立即启动服务,但仅对当前会话有效,‌不直接影响开机行为‌。

验证是否成功:

1
2
systemctl is-enabled clash_meta  # 输出应为 "enabled"
systemctl status clash_meta # 检查服务状态

验证自启动机制‌

‌检查服务状态‌:

1
systemctl list-unit-files | grep clash_meta  # 确认状态为 "enabled"

‌查看日志‌:

1
journalctl -u clash_meta -f  # 实时跟踪日志

‌常见问题‌

  • ‌路径错误‌:确保 ExecStart 中的路径正确(如 /usr/local/bin/clash_meta 是否存在)‌
  • ‌权限不足‌:服务文件需以 root 权限创建,或通过 User= 指定运行用户‌
  • ‌依赖未满足‌:若依赖网络,需在 [Unit] 中添加 After=network.target

bash 的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Clash 代理端口
PROXY_PORT=7890
SOCKS5_PORT=7891

# 判断 clash-meta 是否正在运行
if pgrep -x "clash_meta" > /dev/null; then
export http_proxy="http://127.0.0.1:$PROXY_PORT"
export https_proxy="http://127.0.0.1:$PROXY_PORT"
export all_proxy="socks5://127.0.0.1:$SOCKS5_PORT"
export GIT_SSH_COMMAND="ssh -o ProxyCommand='nc -x 127.0.0.1:$SOCKS5_PORT %h %p'"
else
unset http_proxy
unset https_proxy
unset all_proxy
unset GIT_SSH_COMMAND
fi

VMWare 的 Linux 虚拟机共享 Windows 主机的 VPN

方案 2:NAT 模式 + Windows 网络共享
另一种方式是保持 VMware 使用 NAT 模式,并通过 Windows 主机的网络共享功能,将 VPN 流量共享给虚拟机。

步骤:
在 Windows 上启用网络共享:

确保 Clash 在 Windows 主机上运行,并已连接到 VPN。
打开 控制面板 > 网络和共享中心 > 更改适配器设置。
右键点击你的 VPN 连接(通常是一个以 Ethernet 开头的适配器),选择 属性。
在 共享 标签页,勾选 允许其他网络用户通过此计算机的 Internet 连接连接。
选择虚拟机使用的网络适配器(例如 VMware 的 VMnet8 适配器),然后点击确定。
配置虚拟机网络为 NAT:

在 VMware 中,确保虚拟机的网络适配器设置为 NAT(这通常是默认设置)。
在 NAT 模式下,虚拟机会通过 Windows 主机访问网络,但流量会被路由到共享的网络适配器。
验证虚拟机是否可以通过 VPN 访问网络:

启动虚拟机,测试网络连接。
如果虚拟机连接成功并通过 VPN 访问互联网,那么配置就完成了。

WSL1 通过主机的 clash 客户端访问网络

方法一:配置环境变量(适用于普通网络请求)

适合 curl、wget、apt、pip、git 等命令行工具走代理。

1
2
3
4
echo 'export http_proxy=http://127.0.0.1:7890' >> ~/.bashrc
echo 'export https_proxy=http://127.0.0.1:7890' >> ~/.bashrc
echo 'export all_proxy=socks5://127.0.0.1:7890' >> ~/.bashrc
source ~/.bashrc

验证代理是否有效:

1
curl cip.cc

这个网站会返回你的公网 IP。

1
curl https://www.google.com

应该会返回网页。

临时开启:

如果你只想暂时走代理一次,不想改 .bashrc,你可以直接这样运行:

1
2
3
4
5
6
# 方法1
http_proxy=http://127.0.0.1:7890 https_proxy=http://127.0.0.1:7890 curl https://www.google.com
# 方法2
curl -I https://www.google.com -x http://127.0.0.1:7890
# 方法3:走socks5代理
curl -I --socks5 127.0.0.1:7890 https://www.google.com

方法二:使用 proxychains 全局转发(适用于所有程序,包括二进制)

安装 proxychains,让任意程序走 Clash 的代理。

  1. 安装 proxychains
1
2
sudo apt update
sudo apt install proxychains -y
  1. 编辑配置 /etc/proxychains.conf
1
sudo vim /etc/proxychains.conf

在文件末尾加一行或修改为:

1
socks5  127.0.0.1 7890

注意:不要改成 http,要用 socks5。

使用 proxychains(只代理你想代理的程序):

1
proxychains curl https://www.google.com

优点:

  • 精准控制哪些程序走代理。
  • 不影响系统其他设置。

缺点:

  • 每次都要手动加 proxychains。

方法三:为单独的程序配置代理

  1. 配置 git 使用代理

执行以下命令设置全局代理(只设置一次即可):

1
2
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890

若你之后想关闭 git 代理,可运行:

1
2
git config --global --unset http.proxy
git config --global --unset https.proxy
  1. 配置 pip 使用代理

在主目录创建 pip 配置文件:

1
2
mkdir -p ~/.config/pip
vim ~/.config/pip/pip.conf

添加内容:

1
2
[global]
proxy = http://127.0.0.1:7890
  1. 配置 apt 使用代理

编辑 apt 的配置文件:

1
2
sudo mkdir -p /etc/apt/apt.conf.d
sudo nano /etc/apt/apt.conf.d/99proxy

粘贴以下内容(假设 HTTP 代理端口是 7890):

1
2
Acquire::http::Proxy "http://127.0.0.1:7890";
Acquire::https::Proxy "http://127.0.0.1:7890";

方法四:配置 iptables + redsocks(实现真正的全局转发)

适合高级用户,WSL2 使用 TUN 模式实现系统级全局代理。这比较复杂,建议在需要所有流量强制走代理时使用。TODO

mihomo(clash meta内核)

下载地址: https://github.com/MetaCubeX/mihomo/releases (clash meta内核)

架构示意图:

1
2
3
你的浏览器(客户端) → localhost:7890 (Clash监听) → 外网代理服务器 → 目标网站
↑ ↑ ↑ ↑
(终极客户端) (代理客户端) (中间服务器) (目标服务器)
  1. 启动:
1
2
3
4
INFO[2025-11-28T11:21:31.004426816+08:00] RESTful API listening at: [::]:9090          
INFO[2025-11-28T11:21:31.013225892+08:00] Sniffer is closed
INFO[2025-11-28T11:21:31.013530808+08:00] HTTP proxy listening at: [::]:7890
INFO[2025-11-28T11:21:31.013646756+08:00] SOCKS proxy listening at: [::]:7891

可以看到clash创建了前置代理,http代理端口为:7890 ,socks5代理端口为:7891 ,RESTful API的端口是9090 (这些端口不同版本可能不一样,实际以终端输入的为准)

说明:

  • 通过访问 http 代理和 socks5 代理都可以让流量经过代理。
  • RESTful API 可以用于控制 VPN 的配置方式。
  • 命令行版 mihomo 默认不会自动设置系统代理。
  1. 设置系统代理或浏览器代理。

方法一:手动设置系统代理(推荐)

在 Windows 系统中:

打开 设置 → 网络和 Internet → 代理

在 手动设置代理 部分,打开开关

填写以下信息:

    地址: 127.0.0.1

    端口: 7890 (这是 mihomo 的默认 HTTP 代理端口)

点击 保存

在 macOS 系统中:

打开 系统设置 → 网络 → 选择当前网络连接 → 详细信息 → 代理

勾选 网页代理(HTTP) 和 安全网页代理(HTTPS)

服务器填写 127.0.0.1,端口填写 7890

点击 好 应用设置

在 Linux 系统中(GNOME):

打开 设置 → 网络 → 网络代理

选择 手动

在 HTTP 和 HTTPS 代理中填写:

    服务器: 127.0.0.1

    端口: 7890

点击 应用

完成设置后,Chrome 应该立即就能通过代理访问外网了。

方法二:使用命令行工具设置代理(临时方案)

如果您不想修改系统设置,可以临时设置环境变量:

1
2
3
4
5
6
# 在启动 Chrome 前设置环境变量(Linux/macOS)
export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890

# 然后启动 Chrome
google-chrome &

或者在启动命令中直接指定代理:

1
2
3
4
5
6
7
8
google-chrome --proxy-server="http://127.0.0.1:7890" &
# 或
google-chrome --proxy-server="socks5://127.0.0.1:7891" &

# 或以下方式
curl -x http://127.0.0.1:7890 https://www.google.com
curl -x socks5://127.0.0.1:7891 https://www.google.com
curl --socks5 127.0.0.1:7891 https://www.google.com

方法三:在chrome浏览器或者firefox浏览器的SwitchyOmega或者Zero Omega插件里配置代理

注:浏览器代理只针对当前浏览器,其他应用的流量不会通过代理。

  1. RESTful 控制台

可以通过web控制面板RESTful API切换节点和模式,可用下面两个来控制。

https://d.metacubex.one/ 或者 https://yacd.metacubex.one/

注:原理说明

步骤 1:用户访问 Yacd 网站

1
用户浏览器 → https://yacd.metacubex.one
  • 浏览器加载 Yacd 的静态资源(HTML、JS、CSS)
  • 所有代码在浏览器沙箱环境中运行

步骤 2:Yacd 尝试连接本地 API

1
2
3
4
5
6
7
8
9
10
// Yacd 代码中的连接逻辑
const apiUrl = 'http://127.0.0.1:9090';

// 发送预检请求 (Preflight Request)
fetch(apiUrl + '/configs', {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
});

步骤 3:浏览器执行 CORS 检查

1
2
3
4
5
浏览器发送 OPTIONS 预检请求到 127.0.0.1:9090

mihomo 返回允许的 CORS 头部

浏览器确认安全,发送实际请求

步骤 4:建立双向通信

  • 配置操作:通过 HTTP PATCH/PUT 请求
  • 实时数据:通过 WebSocket 或 Server-Sent Events (SSE)
  • 流量监控:持续的 HTTP 流或 WebSocket 连接