🚇

SSHポートフォワーディングを劇的に快適にする「MolePort」完全ガイド【導入から活用まで】

に公開

はじめに

普段からSSH先のリモートサーバーで開発を行っており、最近はZedエディタを使い始めました。Zedは非常に快適なエディタなのですが、VSCodeのRemote SSHのようなポートフォワーディング機能がないため、ローカルからリモートのサービスにアクセスしたいときは毎回手動でSSHトンネルを張る必要があり、ずっと不便に感じていました。

そんな中で出会ったのが MolePort です。

MolePortは、こうしたSSHポートフォワーディングの悩みを解決するために生まれた、Go言語製のデーモン+クライアントアーキテクチャのポートフォワーディングマネージャです。

https://github.com/ousiassllc/MolePort

この記事では、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 Layerx/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ポートフォワーディングを日常的に使う方は、ぜひ試してみてください。

https://github.com/ousiassllc/MolePort

VeriCerts Tech Blog

Discussion