AI

OSS VPN比較:WireGuard vs OpenVPN vs Tailscale でセキュアなリモートアクセスを構築

オープンソースラボ編集部2026年6月13日

OSS VPN比較:WireGuard vs OpenVPN vs Tailscale でセキュアなリモートアクセスを構築

AWSのVPN(月$72〜)やZscalerの企業VPN(月$5〜15/ユーザー)に対して、WireGuard(最速・最軽量)・OpenVPN(歴史ある互換性最高)・Tailscale(WireGuardベースのメッシュVPN・部分OSSコア)はセルフホスト可能なVPNソリューションです。リモートワーカーの社内リソースアクセス・クラウドネットワーク接続・ゼロトラスト化を低コストで実現できます。

OSS VPNを選ぶ理由

  • コスト削減: AWS Site-to-Site VPNの月$72 + データ転送料をゼロに
  • プライバシー: 商用VPNサービスはログを保持する可能性があるが、セルフホストなら完全なプライバシー
  • パフォーマンス: WireGuardはOpenVPNより3〜4倍高速(本番実測値)
  • ゼロトラスト: IPアドレスでなくデバイス証明書・ユーザー認証でアクセス制御
  • エッジケース対応: 独自のルーティング・スプリットトンネリング・Kill Switchを設定

主要ツールの概要

WireGuard

Linux Kernel 5.6以降に統合されたVPNプロトコルです。GitHubスター6k+(wireguard-go実装)。4,000行のコード(OpenVPNの70,000行に対して)で実装され、ChaCha20暗号・Curve25519鍵交換でシンプルかつ安全。起動が瞬時で、モバイルのネットワーク切り替え時の再接続が非常に速い。

# WireGuardをUbuntuサーバーにセットアップ(VPNサーバー側)
apt-get install -y wireguard

# サーバーの鍵ペアを生成
cd /etc/wireguard
wg genkey | tee server_private.key | wg pubkey > server_public.key
chmod 600 server_private.key

# クライアントの鍵ペアを生成
wg genkey | tee client1_private.key | wg pubkey > client1_public.key

# WireGuard設定ファイル(サーバー)
cat > /etc/wireguard/wg0.conf << EOF
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = $(cat server_private.key)
# NAT設定(サーバーが複数クライアントのトラフィックをルーティング)
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

[Peer]
# クライアント1
PublicKey = $(cat client1_public.key)
AllowedIPs = 10.0.0.2/32
EOF

# IPフォワーディングを有効化
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

# WireGuardを起動・自動起動設定
systemctl enable --now wg-quick@wg0

# クライアント用設定ファイルを生成
cat > client1.conf << EOF
[Interface]
PrivateKey = $(cat client1_private.key)
Address = 10.0.0.2/24
DNS = 1.1.1.1

[Peer]
PublicKey = $(cat server_public.key)
Endpoint = your-server-ip:51820
AllowedIPs = 0.0.0.0/0  # 全トラフィックをVPN経由(フルトンネル)
# AllowedIPs = 10.0.0.0/24, 192.168.1.0/24  # スプリットトンネル(社内リソースのみ)
PersistentKeepalive = 25
EOF
# wgのピア管理をPythonスクリプトで自動化
import subprocess
import base64
import secrets

def generate_keypair() -> tuple:
    '''WireGuardキーペアを生成する'''
    private_key = subprocess.run(['wg', 'genkey'], capture_output=True, text=True).stdout.strip()
    public_key = subprocess.run(['wg', 'pubkey'], input=private_key, capture_output=True, text=True).stdout.strip()
    return private_key, public_key

