SSHポートフォワーディングを劇的に快適にする「MolePort」完全ガイド【導入から活用まで】
はじめに
普段からSSH先のリモートサーバーで開発を行っており、最近はZedエディタを使い始めました。Zedは非常に快適なエディタなのですが、VSCodeのRemote SSHのようなポートフォワーディング機能がないため、ローカルからリモートのサービスにアクセスしたいときは毎回手動でSSHトンネルを張る必要があり、ずっと不便に感じていました。
そんな中で出会ったのが MolePort です。
MolePortは、こうしたSSHポートフォワーディングの悩みを解決するために生まれた、Go言語製のデーモン+クライアントアーキテクチャのポートフォワーディングマネージャです。
この記事では、MolePortのインストールから実践的な使い方、設定のカスタマイズ、そしてその内部アーキテクチャまでを一気に解説します。
この記事で分かること:
- MolePortのインストールと基本的な使い方
- Local / Remote / Dynamic SOCKS5 の3つの転送タイプの活用法
- 設定ファイルによるカスタマイズ
- デーモン+クライアントアーキテクチャの仕組み
MolePortとは?
MolePortは、SSHポートフォワーディングの設定・接続・切断をCLIまたはTUIで操作できるツールです。~/.ssh/config からホスト情報を自動的に読み取り、バックグラウンドデーモンがSSH接続を永続的に管理します。
動作要件: Go 1.25+ / Linux・macOS
主要機能:
- デーモン+クライアント構成 — ターミナルを閉じてもポートフォワーディングが継続
- 3つの転送タイプ — Local(-L) / Remote(-R) / Dynamic SOCKS5(-D) をサポート
-
SSH Config統合 —
~/.ssh/configを自動読み込み(Includeディレクティブ対応) - 自動再接続 — ジッター付き指数バックオフで切断時に自動復旧
- リアルタイムモニタリング — 接続状態、稼働時間、転送データ量を表示
- TUIダッシュボード — Bubble Tea製の対話型UI、日本語/英語切り替え、10種のカラーテーマ
- セッション自動復元 — デーモン再起動時に前回の転送ルールを復元
-
セルフアップデート —
moleport updateでツール自体を更新
インストール
git clone https://github.com/ousiassllc/MolePort.git
cd MolePort
make install
バイナリは $(go env GOPATH)/bin に配置されます。PATHが通っていない場合は、export PATH=$PATH:$(go env GOPATH)/bin を .bashrc や .zshrc に追加してください。
ビルドだけ行いたい場合は make build で ./bin/moleport に出力されます。
クイックスタート
MolePortの基本的な使い方を5ステップで紹介します。
Step 1: デーモンを起動する
moleport daemon start
バックグラウンドでデーモンプロセスが起動し、SSH接続とポートフォワーディングを管理します。
Step 2: SSHホストに接続する
moleport connect prod-server
~/.ssh/config に定義されたホスト名を指定します。SSH認証が行われ、接続が確立されます。
Step 3: 転送ルールを追加する
moleport add --host prod-server --type local \
--local-port 8080 --remote-host localhost --remote-port 80 \
--name web
ローカルの8080番ポートへのアクセスが、SSHトンネル経由でリモートの80番ポートに転送されるルールを作成します。--name でルールに名前を付けておくと、後続の操作で識別しやすくなります(省略した場合は自動生成されます)。
Step 4: 転送を開始する
moleport start web
Step 3 で付けたルール名を指定して、ポートフォワーディングを開始します。
Step 5: TUIで状態を確認する
moleport tui
TUIダッシュボードが起動し、すべての接続と転送ルールの状態をリアルタイムで確認できます。
3つのポートフォワーディングタイプ
MolePortは、SSHがサポートする3つの転送タイプすべてに対応しています。
Local Forwarding (-L)
ローカルマシンのポートを、SSHトンネル経由でリモートサーバーのポートに転送します。
ユースケース: リモートのデータベースやAPIにローカルからアクセスしたい場合
moleport add --host db-server --type local \
--local-port 5432 --remote-host localhost --remote-port 5432
[ローカル:5432] → SSH トンネル → [リモート:5432 (PostgreSQL)]
ブラウザやDBクライアントから localhost:5432 に接続するだけで、リモートのPostgreSQLに安全にアクセスできます。
Remote Forwarding (-R)
ローカルの逆方向で、リモートサーバーのポートへのアクセスをローカルマシンに転送します。
ユースケース: ローカルで動かしている開発サーバーをリモートホストから参照したい場合
moleport add --host staging --type remote \
--local-port 3000 --remote-host localhost --remote-port 8080
[リモート:8080] → SSH トンネル → [ローカル:3000 (開発サーバー)]
ステージング環境からローカルの開発サーバーに直接アクセスでき、デプロイ前のテストに便利です。
Dynamic SOCKS5 Forwarding (-D)
ローカルにSOCKS5プロキシを立て、すべてのトラフィックをSSHトンネル経由でルーティングします。
ユースケース: リモートネットワーク内のリソースにブラウザ等からアクセスしたい場合
moleport add --host proxy-server --type dynamic --local-port 1080
[ローカル:1080 (SOCKS5)] → SSH トンネル → [リモートネットワーク] → インターネット
ブラウザのプロキシ設定を localhost:1080 に向けるだけで、リモートネットワーク内のリソースにアクセスできます。
設定ファイル
MolePortの設定は ~/.config/moleport/config.yaml で管理します。
# SSH設定ファイルのパス
ssh_config_path: "~/.ssh/config"
# 自動再接続の設定
reconnect:
enabled: true
max_retries: 10 # 最大リトライ回数
initial_delay: "1s" # 初回リトライまでの待機時間
max_delay: "60s" # 最大待機時間(指数バックオフの上限)
keepalive_interval: "30s" # KeepAliveの送信間隔
# セッション管理
session:
auto_restore: true # デーモン起動時に前回の転送ルールを復元
# ログ設定
log:
level: "info" # debug / info / warn / error
file: "~/.config/moleport/moleport.log"
# UI設定
language: "ja" # "en" | "ja"
tui:
theme:
base: "dark" # "dark" | "light"
accent: "violet" # "violet" | "blue" | "green" | "cyan" | "orange"
# 自動アップデートチェック
update_check:
enabled: true
interval: "24h"
# ホスト別の再接続設定(グローバル設定を上書き)
hosts:
prod-server:
reconnect:
max_retries: 20
max_delay: "120s"
SSH Config統合
MolePortは ~/.ssh/config を自動的に読み込み、定義済みのホスト情報を利用します。
-
Includeディレクティブに対応しており、分割された設定ファイルも正しく読み込まれます - ホスト鍵の検証は
~/.ssh/known_hostsを使用します - 複数の
IdentityFileをサポートしています - Tailscale等でホスト鍵が変わる環境では、該当ホストに
StrictHostKeyChecking noを設定することで対応できます
CLIコマンドリファレンス
| カテゴリ | コマンド | 説明 |
|---|---|---|
| デーモン | daemon start |
デーモンをバックグラウンドで起動 |
daemon stop |
デーモンを停止 | |
daemon status |
デーモンの状態を表示 | |
daemon kill |
デーモンを強制終了 | |
| SSH | connect <host> |
SSHホストに接続 |
disconnect <host> |
SSHホストから切断 | |
| 転送 | add [flags] |
転送ルールを追加 |
delete <name> |
転送ルールを削除 | |
start <name> |
転送を開始 | |
stop <name> |
転送を停止 | |
| 情報 | list [--json] |
ホストとルールの一覧を表示 |
status |
接続サマリーを表示 | |
| 設定 | config |
現在の設定を表示 |
reload |
SSH設定を再読み込み | |
| その他 | tui |
TUIダッシュボードを起動 |
update [--check] |
自動アップデート | |
version |
バージョン情報を表示 |
アーキテクチャの見どころ
MolePortは単なるSSHコマンドのラッパーではなく、堅牢な設計に基づいて構築されています。ここでは、その設計上の見どころを紹介します。
デーモン+クライアントの分離
MolePortの最大の特徴は、バックグラウンドデーモンとクライアント(CLI/TUI)が完全に分離されている点です。クライアントは、Unixドメインソケット(~/.config/moleport/moleport.sock)上のJSON-RPC 2.0プロトコルでデーモンと通信します。
この設計により、TUIを閉じてもポートフォワーディングは継続し、必要なときだけTUIを開いて状態を確認できます。
自動再接続メカニズム
SSH接続が切断された場合、MolePortはジッター付き指数バックオフで自動再接続を試みます。待機時間を指数関数的に増やしつつ、0〜10%のランダムなジッター(揺らぎ)を加えることで、サーバーへの負荷集中を防ぎます。
再接続ポリシーはホスト単位で上書きでき、重要度の高いサーバーにはより粘り強いリトライ設定を適用できます。
レイヤー構造
MolePortは4層のクリーンなレイヤー構造を持っています。
- IPC Layer — JSON-RPC 2.0メッセージのルーティングとイベント配信
- Core Layer — SSH接続管理、ポートフォワーディング制御、設定管理のビジネスロジック
-
Infrastructure Layer —
x/crypto/sshラッパー、SSH Config解析、YAML永続化 - TUI Layer — Bubble TeaのModel-Update-ViewパターンによるUI実装
イベント駆動のリアルタイム更新
TUIダッシュボードは、デーモンからのイベント通知によってリアルタイムに更新されます。TUIクライアントが events.subscribe でイベントストリームを開始すると、SSH接続状態の変化や転送状態の更新がJSON-RPC通知として即座に反映されます。
まとめ
MolePortは、日常的なSSHポートフォワーディングの面倒な操作を劇的に改善するツールです。
特に、Zedのようにポートフォワーディング機能を持たないエディタでリモート開発をしている方や、複数のSSHトンネルを同時に管理したい方にとって、痒いところに手が届くツールだと感じています。
デーモンアーキテクチャによってターミナルを閉じてもトンネルが継続し、自動再接続でネットワーク断からも復旧してくれるため、「トンネルが切れていた」というストレスから解放されます。セッション復元機能もあるため、PC再起動後もすぐに開発環境に戻れます。
SSHポートフォワーディングを日常的に使う方は、ぜひ試してみてください。
Discussion