mcpField
P
PassTunnel

PassTunnel

ローカル
github.comセキュリティ1今日更新

PassTunnel について

PassTunnelは、OpenVPNおよびFortiGate SSL VPNプロファイル向けのオープンソースmacOSアプリです。TOTPシークレットをKeychainに保存して接続時のコード入力を処理し、MCPサーバーからAIクライアントがVPN状態やログを確認できます。パスワードやコードは開示しません。

主な機能

  1. 01OpenVPN・FortiGate SSL VPNプロファイル
  2. 02TOTPの保存とコード生成
  3. 03VPN状態とログの表示
  4. 04接続・コード操作用CLI
  5. 05任意の読み取り専用MCPアクセス

活用シーン

  1. 01接続中のVPNプロファイルの状態確認
  2. 02VPNログによる接続問題の調査
  3. 03シークレットを開示せずAIクライアントにVPNを確認させる

MCP 対応

`passtunnel mcp`でMCPサーバーを起動し、対応クライアントからVPN状態の確認、ログの閲覧、問題の診断を行えます。接続操作を許可しない限り読み取り専用で、パスワード、シークレット、コードは共有されません。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

インストール方法は未掲載です

このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。

リポジトリ
パッケージ
mcpbPassTunnel-mcp-1.6.0.mcpb1.6.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

PassTunnel

ワンタイムコードを二度と手入力せずに、VPN に接続できます。

PassTunnel は、OpenVPN および FortiGate SSL VPN 用のオープンソース macOS アプリです。TOTP シークレットを Keychain に保存し、接続のたびに現在のコード(およびパスワード)を入力します。

macOS 13+ License: MIT Swift 5.10 CI OpenSSF Scorecard OpenSSF Best Practices OpenSSF Baseline

PassTunnel のメインウィンドウ:VPN プロファイルの状態とリアルタイムコードを表示するサイドバーと、選択したプロファイルの現在のコード、サーバーに送信される内容、アクティビティ

ウェブサイト · 機能 · インストール · クイックスタート · コード形式 · CLI · AI アシスタント · FAQ · セキュリティ · プロジェクト · Türkçe


特長

ワンタイムコードを自動処理

  • コードを手入力する必要はありません。 TOTP シークレットは macOS Keychain に保存されます。PassTunnel はコードを生成し、[接続]をクリックするとパスワードとともに送信します。現在の有効期間が残り 5 秒以下の場合は、時間ぎりぎりに送信せず、新しいコードが発行されるまで待機します(デフォルトで有効な設定です)。一度送信したコードが再送信されることはありません。
  • サーバーが求める形式に対応します。 末尾への追加、先頭への追加、password:code、password,code、任意の文字列を含むカスタムテンプレートに対応するほか、コードを別途送信できます(OpenVPN の静的チャレンジ、FortiGate の OTP フィールド)。コード形式の設定をご覧ください。
  • 認証アプリ風のメインウィンドウ。 サイドバーには、各プロファイルの状態とリアルタイムのコードが表示されます。選択したプロファイルには、カウントダウンリング付きの大きなコードと、サーバーに送信される内容が表示されます。コードをクリックするとコピーできます。クリップボードは 1 分後(または設定に応じて 30 秒後、2 分後)に消去されますが、その間に別の内容をコピーした場合は消去されません。クリックするまでコードを非表示にすることもできます。
  • QR コードの読み込み。 プロバイダーの QR コードのスクリーンショットをドロップする、画像を選択する、クリップボードからペーストする、または(macOS 14 以降では)ブラウザーなどの画面上に表示されている QR コードをスクリーンショットを保存せずにスキャンできます。otpauth:// リンクから桁数、ピリオド、アルゴリズム(SHA-1/256/512)が読み込まれます。Base32 シークレットや otpauth:// リンクをペーストすることもできます。
  • 自動入力(オプション、デフォルトでは無効)。 グローバルショートカットを有効にすると、⌃⌥C で現在のコードをフォーカス中のフィールドに入力できます(メニューバーのパネルでも使用できます)。ウェブポータルなど、コードの入力が必要な場所で使えます。この機能を有効にしたときにのみ、アクセシビリティ権限が要求されます。
  • Touch ID で確認(オプション、プロファイルごとに設定)。 接続前とコード表示前に Touch ID または Mac のパスワードを要求できます(コマンドラインでは接続前のみの確認も設定できます)。保存されたシークレットは Mac の Secure Enclave にある鍵で暗号化されるため、ワンクリックで接続するには、ロック解除済みの Mac だけでなく本人の認証が必要です。

