Skip to content

Latest commit

 

History

33 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

VPN Gate One-Click CLI

Overview (EN): A macOS tool that turns the public VPN Gate academic relay directory into a ready-to-use OpenVPN connection. A Python CLI fetches the official CSV API, ranks public relays by latency/throughput/score, decodes each server's OpenVPN profile into a local .ovpn, and (optionally) connects via openvpn. A SwiftUI menubar app wraps the CLI for one-click use. It stores no credentials and discards configs that embed authentication. Useful for anyone who wants a quick, scriptable way to test geographic routing or reachability through VPN Gate's free public servers. Status: stable.

VPN Gate Academic Experiment の公式CSV APIを使い、指定国の公開中継サーバー候補を取得して、OpenVPN用 .ovpn を自動生成する macOS 向け Python CLI です。
初期段階では接続エンジンを優先し、デフォルトでは接続せず .ovpn 生成まで行います。CLI に加えて、ワンクリック操作用の SwiftUI メニューバーアプリ (mac-app/) を同梱しています。

特徴

  • 公式CSV API https://www.vpngate.net/api/iphone/ を使用
  • HTMLスクレイピングなし
  • OpenVPN_ConfigData_Base64 をBase64デコードして .ovpn を生成
  • CountryShort による国コード絞り込み
  • Ping が小さく、SpeedScore が高い候補を優先
  • --prefer-tcp-443--prefer-udp に対応
  • --candidate-timeout で1候補あたりの接続試行秒数を制限
  • 生成ファイルは generated/、ログは logs/ に timestamp 付きで保存
  • デフォルト動作は dry-run 相当

必要環境 / Requirements

  • macOS
  • Python 3.9 以上
  • OpenVPN 実接続時のみ openvpn コマンド

インストール / Installation (OpenVPN)

Homebrew を使う場合:

brew install openvpn

確認:

openvpn --version

macOS では openvpn 実行時に sudo が必要な場合があります。 OpenVPN 2.5以降では、VPN Gate 側が AES-128-CBC を使うサーバーに対して data-ciphers 系の追記が必要になる場合があります。本ツールは .ovpn 生成時に互換設定を不足分だけ自動追加します。

使い方 / Usage

利用可能な国コード一覧:

python3 vpngate_connect.py --list-countries

米国候補の取得と .ovpn 生成:

python3 vpngate_connect.py --country US

日本候補を10件表示:

python3 vpngate_connect.py --country JP --top 10

TCP 443 を優先:

python3 vpngate_connect.py --country US --prefer-tcp-443

このオプションは TCP 443 候補を「優先」するだけで、UDP 候補を除外しません。

UDP を優先:

python3 vpngate_connect.py --country US --prefer-udp

接続まで実行:

sudo python3 vpngate_connect.py --country US --connect

Homebrew の OpenVPN を Apple Silicon Mac で確実に使う場合:

sudo python3 vpngate_connect.py --country KR --top 10 --connect --openvpn-path /opt/homebrew/sbin/openvpn

1候補が内部再試行ループで止まり続けないようにする例:

sudo python3 vpngate_connect.py --country KR --top 10 --connect --openvpn-path /opt/homebrew/sbin/openvpn --candidate-timeout 20

--connect を明示指定しない限り、接続は行いません。--dry-run は明示用オプションで、現状のデフォルト動作と同等です。 実接続前に、生成された .ovpn の内容を確認してください。

接続確認

  • OpenVPN ログに Initialization Sequence Completed が出れば、OpenVPN 接続成功と判断できます。
  • VPN 側の IPv4 を厳密に確認する場合は、curl -4 https://ifconfig.me を使ってください。
  • 通常の curl https://ifconfig.me では IPv6 アドレスが返る場合があります。
  • IPv4 の疎通確認をVPN経由に限定したい場合は、curl -4 を使って確認してください。
  • 実測では、JP サーバー接続時に curl -4 https://ifconfig.me が VPN Gate 側 IPv4 を返し、OpenVPN 接続成功を確認できました。

