ホーム 記事一覧

Pangolin セルフホスト環境を構築する手順メモ

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 証明書の発行に数分かかる場合があります。最初はブラウザが「安全でない接続」と警告を出す可能性があります。

以下の手順で管理者アカウントを作成します。

  1. セットアップトークンを貼り付け
  2. 管理者メールアドレスを入力
  3. パスワードを設定
  4. オーガネーション(組織)名と説明を入力して作成

これでサーバー側の設定は完了です。

4. Newt(サイトコネクタ)のインストール

Newt はリモートネットワーク(自宅サーバー・オフィス内ネットワークなど)にインストールし、Pangolin サーバーとの WireGuard トンネルを作成するクライアントソフトです。

ダッシュボードでサイトを作成

  1. Pangolin ダッシュボードにログイン
  2. SitesCreate Site をクリック
  3. サイト名を入力(例: home-server
  4. IDSecret が表示されるので控える

この 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 と表示されれば成功です。

リソースの追加

サイトがオンラインになったら、リソースを追加してユーザーがアクセスできるようにします。

  1. ResourcesCreate Resource をクリック
  2. リソース名・タイプ(HTTP / SSH / RDP / TCP / UDP)を選択
  3. ターゲット(接続先のアドレスとポート)を設定
  4. 認証ルールを設定(必要に応じて)

クライアント(ユーザー側)の接続

プライベートリソース(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 ソリューションと比較して、ファイアウォール越えの設定が不要で、リソース単位のアクセス制御ができるため、小規模な環境でも使いやすいのが魅力です。

自宅サーバーへの外部アクセスや、複数拠点間の接続、開発環境へのリモートアクセスなど、用途は幅広く対応できます。