VPNとプロキシ
公開IPとVPNの経路、プロキシアプリ、VPNキルスイッチ、リークテスト。
VPNとパブリックIP
「ヘルス」›「通信の出口」、Wi-Fiメニュー、kilobat ipでは、デフォルトルートが使っているインターフェイスと、それがVPNかどうかを表示します。このMacのルーティングと、macOSが接続中として表示するVPNから読み取ります。Tailscaleで出口ノードを使わない場合のように、VPNに接続していてもデフォルトルートがWi-Fiのままなら「スプリット」と表示され、一部の宛先だけがVPNを通ります。「設定」›「ネットワーク」›「パブリックIPを調べる」をオンにすると、Webサイトから見えるアドレスも表示します。ネットワークの変更時と30分ごとにCloudflareに問い合わせ、Kilobatに同梱のDB-IPデータで登録国を調べます。Cloudflareにそのリクエストが見えるため、デフォルトではオフです。kilobat ip --publicは1回だけ問い合わせます。登録国はあなたやサーバの所在地ではなく、登録国もVPNも、接続がプライベートまたは匿名であることを示すものではありません。「設定」›「メニューバー」›「VPN」で、コウモリの横にオン、スプリット、オフ(照会がオンなら国コードも)を表示できます。履歴には、VPNのオン/オフとパブリックIPの変更が記録されます。
プロキシとVPN
Kilobatは、プロキシアプリ(Clash Verge、ClashX、mihomo、Mihomo Party、FlClash、Surge、sing-box、Stash、V2Ray、Xray、Shadowsocks)やVPNと一緒に使えます。読み取るだけで、通信を中継したり設定を変えたりすることはありません。
- 通信を正しいアプリに計上。ローカルのプロキシ経由で送信するアプリには自分の通信が計上され、それを転送するプロキシのコアやVPNトンネルには「ほかのアプリの通信を中継」とラベルが付き、二重には数えません。
- 各アプリが通った経路。Clash互換のAPI(Clash Verge、ClashX、mihomo、Mihomo Party、FlClash、sing-boxのclash_api)がある場合、アプリの行に「HK-01経由 · 直接2件」のように経由したノードが表示され、ツールチップにはホスト、ノード、ルールがそれぞれ表示されます。KilobatはAPIのアドレスとシークレットをアプリ自身の設定ファイルから読み取り、シークレットを表示することはありません。
- 「ヘルス」›「通信の出口」に表示される問題:
- 起動していないアプリを指すシステムプロキシ(すべてのブラウザがつながらなくなります)
- VPNを経由しないDNSやIPv6
- プロキシとVPNの両方が通信を取っている状態
- グローバルモード
- システムプロキシの背後にあるアプリが見えないブロック。macOSのフィルタには127.0.0.1への接続が見えないため、プロキシのTUNモードをオンにするか、プロキシのルールでそのアプリをブロックしてください。
- 接続できない理由は?に「プロキシアプリ」の層が加わり、プロキシのモードと現在のノードの応答速度を表示します。応答しないノードが原因のときはそう伝えます。
ターミナルでは:kilobat proxy、kilobat proxy routes --app Telegram、kilobat proxy test、kilobat vpn。Kilobatが自動で見つけられないコアには、--controller 127.0.0.1:9090 --secret …を渡します。エージェントはget_proxy_status、test_proxy_nodes、check_vpnで同じ情報を取得できます。
VPNキルスイッチ
Proとネットワークフィルタがオンの状態で、「設定」›「ネットワーク」のVPNキルスイッチをオンにします。VPNが切断されると、Kilobatは復帰するまで新しい接続をブロックするので、その間にカフェやホテルのWi-Fiから何かが出ていくことはありません。ポップオーバーとダッシュボードにはブロック中:VPNが切断されていますと表示され、メニューバーのコウモリに鍵が付き、通知で5分間許可が提示されます。
- VPNが接続されると作動します。キルスイッチは、Macの起動後にVPNが一度すべての通信を運ぶまで待つため、VPNなしでオンにしても接続が断たれることはありません。それ以降は再起動するまで、どのネットワークでもVPNが切断されるたびにブロックします。アプリから情報が漏れるのは、まさに新しいネットワークに接続した瞬間だからです。一部の宛先だけを運ぶスプリットVPNは、切断とみなされます。
- 引き続き接続できるもの:VPNアプリとそのヘルパー、ネットワーク機能拡張(WireGuard、Tailscale、Mullvad、NordVPN、Proton VPN、ExpressVPN、Surfshark、Cisco Secure Client、GlobalProtect、OpenVPN Connect、Tunnelblickなど。macOSに構成があるVPNアプリも含みます)、Appleのネットワークサービス(DNS、DHCP、証明書の確認、ネットワークのログインウインドウ、内蔵VPN)、Kilobat、そしてオフにしない限りローカルネットワーク。それ以外はすべて、どんなルールやプロファイルでも(「制限なし」も含めて)待機します。
- 解除する方法。バナー、通知、メニューバーの右クリックメニューにある5分間許可を選ぶと、ネットワークのログインページや簡単な確認のためにすべてを通し、その後もVPNが切断されたままなら再びブロックします。そのすぐ隣と「設定」にはオフにするがあります。
できないこと:フィルタが見るのは新しい接続だけなので、VPNが切断されたときにすでに開いていた接続はそのまま続きます(ほとんどは使っていたトンネルとともに切れます)。VPNがサーバを見つけられるよう、DNSの問い合わせは引き続き外に出ます。Kilobatが終了しても、フィルタは最後に受け取った状態を保ち、VPNのトンネルインターフェイスがなくなるとブロックを続けます。通信を許可するかオフにするには、Kilobatを開いてください。ターミナルでは:kilobat settings kill-switch on。状態はkilobat vpnまたはkilobat conditionsで確認できます。エージェントはcheck_vpnとget_conditionsで状態を読み取り、set_kill_switchは事前に確認を求めます。
VPNリークテスト
VPNをオンにした状態で、「ヘルス」›「通信の出口」または「設定」›「ネットワーク」のリークをチェックをクリックします。約10秒で、Kilobatは通信がVPNを迂回しうる3つの経路を調べ、それぞれの合否と修正する設定を示します。Kilobatが把握しているVPNアプリ(Mullvad、NordVPN、Proton VPN、ExpressVPN、Tailscale、WireGuard)では、そのアプリでの名称で示します。Cisco、GlobalProtectなどの職場のVPNでは、IT部門に何を依頼すればよいかを示します。
- DNS。macOSが通常の問い合わせに使うリゾルバと、それぞれへのルートを調べます。トンネルではなくWi-FiやEthernet経由で届くリゾルバがあると、問い合わせた名前がすべて漏れます。Kilobatはbash.ws経由でいくつかの架空の名前も問い合わせ、問い合わせてきたリゾルバを報告してもらいます。VPNのものでも、CloudflareやGoogleなどの公開DNSサービスでもないリゾルバは、インターネットプロバイダのものと思われます。
- IPv6。MacにWi-Fi経由のIPv6ルートがあるのに、VPNがIPv4しか運ばない場合、IPv6のサイトには実際のアドレスが送られます。Kilobatはapi6.ipify.orgにIPv6アドレスを問い合わせてサイトから見えるものを示し、VPNの設定、またはそのネットワークでIPv6をオフにする方法(「システム設定」›「ネットワーク」›「Wi-Fi」›「詳細」›「TCP/IP」›「IPv6の構成」›「リンクローカルのみ」)を示します。
- UDPとWebRTC。ブラウザのWebRTCは、すべてのネットワークインターフェイスからUDPを送ります。KilobatはSTUN要求(GoogleまたはCloudflareのサーバ宛て)をVPN経由で1つ、Wi-FiまたはEthernetから直接1つ送ります。2つ目に応答があるか、1つ目がVPNの出口とは異なるアドレスから戻ってきた場合、ページに実際のアドレスを知られる可能性があります。対処法は、VPNのキルスイッチまたはロックダウンオプションです。KilobatはブラウザのWebRTCを実行できないため、ブラウザがローカルアドレスを共有しないようにする方法も示します:Safariはアドレスを隠します。Firefoxでは
media.peerconnection.enabledをオフに、BraveではWebRTC IP処理ポリシーを設定し、ChromeではGoogleのWebRTC Network Limiter拡張機能を使います。
リークテストは無料です。何も変更せず、問い合わせ先のサービスには一般のサイトと同じようにアドレスが見えるだけです。合格はその時点のこのMacについての結果で、すべてのアプリを保証するものではありません。ターミナルでは:kilobat vpn leaks(リークがあると終了コード1、スクリプト向けには--json)。エージェントはcheck_vpn_leaksを使います。