保存先

  • 生成された OpenVPN 設定: generated/*.ovpn
  • 実行ログ: logs/run_YYYYMMDD_HHMMSS.log

既存ファイルは上書きせず、timestamp 付きファイル名で新規保存します。

注意点

  • VPN Gate はボランティア提供サーバーなので、接続安定性にばらつきがあります。
  • VPN Gate にはログ保存ポリシーがあるため、機密情報の送受信には向きません。
  • 国や地域によっては、VPN利用に法的制限がある可能性があります。
  • 本ツールは合法的な接続確認、地域表示確認、研究・検証用途を想定しています。
  • 接続できない場合は、別候補へ切り替える必要があります。
  • macOS で openvpn 実行に sudo が必要な場合があります。
  • sudo 実行時は PATH が消えることがあるため、本ツールは /opt/homebrew/sbin/openvpn などの既知パスも自動探索します。
  • KR / US などは TCP / UDP や死活が不安定なため、複数候補を短時間で試す必要があります。

セキュリティ方針

  • パスワードや認証情報はコード内に保存しません。
  • 生成前に auth-user-pass などの認証ディレクティブを検査し、埋め込み認証情報を含む設定は保存対象から除外します。
  • auth.txt は現段階では自動生成しません。
  • ログには過剰な機密情報、IP確認結果、認証情報を保存しません。

制限 / Limitations

  • メニューバーアプリ (mac-app/) は CLI をラップする補助 UI で、主たる検証対象・第一の動作経路は CLI です。
  • --connect 実行時の自動再接続制御は最小限で、候補切替の土台だけを実装しています。
  • 接続成功判定は openvpn の終了コードに依存します。
  • IPv6 通信は VPN を通らず、そのまま外部へ出る可能性があります。

今後の検討項目

  • IPv6 無効化オプションの追加
  • IPv6 リーク警告機能の追加

現在の状態 (Status)

安定版 / 完成版 (stable)。CLI と macOS メニューバーアプリ (mac-app/) の双方が動作します。

このリポジトリに含まれないもの (What is not included)

公開リポジトリには、以下は意図的に含めていません(.gitignore で除外):

  • 生成済みの .ovpn 設定ファイル (generated/*.ovpn) — VPN Gate が配布する共有証明書を含むため、実行時に各自で生成してください。
  • 実行ログ (logs/*.log) — 接続先 IP などのローカル実行記録を含むため。
  • ビルド成果物 (mac-app/.build/, mac-app/VPNGateOneClick.app/, *.zip)。
  • 秘密情報・認証情報の類 (本ツールは認証情報をコードに保持しません)。

接続先サーバー情報は固定で同梱しておらず、すべて実行時に VPN Gate 公式 API から取得します。

セキュリティ上の注意 (Security notes)

  • 本ツールは VPN Gate の匿名公開中継サーバーを利用します。VPN Gate にはログ保存ポリシーがあるため、機密通信には使用しないでください。
  • パスワード・認証情報はコードにも生成ファイルにも保存しません。auth-user-pass などの埋め込み認証ディレクティブを含む設定は保存対象から除外します。
  • 国・地域によっては VPN 利用に法的制限がある場合があります。合法的な利用に限定してください。
  • 実接続 (--connect) は sudo を要する場合があります。実行前に生成された .ovpn を確認してください。

ライセンス (License)

MIT License — LICENSE を参照。

本ツールは VPN Gate Academic Experiment Project(筑波大学)の公開 API を利用しますが、本プロジェクトは VPN Gate / 筑波大学とは無関係の独立した非公式ツールです。VPN Gate の利用は同プロジェクトの利用規約に従ってください。

開発コンテキスト (Development context)

個人による研究・検証目的で開発した OpenVPN 設定生成・接続補助ツールです。商用提供を前提としません。

About

VPN Gate One-Click CLI + macOS menubar app: generate OpenVPN .ovpn configs from VPN Gate's public API

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages