OSSのVPN比較:WireGuard vs Tailscale vs Headscale でゼロトラストネットワークを構築
オープンソースラボ編集部 ・ 2026年6月13日
OSSのVPN比較:WireGuard vs Tailscale vs Headscale でゼロトラストネットワークを構築
商用VPN(NordVPN Team 月$7/ユーザー〜)・Cisco AnyConnect(年数十万円〜)に対して、WireGuard(最速・最シンプルなVPNプロトコル)・Tailscale(WireGuardベースのゼロ設定メッシュVPN)・Headscale(TailscaleのオープンソースコントロールプレーンでセルフホストTailscale)はOSSのVPNソリューションです。
セルフホストVPNが必要な場面
- リモートワーク: 自宅から社内サーバー・データベースにセキュアに接続
- 開発環境保護: 本番データベース・Kubernetesクラスターをインターネット非公開に
- ゼロトラスト: IPでなくアイデンティティベースのネットワークアクセス制御
- サイト間VPN: オフィス間・クラウド間のプライベート接続
主要ツールの概要
WireGuard
2018年にLinus Torvaldsが賞賛した次世代VPNプロトコルです。GitHubスター16k+(tools)。Linux 5.6からカーネルに組み込まれており、OpenVPNより5倍高速・設定はわずか数行というシンプルさが特徴。Crypto(ChaCha20+Poly1305+Curve25519)が新しく安全。モバイルアプリ(iOS・Android)も無料で提供されます。
# WireGuardのサーバーセットアップ(Ubuntu 22.04)
apt install wireguard
# キーペアを生成
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key
chmod 600 /etc/wireguard/server_private.key
SERVER_PRIVATE=$(cat /etc/wireguard/server_private.key)
SERVER_PUBLIC=$(cat /etc/wireguard/server_public.key)
# WireGuard設定ファイル
cat > /etc/wireguard/wg0.conf << EOF
[Interface]
Address = 10.10.0.1/24
ListenPort = 51820
PrivateKey = ${SERVER_PRIVATE}
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
DNS = 1.1.1.1
# クライアント1(開発者のMac)
[Peer]
PublicKey = CLIENT1_PUBLIC_KEY_HERE
AllowedIPs = 10.10.0.2/32
# クライアント2(Kubernetesクラスター)
[Peer]
PublicKey = CLIENT2_PUBLIC_KEY_HERE
AllowedIPs = 10.10.0.3/32
EOF
# IPv4フォワーディングを有効化
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
# WireGuardを起動
systemctl enable --now wg-quick@wg0
# UFWでWireGuardポートを開放
ufw allow 51820/udp
# クライアント(Mac/Linux)の設定
# クライアント側のキーペアを生成
wg genkey | tee client_private.key | wg pubkey > client_public.key
cat > /etc/wireguard/wg0.conf << EOF
[Interface]
Address = 10.10.0.2/32
PrivateKey = CLIENT_PRIVATE_KEY
DNS = 10.10.0.1
[Peer]
PublicKey = SERVER_PUBLIC_KEY
AllowedIPs = 10.10.0.0/24, 192.168.1.0/24 # 社内LAN + VPNサブネット
Endpoint = your-server.com:51820
PersistentKeepalive = 25 # NATキープアライブ(モバイル接続が安定する)
EOF
wg-quick up wg0
Tailscale
2020年にWireGuardベースのゼロ設定メッシュVPNとして公開されました(GitHubスター21k+、クライアント側はMIT)。インストールするだけでNATを自動越えしてデバイス間を直接接続するのが最大の特徴。設定ファイルなし・ポート開放なし・IPアドレス管理不要でP2P接続が確立します。MagicDNS(hostname.tailscale-network-name.ts.netでのDNS解決)・ACLポリシー・SSH over Tailscaleを標準搭載。コントロールプレーン(調整サーバー)はTailscale社が運用(セルフホストはHeadscaleで代替可)。
# TailscaleクライアントのインストールとVPN接続(1コマンド)
curl -fsSL https://tailscale.com/install.sh | sh
# 認証してネットワークに参加
tailscale up --authkey=tskey-auth-xxxx
# デバイスの状態確認
tailscale status
# 出力例:
# 100.64.0.1 your-macbook yourself macOS idle
# 100.64.0.2 prod-server yourself linux active; direct 203.0.113.1:51820
# 100.64.0.3 dev-k8s-node-1 yourself linux active; relay "tok"
# MagicDNSでDBサーバーに接続(IPアドレスなしで接続可)
psql -h prod-db.yourtailnet.ts.net -U postgres -d myapp
# ACLポリシーでアクセス制御(tailscale.com/admin または headscale)
# 例: エンジニアはdbサーバーの5432ポートのみアクセス可
Headscale
2021年に公開されたGo製のTailscaleコントロールプレーンのOSS実装です。GitHubスター24k+。TailscaleのクライアントアプリをそのままHeadscaleサーバーに向けることで、Tailscale社に依存せずにTailscaleの利便性(ゼロ設定・NAT越え・MagicDNS)をセルフホストで実現します。
# HeadscaleをDockerで起動
mkdir -p headscale/config headscale/data
cat > headscale/config/config.yaml << 'EOF'
server_url: https://vpn.yourcompany.com:443
listen_addr: 0.0.0.0:8080
metrics_listen_addr: 127.0.0.1:9090
private_key_path: /var/lib/headscale/private.key
ip_prefixes:
- fd7a:115c:a1e0::/48
- 100.64.0.0/10
dns_config:
nameservers:
- 1.1.1.1
domains: []
magic_dns: true
base_domain: yourcompany.internal # MagicDNSドメイン
db_type: sqlite3
db_path: /var/lib/headscale/db.sqlite
EOF
docker run -d --name headscale -p 8080:8080 -v headscale/config:/etc/headscale -v headscale/data:/var/lib/headscale headscale/headscale:latest headscale serve
# 名前空間(Tailscaleのtailnetに相当)を作成
docker exec headscale headscale namespaces create engineering
# 認証キーを生成
docker exec headscale headscale preauthkeys create --namespace engineering
# Tailscaleクライアントをheadscaleに向ける
tailscale up --login-server=https://vpn.yourcompany.com --authkey=KEY
機能比較表
| 比較項目 | WireGuard | Tailscale | Headscale |
|---|---|---|---|
| セットアップ難易度 | 中(手動設定) | 低(1コマンド) | 中(サーバー必要) |
| NAT越え | 手動(ポート開放) | ✅(自動) | ✅(自動) |
| コントロールプレーン | 不要 | Tailscale社 | セルフホスト |
| MagicDNS | ❌ | ✅ | ✅ |
| ACLポリシー | iptables | ✅(GUI) | ✅(JSON) |
| 月額コスト | 無料 | 無料〜$18/ユーザー | 無料(インフラのみ) |
| GitHub Stars | 16k+ | 21k+ | 24k+ |
VPNと組み合わせてアクセス制御をセルフホストで実現するにはSecurityカテゴリ/categories/securityのKeycloak・Authentikとの連携が有効です。VPN経由のトラフィック監視・可視化にはDevOpsカテゴリ/categories/devopsのGrafana+Prometheusでメトリクスをダッシュボード化できます。
FAQ
Q. WireGuardとOpenVPNのどちらを選ぶべきですか?
A. WireGuardを選ぶ場合: ①最速のVPN(OpenVPN比3〜5倍)②最小構成(数百行のコード)③新しい暗号化アルゴリズム(ChaCha20・Curve25519)④モバイルでのバッテリー消費が少ない。OpenVPNを選ぶ場合: ①既存のインフラ・設定資産を流用したい②TCP Mode(443ポート)でDeep Packet Inspectionを回避したい③クライアント証明書・PKIによる厳格な認証が必要。新規構築であれば迷わずWireGuardが推奨されます。
Q. Tailscaleは完全に無料で使えますか?
A. Tailscaleには無料プランがあり、最大3ユーザー・100デバイスまで使えます。それ以上は月$18/ユーザー(Personal Plus)または月$6/ユーザー(Teams)。コントロールプレーンをセルフホストしたい場合はHeadscaleを使うとTailscaleクライアントアプリは無料のまま、コントロールプレーンを自社サーバーで運用できます(Tailscale社のサービスを使わない)。
Q. Headscaleは複数拠点のサイト間VPNに使えますか?
A. はい。各拠点のゲートウェイマシン(ルーター役)にTailscaleクライアントをインストールし、Headscaleに参加させます。各ゲートウェイに--advertise-routes=192.168.1.0/24でサブネットを広告すると、VPN参加デバイスは拠点の内部ネットワーク全体にアクセスできます。Headscaleの管理コンソールでheadscale routes enable -r ROUTE_IDでルートを有効化します。
Q. WireGuardのキー管理(ピアの追加・削除)を自動化するには?
A. wg-easy(Docker付きのWireGuard管理UI、GitHubスター18k+)が便利です。WebUIからピアの追加・削除・QRコード表示ができます。またはwg-access-serverで認証付きセルフサービスVPNポータルを構築できます。大規模な場合はAnsibleでWireGuard設定を自動配布するのが一般的です。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| 高速・シンプル・フルコントロール | WireGuard |
| ゼロ設定・NAT越え・チームVPN | Tailscale(クラウド) |
| Tailscaleをセルフホストしたい | Headscale |