WSL 双代理一键脚本(~/proxy.sh)
5.1 需求与约束
- 两个代理互斥(环境变量同名,无法按目标分流叠加):gost(xyz) 与 公司 iOA。
xyz开 gost;off关脚本代理并保留 iOA;clear彻底清所有代理且常驻写入 ~/.bashrc;no_proxy始终常驻 bashrc。- 关键发现:
off后公司 iOA 自动可用(iOA 是 Windows 系统级,WSL 默认继承,之前只是被脚本 unset 清掉)。
5.2 常驻块设计(~/.bashrc 内三段,带标记可幂等增删)
| 标记 | 内容 | 何时写入 |
|---|---|---|
proxy.sh no_proxy begin/end | export no_proxy/NO_PROXY="..." | 每次执行都重写(常驻) |
proxy.sh clear begin/end | unset http_proxy https_proxy all_proxy HTTPS_PROXY HTTP_PROXY ALL_PROXY | clear 时写;xyz/off 时删 |
proxy.sh begin/end | [ -f ~/.proxy-env.sh ] && . ~/.proxy-env.sh | xyz 时挂载;off/clear 时摘 |
5.3 指令语义
| 指令 | 当前终端 | bashrc clear 块 | 新终端效果 |
|---|---|---|---|
xyz | 注入 gost | 移除 | 走 gost |
off | 清脚本变量 | 移除 | 系统 iOA 自动恢复 |
clear | 清所有 | 写入 | 彻底无代理(含 iOA) |
5.4 用法
source ~/proxy.sh xyz # 开 gost,当前终端立即生效
source ~/proxy.sh off # 关脚本代理,iOA 恢复
source ~/proxy.sh clear # 常驻写入 unset,彻底无代理
~/proxy.sh status # 看状态
env | grep -i proxy # 看状态
source ~/proxy.sh xyz一步完成「生成配置 + 当前终端生效」;source ~/.bashrc只是重载旧文件,不能切换/开启。
5.5 no_proxy 固定值
localhost,127.0.0.1,::1,.t.xyz,192.168.10.0/24,10.66.18.0/20
-
用
.t.xyz(前导点)而非*.t.xyz,兼容性最广(覆盖 curl/wget/git/Go 等)。 -
含 EasyTier 虚拟网段与 WSL 子网,防止隧道流量被代理劫持导致掉线。
5.6 实现要点(踩坑修正记录)
-
sed多行替换用「先/BEGIN/,/END/d删块再追加」,不用c\(GNU sed 多行不稳定)。 -
clear的unset行必须写进 bashrc 常驻(用户要求),而非仅当前终端执行。 -
iOA 用
127.0.0.1:12639按用户要求;若 WSL 内连不通,改IOA_HOST="AUTO"自动探测宿主 IP。