90 lines
2.5 KiB
Markdown
90 lines
2.5 KiB
Markdown
|
||
**环境配置**
|
||
|
||
Win + scoop + WinSW + sing-box 1.12.14 裸核
|
||
|
||
**问题一:切换 mixed 模式断网与防火墙路径**
|
||
|
||
之前一直用的 tun 的 gvisor 堆栈,最近看群里讨论 mixed 模式(也是默认模式),就想换过来试试,结果一改配置直接断网。
|
||
|
||
**排查与解决:**
|
||
|
||
在群友提醒下怀疑是防火墙问题。
|
||
|
||
1. 尝试直接关闭防火墙,网络恢复,确认锅在防火墙。
|
||
2. 检查防火墙规则,发现确实有一条 `sing-tun` 的放行规则,路径指向 `E:\MyScoop\Scoop\apps\sing-box\current\sing-box.exe`。
|
||
3. **关键点来了**:Scoop 的 `current` 是一个软连接。我尝试把防火墙规则改为实际的版本路径 `E:\MyScoop\Scoop\apps\sing-box\1.12.14\sing-box.exe`,启用防火墙后网络正常了。
|
||
|
||
**求教:** 看来 Windows 防火墙似乎不认 Scoop 的 `current` 软连接路径?有没有懂这块底层机制的佬友科普一下原理?
|
||
|
||
**问题二:关于公司 VPN 并存与 local DNS 的源码发现**
|
||
|
||
顺道分享一个近期折腾 VPN 并存时发现的坑。
|
||
|
||
场景是日常挂 sing-box 和公司 VPN。VPN 启动后会生成独立虚拟网卡。
|
||
|
||
**目前的笨办法:**
|
||
|
||
必须显式指定出站接口和 DNS 转发。
|
||
|
||
创建绑定 VPN 网卡的 outbound:
|
||
|
||
```json
|
||
{
|
||
"tag": "company-network",
|
||
"type": "direct",
|
||
"bind_interface": "controller" // controller 为网卡名称
|
||
}
|
||
```
|
||
|
||
定义内网 DNS 并指定出口:
|
||
|
||
```json
|
||
{
|
||
"tag": "Company-DNS",
|
||
"type": "udp",
|
||
"server": "12.0.0.1", // 公司内网DNS
|
||
"detour": "company-network"
|
||
}
|
||
```
|
||
|
||
路由规则指定域名走该 DNS:
|
||
|
||
```json
|
||
{
|
||
"action": "route",
|
||
"domain_suffix": ["company.net"],
|
||
"server": "Company-DNS",
|
||
"strategy": "prefer_ipv4"
|
||
}
|
||
```
|
||
|
||
**尝试简化失败:**
|
||
|
||
原本以为可以用官方文档里的 `local` 服务来简化配置,让 sing-box 自动读取系统 DNS:
|
||
|
||
```json
|
||
{
|
||
"type": "local",
|
||
"tag": "dns_local"
|
||
}
|
||
```
|
||
|
||
配置后发现无法解析公司内网域名。
|
||
|
||
**原因分析:**
|
||
|
||
大概翻了一下 sing-box 源码,`local` 确实是读取系统里的上游 DNS 列表,但它在发查询时会检查网关。
|
||
|
||
由于我们公司的 VPN 网卡(controller)没有配置 IPv4 默认网关,源码里有一句判断:
|
||
|
||
```go
|
||
if address.FirstGatewayAddress == nil {
|
||
continue
|
||
}
|
||
```
|
||
|
||
导致这张网卡直接被跳过了。给同样有 VPN 并存需求的兄弟排个雷。
|
||
|
||
**求教:** 佬友们有没有需要公司 VPN 和代理工具同时使用的场景呢?可以分享下使用技巧。
|