VPN クライアント

  • OpenVPN と FortiGate SSL VPN に対応し、署名済みの openvpn と openfortivpn を同梱しています。ほかにインストールするものはありません。
  • メニューバーのパネル。 ピン留めまたは接続中のすべてのプロファイルについて、状態、リアルタイムのコード、接続または切断の切り替えが表示されます。現在のコードのコピーや入力もできます。色付きバッジ(5 種類の配色)で注意が必要なプロファイルを示し、予期せず接続が切れた場合は赤い点が表示されます。
  • 接続を維持。 オプションのバックオフ付き自動再接続、VPN 内のヘルスチェック用ホスト、スリープ解除後の再接続、ログイン時に接続するプロファイルの選択、サーバー側のセッション上限に達する前のリマインダーに対応します。
  • 複数の VPN を同時に使用でき、それぞれに固有の状態、ログ、設定があります。
  • 共有可能なプロファイル。 チーム向けに .passtunnel ファイルをエクスポートできます。パスワード、TOTP シークレット、ユーザー名は含まれません。
  • コマンドラインツール。 passtunnel connect、passtunnel code -c、--json 出力、安定した終了コード、シェル補完に対応し、アプリと同じ機能を利用できます。
  • AI アシスタントに対応。 passtunnel mcp は MCP サーバーなので、Claude Code、Claude Desktop などの MCP クライアントから VPN の状態確認、ログの閲覧、問題の診断ができます。接続を許可しない限り読み取り専用で、パスワード、シークレット、コードを渡すことはありません。
  • sudoers の設定も、接続のたびの管理者パスワード入力も不要です。 macOS 標準の SMAppService で登録し、一度承認する小さな特権ヘルパーが、アプリに同梱された署名済み VPN ツールのみを、無害化された設定で実行します。SECURITY.mdをご覧ください。
  • 英語とトルコ語のユーザーインターフェイスに対応します(macOS の言語設定に従います)。

仕組み

PassTunnel.app ──XPC──▶ PassTunnelHelper (root) ──▶ bundled openvpn / openfortivpn
  │  (code-signature checked)                             │
  ├─ Keychain: password + TOTP secret                     └─ management socket (OpenVPN),
  └─ ~/Library/Application Support/PassTunnel                log file, status ──▶ back to the app
  1. 接続をクリックします。アプリはキーチェーンからパスワードと TOTP シークレットを読み取り、現在のコードを計算して、サーバーが期待する値(たとえば secret123456)を作成します。
  2. アプリは XPC 経由で特権ヘルパーにリクエストを渡します。ヘルパーは署名済みの PassTunnel アプリのみを受け付け、プロファイルフォルダーがお使いのユーザーに属していることを確認し、OpenVPN 設定をサニタイズします(または、入力されたフィールドから openfortivpn 設定を自ら書き込みます)。その後、バンドルされたツールを起動し、実際に読み込まれたコードの署名を確認した場合にのみ実行を許可します。
  3. アプリは接続状態を追跡します(OpenVPN の場合はお使いのユーザーのみが開ける管理ソケット経由、FortiGate の場合はログ経由)。その状態をウィンドウとメニューバーに表示します。

保護されない項目も含むセキュリティモデルの全容は、SECURITY.mdに記載されています。コードの構成についてはdocs/ARCHITECTURE.mdをご覧ください。

インストール

Apple シリコン搭載の Mac で、macOS 13 Ventura 以降が必要です。

ダウンロード

ディスクイメージをダウンロードして開き、PassTunnel をアプリケーションにドラッグします。ヘルパーはアプリケーションフォルダーからのみインストールできるため、アプリケーションフォルダーから起動してください。アプリは Developer ID で署名され、Apple による公証を受けています。変更内容はリリースノートをご覧ください。

PassTunnel は自動的に最新の状態を保ちます(設定 → アップデート)。アップデートは署名され、インストール前に検証されます。アップデート後、VPN 接続がアクティブでなくなった時点でヘルパーも自動的に更新されます(PassTunnel がアプリケーションフォルダーから実行されている場合のみ)。

Homebrew
brew trust passtunnel/tap
brew install --cask passtunnel/tap/passtunnel

Homebrew 6 以降では、サードパーティの tap の cask を読み込むには tap を信頼する必要があるため、最初の行が必要です。この cask は passtunnel コマンドもリンクします。アップデートはアプリ自体を通じて行われるため、brew upgrade では更新されません。ただし、brew upgrade --greedy を実行した場合は除きます。

ソースからビルドする

Xcode 15.3 以降(Swift 5.10 と、トルコ語の文字列に必要な xcstringstool を含む)と、アプリにバンドルする VPN ツールを提供するHomebrewが必要です。

brew install openvpn openfortivpn openconnect
git clone https://github.com/passtunnel/passtunnel.git
cd passtunnel
scripts/build-app.sh                  # → build/PassTunnel.app (ad-hoc signed)

build-app.sh はリリースバイナリをビルドし、バンドルを組み立て、openvpn、openfortivpn、openconnect(今後対応予定の Cisco AnyConnect サポート用)とそのライブラリをコピーし(scripts/bundle-tools.sh。ライセンスファイルも含みます)、これらのツールとライブラリの正確なコード署名ハッシュを使ってヘルパーをコンパイルし、強化ランタイムを使用してすべてに内側から順に署名します。アドホックビルドでは、ライブラリの検証を行わずにアプリに署名します。アドホック署名には Team ID がないため、そうしないと macOS は Sparkle.framework の読み込みを拒否します。

重要

ヘルパーが通信する相手はアプリのみであり、実行するツールも、プロジェクトの Developer ID Team ID で署名されたものに限られます。 アドホックビルドではウィンドウ、コード、QR インポート、プロファイル、CLI は使えますが、接続はできません。独自のビルドで接続するには、Sources/PassTunnelShared/Identifiers.swiftのteamIDをお使いの Team ID に設定し、証明書で署名してください。

scripts/build-app.sh --sign "Developer ID Application: Your Name (TEAMID)"

その後、ヘルパーをインストールする前にbuild/PassTunnel.appを/Applicationsに移動してください。

クイックスタート

プロファイルがない場合、ウィンドウには 最初の VPN を追加 が表示されます。

  1. ヘルパーをインストールします。 下部のカードに用途が説明されています。ヘルパーをインストール をクリックし、システム設定 → 一般 → ログイン項目 で PassTunnel をオンにします(macOS では一度だけ確認が表示されます)。この操作は後から 設定 → ヘルパー で行うこともできます。
  2. VPN を追加します。 点線の領域にファイルをドロップするか、ほかの方法から選びます。

初回起動:最初の VPN を追加。.passtunnel ファイルと .ovpn ファイル用のドロップ領域、プロファイルを追加する 3 つの方法、ヘルパーをインストールするカードが表示されています

プロファイルを追加する

サイドバーの下部にある + をクリックするか(同じ画面で、タイトルは VPN を追加 です)、ファイルをウィンドウにドロップします。ファイルメニューにも同じ項目があります。

用意するもの…操作
OpenVPN ファイル(.ovpn / .conf)点線の領域にドロップするか、ファイルを選択… をクリックします(ファイル → .ovpn をインポート…)。保存する前に、ファイルの内容を確認できます。参照先のファイル(ca ca.crt、tls-auth ta.key 1、…)は自動的に埋め込まれます。
FortiGate ゲートウェイ詳細を手動で入力 を選び、FortiGate を選択して(ファイル → 新規 FortiGate プロファイル…)、ホストとポートを入力し、フィンガープリントを取得 してゲートウェイの証明書(SHA-256)を固定します。
同僚から受け取った .passtunnel ファイルダブルクリックするか(または AirDrop から開くか)、ウィンドウにドロップします。その後、自分のユーザー名、パスワード、TOTP シークレットを追加します。
認証アプリ用の QR コード画面上の QR コードをスキャン(macOS 14 以降)または QR 画像を使用 を選ぶか、スクリーンショットをウィンドウまたはエディタにドロップします。

次に、プロファイルエディタを開きます(ツールバーの 編集)。

  • サインイン: ユーザー名(毎回尋ねる場合は空欄のままにします)とパスワードを入力します。これらはキーチェーンに保存されます。詳細 では、パスワードを毎回尋ねるようにするか、使用しないように設定できます(証明書のみを使う OpenVPN)。
  • ワンタイムコード: 画面上の QR コードをスキャン(macOS 14 以降)するか、QR コード画像を選択するか、シークレットを貼り付けます(またはスクリーンショットをカードにドロップします)。保存する前に、表示中のコードとスマートフォンのコードを照合します。コード形式 ではコードの送信方法を設定します。サーバーに送信される内容 に結果が表示され、パスワードはマスクされます。詳細 では、コードを毎回尋ねるようにするか、使用しないように設定できます。

プロファイルエディタ:名前、設定、ユーザー名、パスワード、表示中のコードを含むワンタイムコード、追加形式とサーバーに送信される内容(パスワードはマスク)、Touch ID と再接続のスイッチ

シークレットがキーチェーンに書き込まれるのは、保存 を押したときだけです。

接続する

接続 をクリックします。プロファイルに未保存の情報(たとえば、毎回尋ねる に設定したパスワード)が必要な場合は、小さなシートが表示され、必要な情報だけを入力できます。コードはすでに入力されています。

