ヘッドレスサーバーにVPNをデプロイする
FreeGuard CLIは、デスクトップ環境を必要とせず、ヘッドレスLinuxサーバーでネイティブに動作します。クラウドインスタンスのセキュリティ確保、ホームラボの保護、コンテナトラフィックのVPN経由でのルーティングなど、このガイドでは本番サーバーデプロイメントのためのインストール、認証、サービス設定、モニタリングについて説明します。

ヘッドレスサーバーにVPNをデプロイする

FreeGuard CLIは、デスクトップ環境を必要とせず、ヘッドレスLinuxサーバーでネイティブに動作します。クラウドインスタンスのセキュリティ確保、ホームラボの保護、コンテナトラフィックのVPN経由でのルーティングなど、このガイドでは本番サーバーデプロイメントのためのインストール、認証、サービス設定、モニタリングについて説明します。

なぜサーバーでVPNを実行するのか?

サーバーは機密性の高いトラフィックを処理します:データベース接続、APIコール、バックアップ転送、サービス間通信。サーバー自体でVPNを実行することで、個別のアプリケーションを設定することなく、すべてのアウトバウンドトラフィックが暗号化されます。

一般的なユースケース:

  • 地理的に制限されたAPIにアクセスするクラウドインスタンス
  • 一貫したネットワークIDが必要なCI/CDランナー
  • IPマスキングの恩恵を受けるセルフホストサービス
  • 分散チームが使用する開発サーバー

インストール

Ubuntu / Debian

curl -fsSL https://cli.freeguard.com/install.sh | bash

またはAPTリポジトリからインストール:

curl -fsSL https://cli.freeguard.com/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/freeguard.gpg
echo "deb [signed-by=/usr/share/keyrings/freeguard.gpg] https://apt.freeguard.com stable main" | sudo tee /etc/apt/sources.list.d/freeguard.list
sudo apt update
sudo apt install freeguard-cli

CentOS / RHEL / Fedora

curl -fsSL https://cli.freeguard.com/install.sh | bash

またはRPMリポジトリを使用:

sudo rpm --import https://cli.freeguard.com/gpg.key
sudo tee /etc/yum.repos.d/freeguard.repo <<EOF
[freeguard]
name=FreeGuard CLI
baseurl=https://rpm.freeguard.com/stable
gpgcheck=1
gpgkey=https://cli.freeguard.com/gpg.key
EOF
sudo yum install freeguard-cli

Alpine Linux

curl -fsSL https://cli.freeguard.com/install.sh | bash

Alpineユーザーは最初にlibc6-compatのインストールが必要な場合があります:

apk add libc6-compat
curl -fsSL https://cli.freeguard.com/install.sh | bash

インストールの確認

freeguard --version

ヘッドレス認証

ブラウザのないサーバーでは、デフォルトのOAuthログインフローは使用できません。FreeGuard CLIはヘッドレス環境向けにメールベースの認証を提供します。

メールログイン

freeguard login --method email

CLIがアカウントのメールアドレスの入力を求めます。そのアドレスに認証コードが送信されます。ターミナルでコードを入力して認証を完了します。

$ freeguard login --method email
Enter your email: [email protected]
Verification code sent. Check your inbox.
Enter code: 483291
Login successful.

トークンベースのログイン

自動デプロイメントには、サービストークンを使用します:

freeguard login --method token --token YOUR_SERVICE_TOKEN

アカウントダッシュボードからサービストークンを生成します。トークンは特定のサーバーにスコープを制限でき、有効期限を設定できます。

認証の確認

freeguard status --json | jq '.authenticated'

systemdサービスとして実行

本番デプロイメントでは、FreeGuard CLIをsystemdサービスとして実行し、起動時に自動開始し、障害時に再起動するようにします。

サービスファイルの作成

sudo tee /etc/systemd/system/freeguard.service <<EOF
[Unit]
Description=FreeGuard VPN
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/freeguard connect --server us-east --no-color
ExecStop=/usr/local/bin/freeguard disconnect
Restart=on-failure
RestartSec=10
User=root

[Install]
WantedBy=multi-user.target
EOF

有効化と起動

sudo systemctl daemon-reload
sudo systemctl enable freeguard
sudo systemctl start freeguard

サービスステータスの確認

sudo systemctl status freeguard

ログの表示

sudo journalctl -u freeguard -f

–jsonと–no-colorによるスクリプティング

本番スクリプトは、人間が読めるテキストではなく、構造化された出力を解析する必要があります。

JSON出力

すべてのコマンドが--jsonをサポートしています:

# Connection status
freeguard status --json

出力:

{
  "connected": true,
  "server": "us-east-1",
  "server_name": "New York",
  "protocol": "hysteria2",
  "uptime": 86400,
  "bytes_sent": 1048576,
  "bytes_received": 5242880
}

カラーなしモード

クリーンなログファイルのためにANSIカラーコードを除去:

freeguard status --no-color >> /var/log/freeguard-status.log

スクリプティングの例

障害時に再接続するヘルスチェックスクリプト:

#!/bin/bash
STATUS=$(freeguard status --json 2>/dev/null)
CONNECTED=$(echo "$STATUS" | jq -r '.connected')

if [ "$CONNECTED" != "true" ]; then
  echo "$(date): VPN disconnected, reconnecting..." >> /var/log/freeguard-health.log
  freeguard connect --server us-east --json >> /var/log/freeguard-health.log 2>&1
fi

定期的なチェックのためにcronに追加:

# Check VPN health every 5 minutes
*/5 * * * * /opt/scripts/freeguard-health.sh

モニタリングとヘルスチェック

基本的なヘルスチェック

freeguard status --json | jq -r '.connected'

trueまたはfalseを返します。あらゆるモニタリングシステムに対応できるシンプルさです。

モニタリングツールとの統合

Prometheus、Datadog、またはシェルコマンドを実行できるあらゆるモニタリングシステムにステータスをエクスポート:

#!/bin/bash
# prometheus-exporter.sh
STATUS=$(freeguard status --json)
CONNECTED=$(echo "$STATUS" | jq -r '.connected')
UPTIME=$(echo "$STATUS" | jq -r '.uptime')

if [ "$CONNECTED" = "true" ]; then
  echo "freeguard_connected 1"
  echo "freeguard_uptime_seconds $UPTIME"
else
  echo "freeguard_connected 0"
  echo "freeguard_uptime_seconds 0"
fi

アラート

ヘルスチェックをアラートシステムと組み合わせます。シンプルなwebhookの例:

#!/bin/bash
CONNECTED=$(freeguard status --json | jq -r '.connected')
if [ "$CONNECTED" != "true" ]; then
  curl -X POST https://hooks.example.com/alert \
    -H "Content-Type: application/json" \
    -d '{"text": "FreeGuard VPN disconnected on '"$(hostname)"'"}'
fi

セキュリティに関する考慮事項

  • rootとして実行:VPNトンネルはネットワークルートを変更するためにroot権限が必要です。systemdサービスはデフォルトでrootとして実行されます。
  • トークンの保存:サービストークンは~/.config/freeguard/に保存されます。適切なファイル権限を確認してください(chmod 600)。
  • ファイアウォールルール:UFWまたはiptablesを使用している場合、VPNトンネルインターフェースが許可されていることを確認してください。
  • キルスイッチ:VPNが切断された場合にすべてのトラフィックをブロックするキルスイッチを有効にします:freeguard config set kill-switch true

次のステップ

最終更新:2026年3月