ポートフォワーディング
Mobile SSH は Android と iOS の両方でローカルの SSH ポートフォワーディングに対応します。端末上のローカルポートが 127.0.0.1 で待ち受け、SSH 接続を通じてリモートのホストとポートへトラフィックを転送します。
Android の VPN ページには SSH VPN、ローカル SOCKS5 プロキシ、WireGuard、Shadowsocks、OpenVPN もあります。これらの設定は以下のローカル転送とは別です。
保存済みトンネルの構文
ポートフォワーディングのルールはカンマ区切りです。各エントリは次の 2 つの形式のいずれかを使います。
PORT
LOCAL:REMOTEHOST:REMOTE
短い形式:
8080
これは端末で 127.0.0.1:8080 をバインドし、サーバーの観点で localhost:8080 へ転送します。
完全な形式:
3000:localhost:3000
これは端末で 127.0.0.1:3000 をバインドし、SSH を通じてリモート側の localhost:3000 へ転送します。
複数の転送:
8080, 3000:localhost:3000, 15432:db.internal:5432
保存済みサーバーにトンネルを追加する
- Saved Servers を開きます。
- サーバープロファイルを追加または編集します。
- Port forwards にポートフォワーディングのルールを入力します。
- サーバーを保存します。
- サーバーに接続します。
アプリは SSH セッションが接続した後に保存済みの転送を適用します。
トンネルはサーバープロファイルに属する
ローカル転送は保存サーバーに設定し、接続時に起動します。変更する場合はサーバー設定を編集して再接続してください。
設定に保存したトンネルは、新しいネットワークでの再接続を含め、接続のたびに復元されます。
IPv6 の宛先
IPv6 の宛先は、コロンがポートの区切りと混同されないよう角かっこで囲む必要があります。
8080:[2001:db8::1]:80
角かっこのない裸の IPv6 アドレスは、黙って誤読されるのではなく、あいまいとして拒否されます。同じ角かっこの書式はサーバーのアドレス欄でも使え、その後ろに任意でポートを付けられます([fe80::1]:22)。
アドレスのバインド
Mobile SSH はローカル転送を端末の 127.0.0.1 にバインドします。これは意図的な設計で、トンネルを端末ローカルに保ち、IPv6 のみのループバックによる予期しない動作を避けます。オペレーティングシステムが同じ端末上の他アプリのネットワークアクセスを許可している場合、それらのアプリが転送されたローカルポートに接続できることがあります。
よくある例
リモートサーバーで動く Web サービスにアクセスする:
8080
その後、同じ端末のブラウザで http://127.0.0.1:8080 を開きます。
開発サーバーにアクセスする:
3000:localhost:3000
SSH サーバーから到達できる内部データベースにアクセスする:
15432:db.internal:5432
踏み台経由の接続
両方とも、保存 SSH サーバーを順序付きの保存踏み台リスト経由で接続できます。接続先を編集し、経由して接続に踏み台を追加して接続順に並べます。各段は自身の保存認証情報を使い、展開後の経路は最大 8 段です。
スマートフォンは最初の踏み台に接続し、以後のアドレスは前段のサーバーから到達できる必要があります。ローカル転送は端末・SFTP と同じ検証済み SSH 経路を使い、最終転送先は最後の SSH サーバーから接続します。各踏み台は先への TCP 転送を許可する必要があり、全サーバーの身元を認証前に確認します。踏み台は SSH 専用で、Eternal Terminal では使えません。
Android の VPN ルーティング
ホームから VPN を開き、名前付き設定を追加・取り込みして開始アイコンを押します。Android の VPN 許可を承認してください。有効中はルーティング停止になり、鉛筆で編集、ゴミ箱で削除します。よく使う VPN 種類が先頭になります。
Android の端末 VPN は同時に 1 接続だけです。別設定の開始で以前の VPN から切り替わります。ローカル SSH SOCKS5 は SSH 以外の VPN 経由で動作を継続できます。Tailscale は別アプリで、Mobile SSH VPN を開始すると置き換わります。IKEv2/IPsec は Mobile SSH ではなく Android の VPN 設定で管理します。
SSH VPN と SOCKS5 プロキシ
- **SSH VPN:**認証情報・踏み台を含む保存 SSH サーバーを選び、全アプリ・サイトまたは対象を選択します。サーバーは TCP 転送を許可する必要がありますが VPN ヘルパーは不要です。SSH は TCP とリモート DNS を運び、それ以外の割り当てられた UDP は遮断します。ブラウザーは QUIC から TCP に戻る場合があります。
- **SOCKS5 プロキシ:**専用設定画面で保存 SSH サーバーを選び、各アプリにローカルプロキシとリモート DNS を設定します。既定は
127.0.0.1:1080と生成パスワードです。認証情報付きプロキシ URL をコピーで対応クライアント向けsocks5h://URL を取得できます。Tailscale など既存 VPN を経由して SSH に接続でき、SSH VPN と SSH SOCKS5 は合計 1 設定のみ同時実行できます。
サイトは example.org のようなドメインで指定し、その配下も対象です。識別済みで一覧外のドメインは通常回線を使います。直接 IP 接続や暗号化 DNS で得たアドレスは一覧と確実に照合できず、SSH を使います。SSH VPN はアプリとサイト両方の選択を適用し、SOCKS5 はクライアント自身の設定で参加させます。
リモート DNS の既定は 1.1.1.1:53 で、SSH サーバーから届く数値アドレスを指定します。SSH VPN が再接続・認証待ちの間、SSH 対象の通信は遮断を続け、既知のバイパス先は通常通りです。停止・設定切り替え・VPN 権限取り消し・アプリ終了で保護は終わります。Android の常時接続やロックダウン保護は保証しません。
WireGuard、Shadowsocks、OpenVPN
- **WireGuard:**標準
.confを取り込むか貼り付けます。AllowedIPsが経路、DNSがリゾルバーです。ピアのハンドシェイクと通信量を確認してください。インターフェースが有効なだけでは到達可能とは限りません。 - Shadowsocks:
ss://を取り込むか、サーバー・ポート・パスワード・対応暗号・DNS を入力します。AES-128-GCM、AES-256-GCM、ChaCha20-Poly1305 に対応します。TCP・UDP をトンネルに流し、UDP と DNS にはサーバーの UDP リレーが必要です。プラグイン必須リンクと AEAD-2022 は非対応です。 - **OpenVPN:**証明書と鍵を内蔵した自己完結型
.ovpnを取り込みます。ユーザー名・パスワードと暗号化秘密鍵に対応し、サーバー証明書検証が必須です。経路・DNS は設定とサーバーに従い、フルトンネルには VPN DNS が必要です。外部ファイル、スクリプト、プラグイン、TAP、対話式認証チャレンジは非対応です。
これらのプロトコルエンジンはアプリに内蔵されています。Shadowsocks と OpenVPN に SSH VPN のアプリ・サイト選択機能はありません。VPN でも、サーバーの提供者や管理者が制限したインターネット接続を付与することはできません。
クイック設定タイル
一度 VPN 設定を開始すると Mobile SSH VPN タイルの対象になります。接続・再接続中を含め、有効な間はタイルが点灯します。タップで停止、再タップで記憶した設定を開始します。SOCKS5 の開始や他アプリの VPN の停止はしません。
Android 13 以降では VPN ページの初回表示時にタイル追加を要求します。断った場合や旧 Android はクイック設定 → 編集から追加できます。設定が削除済み、または権限がなければ VPN ページを開きます。
トンネルのトラブルシューティング
- SSH セッションが接続されていることを確認します — 転送はセッションが確立したあとに立ち上がります。
- ローカルポートがすでに使用されていないか確認します。
- リモートのホストとポートが SSH サーバーから到達できるか確認します。
- 宛先のサービスが SSH サーバー自体にある場合は
localhostを使います。 - SSH サーバーの背後にある別のホストへ転送する場合は、サーバーの内部 DNS 名または IP を使います。
- 踏み台経由では各段の認証情報・身元・TCP 転送権限を確認してください。
- VPN はサーバーや設定、DNS、Android の VPN 権限、他の実行中 VPN を確認してください。プロトコル別の確認事項はトラブルシューティングを参照してください。