サイドバーでプロファイルを選択し、接続 をクリックします。失敗した場合は、原因の説明と 再試行 が表示されます。メニューバーのパネルからも、どこからでも同じ操作ができます。ピン留めされたプロファイルまたは接続中の各プロファイルにスイッチと表示中のコードがあり、現在のコードをコピーする項目もあります(自動入力がオンの場合は、コードを入力する項目もあります)。

メニューバーパネル(ライト):状態、コード、スイッチが表示された 3 つのプロファイル、その下にコピー、開く、設定、終了の項目   メニューバーパネル(ダーク)

任意のグローバルショートカット(設定 → ショートカット、デフォルトではオフ):⌃⌥V でデフォルトのプロファイルを接続または切断し、⌃⌥C で現在のコードをコピーします。自動入力がオンの場合は、コードを入力します。

設定の「一般」:ログイン時に開く、Dock アイコン、コードを非表示にする、コピーしたコードを消去する、接続と通知のオプション、Touch ID のタイムアウト、外観、コマンドラインツール

## コード形式の設定

ワンタイムコードの送信方法は、サーバーによって異なります。エディターの コード形式ポップアップで、プロファイルごとに選択してください。

パスワードと一緒に送信(末尾に追加、先頭に追加、password:code、password,code、カスタムテンプレート):テンプレートを使ってコードとパスワードを結合し、1つのパスワードとして送信します。{password} と {otp} は置き換えられ、それ以外のテキストは入力したとおりに送信されます。テンプレートには {otp} を含める必要があります。{password} は省略可能です。

パスワードが secret、コードが 123456 の場合:

形式テンプレートパスワードとして送信される値
末尾に追加(デフォルト){password}{otp}secret123456
先頭に追加{otp}{password}123456secret
Password:code{password}:{otp}secret:123456
Password,code{password},{otp}secret,123456
カスタム{password}#{otp}secret#123456
カスタム(コードのみ){otp}123456

個別に送信:パスワードとコードを別々に送信します。

  • OpenVPN: static-challenge の応答(SCRV1:…)として送信します。インポートした .ovpn に static-challenge が含まれている場合、PassTunnel が自動的にこの方式を選択します。
  • FortiGate: openfortivpn の個別の OTP フィールドに送信します。新しい FortiGate プロファイルでは、これがデフォルトです。

形式を変更すると、エディターの サーバーが受け取る値 に、プロファイルのユーザー名と現在のコードを使った送信内容が表示されます。パスワードは常にマスクされます。

コマンドライン

設定 → 一般 → コマンドラインツールから passtunnel コマンドをインストールします。これは /usr/local/bin 内のアプリのバイナリへのシンボリックリンクです。このフォルダーに書き込めない場合は、~/.local/bin に作成されます。プロファイル ID はプロファイル名から生成されます(Work → work)。

passtunnel                          # status of all profiles
passtunnel connect                  # connect the default profile
passtunnel connect work             # connect a specific profile
passtunnel code work -c             # print the live code and seconds left, copy it (for 1 min by default)
passtunnel status work --json       # exit code 3 when not connected
passtunnel disconnect --all

passtunnel import ~/Downloads/work.ovpn --name Work
passtunnel secret work password     # prompts without echo
pbpaste | passtunnel secret work totp      # Base32 secret or otpauth:// link from stdin
passtunnel set work otp_mode=totp otp_template=prepend
passtunnel set work otp_template='{password}:{otp}'
passtunnel set work auto_reconnect=true health_host=10.0.0.1

passtunnel add Lab --type forti
passtunnel set lab host=203.0.113.10 port=443 username=sam

passtunnel log work -f
passtunnel log work --activity                # what PassTunnel did: connecting, codes, sign-in, drops
passtunnel helper status
passtunnel diagnose --check-clock             # what would stop a connect; is the clock off?
passtunnel completion zsh > ~/.zfunc/_passtunnel

passtunnel set ID key=value… はエディターと同じ設定を受け付けます。passtunnel help set でキーの一覧を、passtunnel help で全コマンドの一覧を確認できます。

スクリプト向け: すべてのコマンドで --json(結果は標準出力に出力され、エラーは {"error":{"code":…,"message":…}} 形式)、--no-input(ターミナルで確認を求めません。PASSTUNNEL_NO_INPUT=1 も使用できます)、--no-auth-prompt(Touch ID を表示する代わりに失敗します)を指定できます。connect --wait --timeout 90 を指定すると、待機時間に上限を設定できます。終了コード:0 成功、1 エラー、2 使用方法の誤り、3 見つからないか未接続、4 確認がキャンセルされたか実行できない、5 ヘルパーがないか古い、6 接続失敗、7 タイムアウト。オブジェクトとコードについては、docs/CLI-JSON.md を参照してください。

