智能拨号器会搜索一种策略,以便为给定测试网域列表解除 DNS 和 TLS 屏蔽。它接受一个配置,其中描述了可供选择的多种策略。
智能拨号器的 YAML 配置
智能拨号器采用的配置采用 YAML 格式。示例如下:
dns:
- system: {}
- https:
name: 8.8.8.8
- https:
name: 9.9.9.9
tls:
- ""
- split:2
- tlsfrag:1
fallback:
- ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTprSzdEdHQ0MkJLOE9hRjBKYjdpWGFK@1.2.3.4:9999/?outline=1
DNS 配置
dns
字段用于指定要测试的 DNS 解析器列表。- 每个 DNS 解析器可以是以下类型之一:
system
:使用系统解析器。使用空对象进行指定。https
:使用加密的 DNS over HTTPS (DoH) 解析器。tls
:使用加密的 DNS over TLS (DoT) 解析器。udp
:使用 UDP 解析器。tcp
:使用 TCP 解析器。
DNS-over-HTTPS 解析器 (DoH)
https:
name: dns.google
address: 8.8.8.8
name
:DoH 服务器的域名。address
:DoH 服务器的主机名:端口。默认值为name
:443。
DNS-over-TLS 解析器 (DoT)
tls:
name: dns.google
address: 8.8.8.8
name
:DoT 服务器的域名。address
:DOT 服务器的主机名:端口。默认值为name
:853。
UDP 解析器
udp:
address: 8.8.8.8
address
:UDP 解析器的主机:端口。
TCP 解析器
tcp:
address: 8.8.8.8
address
:TCP 解析器的 host:port。
TLS 配置
tls
字段用于指定要测试的 TLS 传输列表。- 每个 TLS 传输都是一个字符串,用于指定要使用的传输。
- 例如,
override:host=cloudflare.net|tlsfrag:1
指定了一种传输,该传输使用 Cloudflare 和 TLS 碎片化进行网域前置。如需了解详情,请参阅配置文档。
回退配置
如果所有无代理策略都无法连接,系统会使用回退配置。例如,它可以指定备用代理服务器来尝试连接用户。使用回退策略的启动速度会较慢,因为其他 DNS/TLS 策略必须先失败/超时。
回退字符串应满足以下条件:
- 有效的
StreamDialer
配置字符串,如configurl
中所定义。 - 作为
psiphon
字段的子项的有效 Psiphon 配置对象。
Shadowsocks 服务器示例
fallback:
- ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTprSzdEdHQ0MkJLOE9hRjBKYjdpWGFK@1.2.3.4:9999/?outline=1
SOCKS5 服务器示例
fallback:
- socks5://[USERINFO]@[HOST]:[PORT]
Psiphon 配置示例
如需使用 Psiphon 网络,您需要:
- 请与 Psiphon 团队联系,获取可让您访问其网络的配置。这可能需要签订合同。
- 将收到的 Psiphon 配置添加到智能拨号器配置的
fallback
部分。由于 JSON 与 YAML 兼容,因此您可以直接将 Psiphon 配置复制并粘贴到fallback
部分,如下所示:
fallback:
- psiphon: {
"PropagationChannelId": "FFFFFFFFFFFFFFFF",
"SponsorId": "FFFFFFFFFFFFFFFF",
"DisableLocalSocksProxy" : true,
"DisableLocalHTTPProxy" : true,
...
}
如何使用智能拨号器
如需使用智能拨号器,请创建 StrategyFinder
对象并调用 NewDialer
方法,传入测试网域列表和 YAML 配置。NewDialer
方法将返回一个 transport.StreamDialer
,可用于使用找到的策略创建连接。例如:
finder := &smart.StrategyFinder{
TestTimeout: 5 * time.Second,
LogWriter: os.Stdout,
StreamDialer: &transport.TCPDialer{},
PacketDialer: &transport.UDPDialer{},
}
configBytes := []byte(`
dns:
- system: {}
- https:
name: 8.8.8.8
- https:
name: 9.9.9.9
tls:
- ""
- split:2
- tlsfrag:1
fallback:
- ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTprSzdEdHQ0MkJLOE9hRjBKYjdpWGFK@1.2.3.4:9999/?outline=1
`)
dialer, err := finder.NewDialer(
context.Background(),
[]string{"www.google.com"},
configBytes
)
if err != nil {
// Handle error.
}
// Use dialer to create connections.
这是一个基本示例,可能需要根据您的具体用例进行调整。