Pangolin セルフホスト環境を構築する手順メモ
Pangolin とは
Pangolin は、WireGuard ベースのオープンソースのゼロトラストリモートアクセスプラットフォームです。従来の VPN とは異なり、ユーザーのアイデンティティとコンテキスト(場所・デバイスなど)に基づいてアクセス制御を行い、特定のアプリケーションやリソースのみに接続できます。
特徴をまとめると以下の通りです。
- リバースプロキシ + VPN を統合: ブラウザ経由で Web アプリにアクセスし、クライアント(Newt)で SSH・RDP・データベースなどのプライベートリソースにも接続
- ファイアウォール越え: Newt は外向きのトンネル만作成するため、内網側に公開ポートが不要
- ゼロトラスト: 認証済みユーザーにのみアクセスを許可、ネットワーク単位のアクセスではなくリソース単位で制御
- オープンソース: コミュニティ版は無償で使用可能(エンタープライズ版もあり)
アーキテクチャの概要
Pangolin のシステムは大きく分けて以下のコンポーネントで構成されています。
| コンポーネント | 役割 |
|---|---|
| Pangolin | ダッシュボード・API・リバースプロキシ(ユーザーが操作するサーバー側) |
| Gerbil | WireGuard サーバー。Newt やクライアントとのトンネルを管理 |
| Newt | サイト側(リモートネットワーク)にインストールするコネクタ。トンネルを作成 |
| Traefik | SSL/TLS 終端・リバースプロキシ |
| ダッシュボード | ブラウザでアクセスする管理画面 |
構築に必要なもの
| 項目 | 必要なもの |
|---|---|
| サーバー | Ubuntu 20.04+ または Debian 11+(推奨)、ルートアクセスのある VPS |
| ドメイン | サーバー IP に解決されるドメイン(例: pangolin.example.com) |
| DNS | ワイルドカード A レコード(*.example.com → VPS IP) |
| ポート | TCP 80, 443 / UDP 51820, 21820 |
| Docker | インストーラーが自動でインストールします |
1. DNS 設定
まず、VPS の IP アドレスに向かう DNS レコードを作成します。
Type: A
Name: *
Value: <VPSのIPアドレス>
TTL: 300
ワイルドカードレコードを作成することで、pangolin.example.com のようなサブドメインがすべて VPS に向かうようになります。
ルートドメイン(example.com)も使い場合は、@ の A レコードも追加してください。
2. ファイアウォールの設定
Pangolin に必要なポートを開放します。
UFW(Ubuntu/Debian)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 51820/udp
sudo ufw allow 21820/udp
sudo ufw enable
firewalld(CentOS/RHEL/AlmaLinux)
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --permanent --add-port=51820/udp
sudo firewall-cmd --permanent --add-port=21820/udp
sudo firewall-cmd --reload
3. Pangolin サーバーのインストール
インストーラーのダウンロード
SSH で VPS に接続し、インストーラーをダウンロードします。
curl -fsSL https://static.pangolin.net/get-installer.sh | bash
インストーラーの実行
インストール先ディレクトリに移動してから実行してください。
sudo ./installer
インストーラーは以下の設定を順に確認します。
| 設定項目 | 説明 |
|---|---|
| Edition | Community Edition を選択(エンタープライズ版は有償) |
| Base Domain | ルートドメインを入力(例: example.com) |
| Dashboard Domain | デフォルトの pangolin.example.com で OK( Enter キー) |
| Let’s Encrypt Email | SSL 証明書の通知用メールアドレス |
| Tunneling | Gerbil をインストールするか(デフォルト: Yes) |
SMTP(メール送信)の設定は任意です。初期構築では No で問題ありません。
インストーラーがコンテナ(pangolin, gerbil, traefik)をプルして起動します。ネットワーク速度により 2〜3 分程度かかります。
セットアップトークンの取得
インストール完了後、以下のコマンドでセットアップトークンを取得します。
sudo docker compose logs pangolin
ログに表示されるトークンを控えてください(ブラウザでダッシュボードの初期設定画面で使用します)。
ダッシュボードの初期設定
ブラウザで以下の URL にアクセスします。
https://pangolin.example.com/auth/initial-setup
SSL 証明書の発行に数分かかる場合があります。最初はブラウザが「安全でない接続」と警告を出す可能性があります。
以下の手順で管理者アカウントを作成します。
- セットアップトークンを貼り付け
- 管理者メールアドレスを入力
- パスワードを設定
- オーガネーション(組織)名と説明を入力して作成
これでサーバー側の設定は完了です。
4. Newt(サイトコネクタ)のインストール
Newt はリモートネットワーク(自宅サーバー・オフィス内ネットワークなど)にインストールし、Pangolin サーバーとの WireGuard トンネルを作成するクライアントソフトです。
ダッシュボードでサイトを作成
- Pangolin ダッシュボードにログイン
- Sites → Create Site をクリック
- サイト名を入力(例:
home-server) - ID と Secret が表示されるので控える
この ID と Secret は Newt の認証に使います。紛失すると再生成が必要です。
方法 A: インストールスクリプト(推奨)
最も簡単な方法です。
curl -fsSL https://static.pangolin.net/get-newt.sh | bash
アーキテク自動検出され、最新版がダウンロードされて PATH に追加されます。
実行します。
newt \
--id <サイトID> \
--secret <サイトSecret> \
--endpoint https://pangolin.example.com
方法 B: バイナリの手動ダウンロード
GitHub Releases から直接ダウンロードします。
# AMD64 の場合
wget -O newt "https://github.com/fosrl/newt/releases/latest/download/newt_linux_amd64"
chmod +x ./newt
# ARM64 の場合
wget -O newt "https://github.com/fosrl/newt/releases/latest/download/newt_linux_arm64"
chmod +x ./newt
実行します。
./newt \
--id <サイトID> \
--secret <サイトSecret> \
--endpoint https://pangolin.example.com
方法 C: Docker Compose
Docker 環境がある場合は Docker Compose で実行します。
services:
newt:
image: fosrl/newt
container_name: newt
restart: unless-stopped
environment:
- PANGOLIN_ENDPOINT=https://pangolin.example.com
- NEWT_ID=<サイトID>
- NEWT_SECRET=<サイトSecret>
docker compose up -d
5. systemd サービスとして登録(バイナリ版)
本番環境では Newt を systemd サービスとして常時起動にします。
設定ファイルの作成
sudo install -d -m 0755 /etc/newt
/etc/newt/newt.env を作成します。
NEWT_ID=<サイトID>
NEWT_SECRET=<サイトSecret>
PANGOLIN_ENDPOINT=https://pangolin.example.com
sudo chmod 600 /etc/newt/newt.env
systemd ユニットの作成
/etc/systemd/system/newt.service を作成します。
[Unit]
Description=Newt
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=root
Group=root
EnvironmentFile=/etc/newt/newt.env
ExecStart=/usr/local/bin/newt
Restart=always
RestartSec=2
UMask=0077
PrivateTmp=true
[Install]
WantedBy=multi-user.target
サービスの有効化と起動
which newt # バイナリの存在を確認
sudo systemctl daemon-reload
sudo systemctl enable --now newt
sudo systemctl status newt
ログの確認:
sudo journalctl -u newt -f
6. 接続の確認
ダッシュボードでステータスを確認
Pangolin ダッシュボードの Sites ページで、接続したサイトが Online と表示されれば成功です。
リソースの追加
サイトがオンラインになったら、リソースを追加してユーザーがアクセスできるようにします。
- Resources → Create Resource をクリック
- リソース名・タイプ(HTTP / SSH / RDP / TCP / UDP)を選択
- ターゲット(接続先のアドレスとポート)を設定
- 認証ルールを設定(必要に応じて)
クライアント(ユーザー側)の接続
プライベートリソース(SSH・RDP・データベースなど)にアクセスするには、Pangolin クライアントをインストールします。
- macOS / Windows / Linux: GitHub Releases または公式ダウンロードページ
- iOS / Android: App Store / Google Play
クライアントをインストール後、ダッシュボードの Clients でクライアントを作成し、ID と Secret を入力して接続します。
トラブルシューティング
| 症状 | 確認ポイント |
|---|---|
| Newt がオンラインにならない | ファイアウォールで UDP 51820 が開放されているか確認。nc -zu <VPS_IP> 51820 で疎通テスト |
| SSL 証明書が発行されない | TCP 80 が開放されているか、DNS が正しく解決されているか確認 |
| ダッシュボードにアクセスできない | DNS の伝播を待つ。dig pangolin.example.com で IP が正しいか確認 |
| クライアントが接続できない | UDP 21820 が開放されているか確認(クライアントリレー用ポート) |
まとめ
Pangolin は Docker コンテナベースで容易にデプロイでき、Newt の導入もスクリプト一発で完了します。従来の VPN ソリューションと比較して、ファイアウォール越えの設定が不要で、リソース単位のアクセス制御ができるため、小規模な環境でも使いやすいのが魅力です。
自宅サーバーへの外部アクセスや、複数拠点間の接続、開発環境へのリモートアクセスなど、用途は幅広く対応できます。