passtunnel connect work --timeout 90 --no-input --json
passtunnel status --json | jq '.[] | select(.state == "connected") | .id'

AI アシスタントでの使用(MCP)

passtunnel mcp は、標準入力と標準出力でModel Context Protocol サーバーを実行します。これにより、AI アシスタントは「VPN は接続されていますか?」という質問に答えたり、接続に失敗したときのログを読み取って原因を説明したりできます。

Cursor にインストール VS Code にインストール

passtunnel MCP サーバー – Glama の品質・メンテナンススコア mcpservers.org に掲載

ツール説明
list_profilesプロファイルの種類、状態、接続時に Touch ID の確認を求めるか、自動再接続するか、ログイン時に接続するかを表示します
get_status状態、トンネル IP、接続開始時刻、最後のエラーとその理由(サインインの拒否、サーバーに到達できない、サーバーが見つからないなど。サインインが送信されたかどうかも含みます)、ヘルパーがインストール済みで最新かどうかを表示します
get_logsプロファイルの VPN ログの末尾(最大 500 行)を表示し、認証情報と思われる内容はすべてマスキングします。source: "activity" を指定すると、PassTunnel が代わりに実行した処理(接続、コード待ち、サインインの受け入れまたは拒否、切断)を表示します。パスワードやコードの数字は含まれません
diagnoseアプリのバージョンと場所、ヘルパーの状態、この macOS バージョンで同梱の各 VPN ツールを起動できるか(--version で実行)、Mac がオンラインかどうかと接続中のネットワーク(システムによる判定で、外部への通信は行いません)、各プロファイルで設定ファイル、サーバー、保存済みの認証情報が揃っているか、最後の時刻測定を表示します。check_clock を指定すると、Apple のタイムサーバーにも問い合わせて時刻のずれを確認します
connect、disconnect--allow-connect を指定した場合のみ

デフォルトでは読み取り専用です。 --allow-connect を指定しない場合、アシスタントは状態を確認できますが、操作はできません。指定すると、プロファイルの接続と切断が可能になります。Touch ID で確認が有効なプロファイルでは、Mac に Touch ID の確認画面が表示され、確認するまで何も実行されません。コード、パスワード、シークレットを扱うツールや、プロファイルを作成、変更、削除するツールはありません。サーバーには passtunnel コマンドと同じアクセス権が与えられます。その内容やプロンプトインジェクションについては、SECURITY.md を参照してください。

Claude Code(シェルの PATH を使用します。passtunnel コマンドは Homebrew cask、または「設定」→「一般」→「コマンドラインツール」から利用できます):

claude mcp add passtunnel -- passtunnel mcp                   # read-only
claude mcp add passtunnel -- passtunnel mcp --allow-connect   # may also connect and disconnect

passtunnel コマンドがない場合は、アプリのバイナリを直接使用してください。

claude mcp add passtunnel -- /Applications/PassTunnel.app/Contents/MacOS/PassTunnel mcp

Claude Desktop: 最新リリースから PassTunnel-mcp-<version>.mcpb をダウンロードしてダブルクリックします。Claude Desktop が MCP バンドルを開いてインストールします。設定の 接続と切断を許可(デフォルトではオフ)を有効にすると、--allow-connect が追加されます。このバンドルに含まれるのは、アプリに組み込まれたサーバーを起動するランチャーのみです。そのため PassTunnel を /Applications にインストールする必要があります。インストールされていない場合、サーバーはインストールを促すメッセージを表示して停止します。同じバンドルが PassTunnel の MCP Registry エントリー io.github.PassTunnel/passtunnel のパッケージです。

手動で設定することもできます。Claude Desktop はシェルの PATH を使わずにサーバーを起動するため、完全なパスを指定してください。~/Library/Application Support/Claude/claude_desktop_config.json に次のように記述します。

{
  "mcpServers": {
    "passtunnel": {
      "command": "/Applications/PassTunnel.app/Contents/MacOS/PassTunnel",
      "args": ["mcp"]
    }
  }
}

上記の Cursor と VS Code のボタンは、同じ読み取り専用のエントリーを追加します。接続を許可するには、args に "--allow-connect" を追加してください。他の MCP クライアントでも同様に使用できます。コマンドにはアプリのバイナリ(または passtunnel)を指定し、引数には mcp を指定します。診断情報は stderr に出力されます。サーバーは MCP 2026-07-28 に対応し、initialize ハンドシェイクを開始するクライアントに対しては、2025-11-25 から 2024-11-05 までのバージョンにも対応します。

プロファイルの共有

