AI

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

機能比較表

比較項目WireGuardTailscaleHeadscale
セットアップ難易度中(手動設定)低(1コマンド)中(サーバー必要)
NAT越え手動(ポート開放)✅(自動)✅(自動)
コントロールプレーン不要Tailscale社セルフホスト
MagicDNS
ACLポリシーiptables✅(GUI)✅(JSON)
月額コスト無料無料〜$18/ユーザー無料(インフラのみ)
GitHub Stars16k+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越え・チームVPNTailscale(クラウド)
TailscaleをセルフホストしたいHeadscale

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。