def add_peer(interface: str, public_key: str, client_ip: str):
    '''VPNサーバーに新しいピアを追加する(ランタイム + 永続化)'''
    # ランタイムに追加
    subprocess.run(['wg', 'set', interface, 'peer', public_key,
                   'allowed-ips', f'{client_ip}/32'], check=True)
    # wg0.confに永続化
    with open(f'/etc/wireguard/{interface}.conf', 'a') as f:
        f.write(f'
[Peer]
PublicKey = {public_key}
AllowedIPs = {client_ip}/32
')
    print(f"Added peer {public_key[:16]}... with IP {client_ip}")

def remove_peer(interface: str, public_key: str):
    '''ピアを削除(退職者のアクセス取り消し)'''
    subprocess.run(['wg', 'set', interface, 'peer', public_key, 'remove'], check=True)
    print(f"Removed peer {public_key[:16]}...")

def list_peers(interface: str):
    '''現在接続中のピアとトラフィック統計を表示'''
    result = subprocess.run(['wg', 'show', interface], capture_output=True, text=True)
    print(result.stdout)

# 使用例: 新しいリモートワーカーにVPNアクセスを付与
private_key, public_key = generate_keypair()
add_peer('wg0', public_key, '10.0.0.10')

OpenVPN

2001年から開発されているSSL/TLS VPNの定番OSS です。GitHubスター10k+。Windows・Mac・Linux・iOS・Android・ルーター等のすべてのプラットフォームにクライアントが存在し、互換性が最高。NAT越えも得意。企業向けのOpenVPN Access Server(有料・2同時接続まで無料)もあり、WebUIでユーザー管理できます。

# OpenVPN Community EditionをUbuntuにセットアップ
apt-get install -y openvpn easy-rsa

# PKI(証明書管理)の初期化
make-cadir /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa gen-req server nopass
./easyrsa sign-req server server
./easyrsa gen-dh
openvpn --genkey secret /etc/openvpn/ta.key

# クライアント証明書を生成(ユーザーごとに実行)
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1

# /etc/openvpn/server.conf の例
cat > /etc/openvpn/server.conf << 'EOF'
port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/server.crt
key /etc/openvpn/easy-rsa/pki/private/server.key
dh /etc/openvpn/easy-rsa/pki/dh.pem
tls-auth /etc/openvpn/ta.key 0
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
keepalive 10 120
cipher AES-256-GCM
auth SHA256
user nobody
group nogroup
persist-key
persist-tun
verb 3
EOF

systemctl enable --now openvpn@server

Tailscale

WireGuardをベースにしたメッシュVPNです。コアOSS(tailscale/tailscale、BSD-3-Clause)で、コーディネーションサーバー(制御プレーン)は有料SaaSですがHeadscale(OSSの制御サーバー)でフルセルフホストも可能です。設定不要でNAT越えメッシュ接続ができ、デバイスをタグ管理できます。

# Tailscaleのインストール(クライアント)
curl -fsSL https://tailscale.com/install.sh | sh
tailscale up

# セルフホスト版(Headscale)をDockerで起動
docker run -d   --name headscale   --restart unless-stopped   -p 8080:8080   -p 9090:9090   -v headscale_data:/var/lib/headscale   -v ./config/config.yaml:/etc/headscale/config.yaml   headscale/headscale:latest   headscale serve

# Headscaleに接続(Tailscaleクライアントから)
tailscale up --login-server https://headscale.yourcompany.com

機能比較表

比較項目WireGuardOpenVPNTailscale(Headscale)
ライセンスGPLv2GPLv2BSD-3(コア)
速度最速(3〜4倍)中速中速(WireGuardベース)
設定難易度低(ゼロ設定)
NAT越え△(追加設定必要)✅(自動)
モバイル対応
メッシュトポロジー❌(スター型)
フルセルフホストHeadscaleで可能

VPNとゼロトラストアーキテクチャについてはSecurityカテゴリ/categories/securityを参照してください。VPNサーバーのインフラ構成はDevOpsカテゴリ/categories/devopsにまとめています。

FAQ

Q. WireGuardとOpenVPNのどちらが速いですか?本番ベンチマークは?

A. WireGuardが一般的に3〜4倍高速です。参考ベンチマーク(1Gbpsリンク・AES-256・同一ハードウェア): WireGuard: ダウンロード約900Mbps・CPU使用率約15%・レイテンシー1〜2ms追加。OpenVPN UDP: ダウンロード約220Mbps・CPU使用率約65%・レイテンシー5〜10ms追加。速度差の理由: WireGuardはカーネルモジュールとして実装(ユーザースペースとカーネルスペースの切り替えが最小)、ChaCha20暗号はAES-256より軽量な実装。実際に違いが出るケース: 大容量ファイルの転送・ビデオ会議・リモートデスクトップ。差が出にくいケース: Webブラウジング・メール・IM等の低帯域用途。

Q. 退職者のVPNアクセスを即座に取り消す仕組みはどう作りますか?

A. ツールごとに異なります。WireGuard: wg set wg0 peer <PUBLIC_KEY> removeで即座にアクセス切断。wg0.confからも削除してwg-quick save wg0で永続化。OpenVPN: PKI証明書の失効(CRL)を使います。easyrsa revoke client1 && easyrsa gen-crlでCRLを更新してOpenVPNに再読み込みさせます(プロセス不停止で適用可能)。Tailscale/Headscale: headscale nodes delete --identifier <NODE_ID>で即座に切断。自動化推奨: 人事システム(例: Workday・HRMos)のAPIからユーザー退職イベントをWebhookで受け取り、VPN管理スクリプトを自動実行するフローを構築します。

Q. 複数のサイト(東京・大阪・海外拠点)をWireGuardで接続するサイト間VPNの設定は?

A. ハブ&スポーク型(東京をハブとする)またはフルメッシュ型を選びます。

# 東京サーバー(ハブ)の設定
[Interface]
Address = 10.200.0.1/24
ListenPort = 51820
PrivateKey = <tokyo-private-key>
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

[Peer]
# 大阪サーバー
PublicKey = <osaka-public-key>
AllowedIPs = 10.200.0.2/32, 192.168.2.0/24  # 大阪の社内NW
Endpoint = osaka-server.yourcompany.com:51820

[Peer]
# シンガポールサーバー
PublicKey = <sg-public-key>
AllowedIPs = 10.200.0.3/32, 172.16.3.0/24  # SG社内NW
Endpoint = sg-server.yourcompany.com:51820

WireGuardはフルメッシュが苦手(ピアが増えると設定が複雑)なため、10拠点を超えるならTailscale(Headscale)のメッシュVPNの方が管理が楽です。

Q. TailscaleとHeadscaleでセルフホストする場合のデメリットは?

A. Headscaleのデメリット: ①Tailscale公式のいくつかの機能が未実装(Magic DNS・Subnet Routerは対応、ACL設定UIは未実装)②TailscaleアプリのアップデートでたまにHeadscaleとの非互換が発生するため、Tailscaleクライアントのバージョンを固定する必要がある③Tailscaleのカスタマーサポートが受けられない(コミュニティのみ)④MFAとSSOはTailscale SaaSに依存する部分があり、Headscaleでの対応は発展途上。向いているケース: クローズドな企業ネットワーク・PII管理が厳しくSaaSに接続情報を送れない環境・Tailscale有料プランのコスト(月$6/ユーザー)を削減したいケース。

まとめ

ユースケース推奨ツール
高速・シンプル・少人数WireGuard
互換性重視・レガシー対応OpenVPN
ゼロ設定・メッシュ・多デバイスTailscale(Headscale)
サイト間VPN(拠点間)WireGuard

関連外部リソース

他の記事も読む

Let's Build Together

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

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