⋯ → 共有…(または passtunnel export work -o work.passtunnel)を実行すると、接続設定、外観、コード形式、および OpenVPN の場合は設定ファイルを含む .passtunnel ファイルが作成されます。

パスワード、TOTP シークレット、ユーザー名は含まれません。OpenVPN 設定に埋め込まれたユーザー名とパスワード、またはプロキシの認証情報も削除されます。受信者はファイルをダブルクリック(または AirDrop から開く)して、自分の情報を追加します。埋め込みの OpenVPN 設定には証明書や鍵が含まれる場合があるため、ファイルは権限 0600 で書き込まれます。.ovpn ファイルと同じように共有してください。

FAQ

PassTunnel に特権ヘルパーが必要なのはなぜですか? トンネルインターフェースの作成、ルートの変更、DNS の変更には root 権限が必要です。接続のたびに管理者パスワードを求めたり、sudoers ルールを追加したりする代わりに、PassTunnel は `SMAppService` を使って小さな launchd デーモンを登録します。このデーモンは、システム設定 → 一般 → ログイン項目で一度承認するだけです。ヘルパーは署名済みの PassTunnel アプリからのリクエストだけを受け付け、root 所有のコピーとそのライブラリを含め、同梱された `openvpn` と `openfortivpn` だけを実行します。また、署名を確認してから実行し、危険な OpenVPN ディレクティブを拒否します。詳しくは [SECURITY.md](SECURITY.md) をご覧ください。
パスワードと TOTP シークレットはどこに保存されますか?

ログインキーチェーンに、サービス名 PassTunnel の汎用パスワードとして保存されます(アカウントは <profile-id>/password と <profile-id>/totp です)。iCloud キーチェーンとは同期されません。移行アシスタントやバックアップを使えば、ほかのログインキーチェーンの項目と同様に、新しい Mac に引き継がれます。インポートした .ovpn に埋め込まれているユーザー名とパスワードも、同じ場所に移されます。プロファイルの設定と OpenVPN の設定ファイルは ~/Library/Application Support/PassTunnel/ に保存され、読み取りは自分のユーザーに限定されています。VPN サーバー以外にデータが送信されることはありません。

どの種類の VPN に対応していますか?

OpenVPN(OpenVPN 2.x クライアント設定:ユーザー名とパスワード、証明書のみ、静的チャレンジ方式)と FortiGate SSL VPN(openfortivpn 経由)に対応しています。ほかの種類も新しいバックエンドとして追加できます。詳しくはコントリビューションをご覧ください。

.ovpn ファイルが拒否されます。なぜですか?

ヘルパーは OpenVPN を root として実行するため、スクリプトの実行、プラグインの読み込み、任意のファイルの読み書きを行うディレクティブを拒否します。ファイルをインポートすると、PassTunnel が自動的に処理するため効果のない行(script-security 2 と組み合わせた up や down などのスクリプト、log、management、daemon など)はスキップされます。これらの行はプロファイルの追加前に表示され、保存された設定ではコメントとして残ります。セキュリティ上の役割を持つ行(tls-verify、plugin、config、.ovpn と同じ場所にない ca ファイルなど)がある場合は、引き続きファイルが拒否され、エラーに該当する行がすべて列挙されます。インポート時に参照されるファイルは自動的に埋め込まれます。完全な一覧は SECURITY.md をご覧ください。

.p12 証明書を読み込めません(「unsupported」、「RC2-40-CBC」)。なぜですか?

古い PKCS#12 ファイルは RC2 で暗号化されており、OpenSSL 3 と 4 ではレガシープロバイダー経由でのみ読み取れます。PassTunnel の OpenVPN は OpenSSL のプロバイダーやモジュールを読み込みません(これらはアプリ外のパスから読み込まれるため)。そのため、このようなファイルはそのままでは使用できません。OpenSSL 3 を使って、新しい暗号化方式で一度エクスポートし直してください(たとえば Homebrew 版を使う場合は brew install openssl@3 を実行します。macOS に付属する /usr/bin/openssl は LibreSSL で、-legacy オプションはありません)。

OPENSSL="$(brew --prefix openssl@3)/bin/openssl"
"$OPENSSL" pkcs12 -legacy -in old.p12 -nodes -out temp.pem   # asks for the old password
"$OPENSSL" pkcs12 -export -in temp.pem -out new.p12          # asks for a new password
rm temp.pem                                                  # holds the unencrypted key

その後、設定で new.p12 を使うか、.ovpn を再度インポートして埋め込んでください。

TOTP コードなしでも動作しますか?

はい。ユーザー名とパスワードのみ、または証明書のみの VPN では、ワンタイムコードを なし に設定してください。ハードウェアトークンや SMS を使う場合は、毎回確認 に設定してください。

