代理¶
代理服务器(Proxy Server)是网络中的一个中间实体,它代表客户端向目标服务器发送请求,并接收目标服务器的响应。其主要功能包括转发请求、缓存数据、访问控制、隐藏客户端真实IP以及突破网络限制等。
代理工作在应用层,通常是 HTTP/HTTPS/SOCKS。通常不加密 (HTTPS代理除外)。流量仅限配置了代理的特定应用(如浏览器、下载软件)。速度较快(因为只处理特定流量且可能不加密)。
发明代理服务器的根本原因是为了提高性能、控制访问和节省资源。在带宽昂贵且有限的情况下,设置一个HTTP代理服务器,可以把内容缓存起来,后面人再访问时,直接从代理服务器获取即可。同时,当机构需要知道个人上网在做什么,或者禁止访问某些网站时,可以设置代理服务器,对流量进行控制和审计。
DNS¶
- 在系统代理模式下,代理软件仅代理应用层流量(HTTP/HTTPS/SOCKS),不强制接管 DNS。系统 DNS 设置仍生效,但 DNS 请求可能被代理规则处理。
- 在透明代理/TUN 模式下,代理软件通过虚拟网卡接管所有网络流量,包括 DNS 请求。此时代理软件完全控制 DNS 解析。
- 如果代理软件未显式配置 DNS,大多数代理工具会沿用系统 DNS。
- 如果代理软件显式配置了 DNS(例如 Clash 配置中指定了
nameserver: 114.114.114.114,且开启了dns.enable: true),代理软件会拦截 DNS 请求,并使用自身配置的 DNS 服务器。
判断¶
- 如果返回的 DNS 服务器地址是
127.0.0.1或代理软件监听的端口(如127.0.0.1:53),说明 DNS 被代理接管。 - 如果返回的是系统 DNS(如
10.10.0.21),说明代理未接管。
系统代理¶
当设置了 HTTPS_PROXY=127.0.0.1:7890,实际上是在告诉系统中所有支持该变量的软件(比如 curl、pip、git 或浏览器):请不要直接建立连接,而是先把数据包交给 127.0.0.1:7890 托管。即使要访问本地服务,程序在检查环境变量,发现存在 HTTPS_PROXY后,也会把流量发给代理端口。
NO_PROXY¶
为了防止这种“自己找自己还要通过代理”的尴尬情况,网络协议栈引入了另一个关键环境变量:NO_PROXY。当设置:
程序就会检查 NO_PROXY,发现目标在排除名单中,绕过代理,直接建立回环连接。
Clash¶
配置文件¶
Mihomo¶
订阅导入¶
- 返回完整 YAML 配置的订阅:
# 一条命令更新(自动注入自定义规则)
python3 ~/.config/mihomo/update_gladost.py
# 然后重启生效
sudo systemctl restart mihomo
脚本会自动: 1. 下载 GLaDOS 订阅配置 2. 注入浙大直连、Tailscale 直连、内网直连等自定义规则 3. 修改 WSL 适配设置(allow-lan 等) 4. 写入 config.yaml
poke-mon 订阅(返回 base64 节点列表)¶
curl -sL "你的订阅链接" | base64 -d | python3 ~/.config/mihomo/gen_config.py > ~/.config/mihomo/config.yaml
sudo systemctl restart mihomo
通用更新脚本(推荐用这个)¶
二、切换节点¶
方式1: Web Dashboard(最接近 Windows 体验,推荐)¶
mihomo 有外部控制器 API 在 127.0.0.1:9090。
在 Windows 浏览器打开以下任一面板: - yacd: https://yacd.haishan.me - metacubexd: https://metacubex.github.io/metacubexd/
连接地址填:http://127.0.0.1:9090
注意:WSL NAT 模式下,Windows 可能无法直接访问 127.0.0.1:9090。 需要先在 WSL 里运行端口转发,或者用 WSL 的实际 IP。 查看 WSL IP:
hostname -I | awk '{print $1}'然后在 Windows 浏览器打开 http://:9090/ui
方式2: curl API 直接切¶
# 查看所有代理组
curl -s http://127.0.0.1:9090/proxies | python3 -m json.tool
# 查看当前 PROXY 组选了哪个节点
curl -s http://127.0.0.1:9090/proxies/PROXY | python3 -m json.tool
# 切换到某个节点(GLaDOS 用 "Default Proxy" 组)
curl -s -X PUT http://127.0.0.1:9090/proxies/Default%20Proxy \
-H "Content-Type: application/json" \
-d '{"name":"US-Dedicated-F1-1"}'
# 切换到 Auto(自动测速)
curl -s -X PUT http://127.0.0.1:9090/proxies/Default%20Proxy \
-H "Content-Type: application/json" \
-d '{"name":"Auto"}'
三、代理模式(规则/全局/直连)¶
通过 API 切换¶
# 规则模式(默认,按 rules 列表匹配)
# 这是默认模式,不需要额外操作
# 全局模式(所有流量走代理)
curl -s -X PUT http://127.0.0.1:9090 \
-H "Content-Type: application/json" \
-d '{"mode":"global"}'
# 规则模式
curl -s -X PUT http://127.0.0.1:9090 \
-H "Content-Type: application/json" \
-d '{"mode":"rule"}'
# 直连模式
curl -s -X PUT http://127.0.0.1:9090 \
-H "Content-Type: application/json" \
-d '{"mode":"direct"}'
通过 Web Dashboard¶
在 yacd/metacubexd 面板里直接点选模式。
四、TUN 模式 vs 系统代理¶
当前:系统代理模式¶
环境变量方式,只有读取 http_proxy 的程序才走 mihomo:
适用于:curl, git, pip, npm, apt 等命令行工具。
TUN 模式(可选)¶
创建虚拟网卡,拦截所有流量(包括不支持代理的程序)。
在 config.yaml 中添加:
tun:
enable: true
stack: system # 或 gvisor
dns-hijack:
- any:53
auto-route: true
auto-detect-interface: true
注意: - WSL 里开 TUN 需要 root 权限 - 可能和 Tailscale 冲突 - 目前系统代理方式对 WSL 来说够用
五、常用命令速查¶
# 查看 mihomo 状态
sudo systemctl status mihomo
# 重启 mihomo
sudo systemctl restart mihomo
# 查看实时日志
sudo journalctl -u mihomo -f
# 查看最近的日志(看走了什么规则)
sudo journalctl -u mihomo --since "5 min ago" | grep "match"
# 测试代理是否工作
curl -I --proxy http://127.0.0.1:7890 https://www.google.com
curl -I --proxy http://127.0.0.1:7890 https://www.baidu.com
# 查看 WSL IP(Windows 浏览器连面板用)
hostname -I | awk '{print $1}'
# 更新 GLaDOS 订阅
python3 ~/.config/mihomo/update_gladost.py && sudo systemctl restart mihomo
六、自定义规则说明¶
当前已配置的自定义规则(注入到 rules 最前面):
| 规则 | 说明 |
|---|---|
| DOMAIN-SUFFIX,zju.edu.cn,DIRECT | 浙大官网 |
| DOMAIN-SUFFIX,zju.cn,DIRECT | 浙大域名 |
| DOMAIN-SUFFIX,cc98.org,DIRECT | CC98 论坛 |
| DOMAIN-SUFFIX,zjucc.com,DIRECT | 浙大社区 |
| DOMAIN-SUFFIX,zjuer.cn,DIRECT | 浙大人 |
| IP-CIDR,100.64.0.0/10,DIRECT | Tailscale 网段 |
| IP-CIDR,fd7a:115c:a1e0::/48,DIRECT | Tailscale IPv6 |
| IP-CIDR,10.0.0.0/8,DIRECT | 内网 A 类 |
| IP-CIDR,172.16.0.0/12,DIRECT | 内网 B 类 |
| IP-CIDR,192.168.0.0/16,DIRECT | 内网 C 类 |
| DOMAIN-SUFFIX,portal.azure.com,DIRECT | Azure 门户 |
| GEOSITE,cn,DIRECT | 中国域名直连 |
| GEOIP,CN,DIRECT | 中国 IP 直连 |
这些规则优先级最高,匹配后直接走直连,不经过代理。
七、文件位置¶
~/.config/mihomo/
├── config.yaml # 当前生效的配置(mihomo 读这个)
├── config_raw.yaml # poke-mon 订阅原始 base64 数据
├── gen_config.py # poke-mon 订阅转 config 的脚本
├── update_gladost.py # GLaDOS 订阅更新脚本(注入自定义规则)
├── update_config.py # 通用更新脚本(合并所有订阅)
├── geoip.metadb # GeoIP 数据库
└── cache.db # 连接缓存