簡体字中国語からAIで翻訳しました。原文を読む
ここ数日で、小さくて美しい 小さなツールを作った。いくつか厄介な CDN ドメインの地域別解決ポリシーに対処するためのもので、ざっくり言うと Globalping の API を叩いて他の地域でのドメインの解決結果を取得し、ICMP レイテンシが最小の IP を選んでローカルの hosts ファイルに書き込む。
コード:Zhousiru/opti-hosts、中国語 README.md
プリビルドのバイナリは Releases からダウンロードできる。
なぜ
家のテレビが海外のとある Emby メディアサーバーに接続していて、Emby のドメイン自体は HK と US の CDN ノードに地域別解決される設定なんだけど、回線がやっぱり微妙で、夜のピーク時間帯は QoS がかなり厳しい。プロキシサービスの流量も使いたくないので、HK の VPS でリバースプロキシを立て、トンネル経由で中国国内の VPS に中継し、さらにトンネルで家まで戻すようにした。
その結果、中国国内では Emby のドメインが HK ノード(~60 ms)に解決されるのに、HK の VPS 上では US ノード(~150 ms)に解決されてしまうことが分かった Σヽ(゚Д ゚; )ノ
わざとこう設定しているのか分からないけど。。
それでリバースプロキシの設定に HK CDN ノードの IP を直接書いて、手動で Host ヘッダーを付けた。最初はとても快調だったけど、その後は予想どおりの結果だった:IP が失効して、手動で IP を変えるしかない。こんな定期的なメンテナンスは面倒すぎる。
だから IP とレイテンシを自動で測って hosts を更新する小さなツールを作った。いわゆる「Cloudflare の IP 最適化」に似ているけど、このツールは CF を前段に置いたドメインに限らないし、CF の CIDR も内蔵していない。Globalping で各地の解決結果を測る方式だ。
ちょっと面白い小ネタ
思いつきで、ツールの設定を既存の hosts ファイルに組み込むことにして、pest で hosts directive と呼ぶ小さな DSL を定義してみた。だいたいこんな感じ:
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# OPTI-HOSTS example.com [Beijing, HK * 2, AS6939]
23.192.228.84 example.com
# 👆 这是生成的 hosts 记录
追加の設定ファイルは不要で、opti-hosts を実行するだけで更新される。シンプルでしょ(x
(正規表現でパースしても全然 OK なんだけど、parser generator を試してみたかっただけ 233)
いくつかの制約
Globalping は未ログインだと 1 つの IP につき 1 時間あたり最大 250 回のクエリしか作成できない。ログインして token を付ければ 500 回まで増やせる(ただし現在のバージョンには token を設定するオプションがない 233333)
また、Cloudflare の IP 最適化に触れたけど、仕組みはそれとは違う。Opti Hosts が IP を選ぶ基準は ping で測ったレイテンシだけで、TCP レイテンシや帯域幅などの要素は考慮していない(考慮もできない)。でもほとんどの場合、問題ないはずで、十分だと思う。
現時点では AMD64 & ARM64 アーキテクチャ向け Linux のプリビルド版だけを提供している。Windows と macOS は自分で build する必要がある(逃