PassTunnel を完全にアンインストールするにはどうすればよいですか?
  1. すべてのプロファイルを切断します。

  2. ヘルパーを削除します: 設定 → ヘルパー → ヘルパーを削除…、または passtunnel helper uninstall を実行します。アプリを削除する前に行ってください。

  3. ログイン時の起動をオフにします: 設定 → 一般 → ログイン時にメニューバーで開く。システム設定 → 一般 → ログイン項目に何も残っていないことを確認してください。

  4. PassTunnel を終了し、PassTunnel.app をゴミ箱に移動します。

  5. データを削除します:

    rm -rf ~/Library/Application\ Support/PassTunnel     # profiles, configs, logs, preferences
    defaults delete com.furkanprlk.passtunnel 2>/dev/null # open-at-login question
    rm -f /usr/local/bin/passtunnel ~/.local/bin/passtunnel   # CLI symlink, if installed
    
  6. キーチェーン項目を削除します: キーチェーンアクセスを開いて PassTunnel を検索するか、次のコマンドを実行します。

    while security delete-generic-password -s PassTunnel >/dev/null 2>&1; do :; done
    

    (アプリ内でプロファイルを削除すると、そのキーチェーン項目も削除されます。) Homebrew の場合、brew uninstall --zap --cask passtunnel を実行すると、データと Keychain の項目(手順 5 と 6)も削除されます。通常の brew uninstall --cask passtunnel では、どちらも保持されます。

ヘルパーの実行時フォルダー /var/run/passtunnel は root 所有で、再起動時に消去されます。

ビルドとテスト

swift build                 # debug build of the app, CLI and helper
swift test                  # unit tests
scripts/build-app.sh        # full app bundle in build/PassTunnel.app

# The portable library (PassTunnelKit) for iOS
xcodebuild -scheme PassTunnelKit -destination 'generic/platform=iOS Simulator' build

リリース(署名、公証、Sparkle フィード、Homebrew の cask)については、 docs/RELEASING.md をご覧ください。

テストで実際のデータに触れることはありません。PASSTUNNEL_HOME を一時フォルダーに設定し、 PASSTUNNEL_KEYCHAIN_SERVICE を使って使い捨ての Keychain サービスを使用します。

スクリーンショット。 アプリは、サンプルのプロファイル、一時的なサポートフォルダー、一時的な Keychain サービスを使って、 メイン画面をオフスクリーンで PNG ファイルにレンダリングできます。画面には何も表示されず、VPN、 ヘルパー、システム設定にも触れません。

swift build
PASSTUNNEL_RENDER=/tmp/passtunnel-shots "$(swift build --show-bin-path)/PassTunnel"

これにより、メインウィンドウ(ライト/ダーク、初回起動、すべてのプロファイル状態、非表示およびロックされたコード、インポートの確認、エラー状態)、 認証情報シート、メニューバーパネル、すべてのパレットにおけるステータス項目のバッジ、 各「設定」タブ、プロファイルエディターの状態、デザインシステムのトークンとコンポーネントが書き出されます。 docs/images 内の画像は、これを使って作成されています。

コントリビューション

Issue とプルリクエストを歓迎します。大きな変更の場合は、まず Issue を作成してください。

作業は dev で行います。Issue ごとにブランチを作成し、 Conventional Commits のタイトル(feat: …、fix: …)を付けて dev にプルリクエストを送り、スカッシュマージします。 dev を main にマージするとリリースされます。ワークフロー、タイトルのルール、チェックについては CONTRIBUTING.md をご覧ください。

  • docs/ARCHITECTURE.md(ターゲット、ストレージ、ヘルパープロトコル、セキュリティルール)と docs/APP.md(アプリと CLI の動作)をお読みください。
  • VPN の種類を追加するには、バックエンドの追加が必要です。 新しい VPNType ケース、それに必要なプロファイルフィールド、型付きフィールドから生成するか厳密に検証するヘルパーリクエスト、openvpn/openfortivpn と同様にバンドルして署名を検証するツール、そして ConnectionManager での状態追跡が必要です。ヘルパーに、クライアントが指定したパスや生の設定を実行させないでください。
  • ユーザー向けの文字列は String(localized:) を通し、 Sources/PassTunnel/Resources/Localizable.xcstrings にトルコ語訳を追加してください。
  • スマートフォンアプリ間で共有される動作(コード、otpauth リンク、OpenVPN 設定、共有ファイル、スラッグ、プロファイルのマージ)を変更する場合は、fixtures/ のゴールデンケースも更新してください。
  • Sparkle(アップデート)と swift-crypto(Linux での CryptoKit API)以外のサードパーティ製 Swift 依存関係はありません。PR を送る前に swift test を実行してください。

