Smart Dialer は、指定されたテストドメインのリストに対して、DSN と TLS のブロックを回避する戦略を探索します。選択対象となる複数の戦略を記述した構成が必要です。
Smart Dialer 用の YAML 構成
Smart Dialer が使用する構成は 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 サーバーの host:port。デフォルトはname:443 です。
DNS-over-TLS リゾルバ(DoT)
tls:
name: dns.google
address: 8.8.8.8
name: DoT サーバーのドメイン名。address: DoT サーバーの host:port。デフォルトはname:853 です。
UDP リゾルバ
udp:
address: 8.8.8.8
address: UDP リゾルバの host:port。
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 戦略が失敗またはタイムアウトした場合のみ使用されるため、その開始は後回しになります。
フォールバック文字列は次のように指定します。
configurlで定義されている有効なStreamDialer構成文字列。psiphonフィールドの子としての有効な Psiphon 構成オブジェクト。
Shadowsocks サーバーの例
fallback:
- ss://Y2hhY2hhMjAtaWV0Zi1wb2x5MTMwNTprSzdEdHQ0MkJLOE9hRjBKYjdpWGFK@1.2.3.4:9999/?outline=1
SOCKS5 サーバーの例
fallback:
- socks5://[USERINFO]@[HOST]:[PORT]
Psiphon の構成の例
Psiphon ネットワークを使用するには、以下を行う必要があります。
- Psiphon チームに問い合わせて、Psiphon のネットワークにアクセスするための構成を入手します。これには、契約が必要になる場合があります。
- 入手した Psiphon の構成を Smart Dialer の構成の
fallbackセクションに追加します。JSON は YAML と互換性を持つため、以下のようにfallbackセクションに Psiphon の構成をそのままコピーして貼り付けることができます。
fallback:
- psiphon: {
"PropagationChannelId": "FFFFFFFFFFFFFFFF",
"SponsorId": "FFFFFFFFFFFFFFFF",
"DisableLocalSocksProxy" : true,
"DisableLocalHTTPProxy" : true,
...
}
Smart Dialer の使用方法
Smart Dialer を使用するには、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.
これは基本的な例であり、具体的なユースケースに応じて変更が必要になる場合があります。