プロジェクト

PassTunnel は、1 人によってオープンに開発・保守されています。

  • GOVERNANCE.md:意思決定の方法、役割分担、各種アクセス権の保有者、現在のバス係数について。
  • ROADMAP.md:今後 1 年間の計画と、計画に含まれない内容について。
  • CODE_OF_CONDUCT.md:Contributor Covenant と、行動上の問題の報告方法について。
  • SECURITY.md:保護対象と対象外、サポート対象バージョン、脆弱性の報告方法と報告への対応、使用している暗号技術について。
  • docs/ASSURANCE.md:保証ケース(脅威モデル、信頼境界、設計原則、対策を講じる弱点)について。
  • CONTRIBUTING.md:ワークフロー、コーディング規約、テスト方針、バグの報告方法について。

ライセンス

PassTunnel はMIT Licenseの下で公開されています。Copyright © 2026 Furkanprlk.

このアプリには、openvpn(GPL-2.0)、openfortivpn(GPL-3.0)とそのライブラリ(OpenSSL、LZO、 LZ4、pkcs11-helper)、および openconnect(LGPL-2.1、現時点では未使用)とそのライブラリ(GnuTLS、nettle、 GMP など、主に LGPL)が同梱されています。これらは PassTunnel とともに配布される独立したプログラムで、それぞれ独自の ライセンスが適用されます。THIRD_PARTY_NOTICES.mdを参照してください。各ライセンスの全文は、 アプリ内の Contents/Resources/licenses と 設定 → ヘルパー → ライセンスを表示… から確認できます。

PassTunnel は OpenVPN Inc. および Fortinet とは提携していません。OpenVPN と FortiGate は、それぞれの所有者の商標です。


トルコ語

PassTunnel は、Apple silicon 搭載 Mac の macOS 13 以降向けのオープンソース VPN アプリです。OpenVPN と FortiGate SSL VPN にワンクリックで接続できます。TOTP シークレットはキーチェーン(Keychain)に保存され、PassTunnel が接続時に、その時点のワンタイムコードとパスワードを代わりに送信します。スマートフォンでコードを確認して 入力する必要はありません。

コードの送信方法は、プロファイルごとに選べます。パスワードの末尾または先頭に追加する、parola:kod のように 区切り文字でつなぐ、独自のテンプレートを使う、または個別のフィールドとして送信する方法があります。メインウィンドウには、 認証アプリのように有効なコードが表示されます。メニューバーのパネルには各プロファイルの状態とコードが表示され、接続が切れると色付きのバッジで警告します。QR コードはスクリーンショットから読み取れます。認証情報を含まない .passtunnel ファイルでプロファイルをチームと共有でき、同じ操作を passtunnel コマンドラインツールからも 実行できます。passtunnel mcp を使うと、Claude などの AI アシスタントが VPN の状態を読み取り、問題を診断できます(デフォルトでは読み取り専用で、パスワード、シークレット、コードは提供しません)。 必要に応じて、プロファイルごとに「接続前に Touch ID を要求」を有効にできます。この場合、PassTunnel は接続やコードの表示の前に、 Touch ID または Mac のパスワードでの承認を求め、保存されたパスワードと TOTP シークレットを Mac の Secure Enclave 内の鍵で暗号化します。インターフェースはトルコ語と英語に対応し、macOS の言語設定に従います。

インストール: 署名・公証済みの ディスクイメージをダウンロードし、 開いて PassTunnel をアプリケーションフォルダにドラッグします (リリースノート)。または Homebrew でインストールします: brew trust passtunnel/tap、続いて brew install --cask passtunnel/tap/passtunnel(Homebrew 6 以降では、信頼した場合にのみ、サードパーティの tap にある cask がインストールされます)。アプリは自動で 最新の状態に保たれます(設定 → アップデート)。ソースからビルドする方法は、上記の Build from sourceのセクションを参照してください。

初回起動時に、VPN ツールを管理者権限で実行する小さなヘルパーのインストールを求められます。 これは「システム設定 → 一般 → ログイン項目」で一度承認します。ヘルパーが実行するのは、アプリ内にある署名済みの openvpn と openfortivpn のコピーのみで、 sudoers ルールは必要ありません。セキュリティモデルについてはSECURITY.mdを、その他の情報についてはこのドキュメントの英語の 各セクションを参照してください。

プロジェクト: ガバナンスモデルについてはGOVERNANCE.md、ロードマップについてはROADMAP.md、 行動規範についてはCODE_OF_CONDUCT.md、保証分析については docs/ASSURANCE.md、コントリビューションのガイドラインについてはCONTRIBUTING.md を参照してください(ドキュメントは英語です)。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。