SSD Nodes Learn メモリ 8GB — 年額 $66
ガイド Matt Connor著者 Matt Connor ・更新日 2026-08-01

WireGuardとOpenVPNの比較、自宅サーバーならどちら?

自分の VPS で VPN を運用するなら WireGuard が有力です。0.1秒未満の接続、約10行の設定、約4,000行の実装を根拠に、OpenVPN を選ぶ4つの例外も解説します。

短い答え

自分の VPS で VPN サーバーを運用する1人のユーザーにとって、WireGuard と OpenVPN の比較は接戦ではありません。WireGuard を選んでください。構成が小さく、Linux カーネル内で動作し、0.1秒未満で接続でき、動作するクライアント設定は約10行です。OpenVPN には今でも4つの実用的な役割がありますが、それらのどれも必要でなければ、OpenVPN は必要ありません。

その4つの役割は、TCP ポート 443 だけを許可するネットワークから外部へ接続すること、既存の認証局に接続すること、パスワードまたは2要素認証でユーザー名を指定して認証すること、そして Layer 2 でブリッジすることです。以下では、この推奨の根拠と、それぞれの例外が適用される具体的な条件を説明します。

セルフホスト環境で WireGuard が選ばれた理由

コードベースが十分に小さく、読み通せます。 WireGuard プロジェクトのプロトコル実装は、およそ 4,000 行です。OpenVPN は、すべての暗号処理で依存する OpenSSL ライブラリまで含めると、6 桁の行数になります。すべての行が攻撃対象領域になるため、サイズは重要です。あなたもレビュー担当者も 100,000 行を読むことはありません。4,000 行なら読めます。

カーネル内で動作します。 WireGuard は Linux 5.6 以降の mainline に含まれているため、Ubuntu 24.04 と Debian 13 にはコンパイルなしで組み込まれています。パケットは、すでに存在するカーネル空間で暗号化されます。userspace のプロセスへコピーして戻す処理もありません。まず次を確認します。

sudo modprobe wireguard && echo ok

KVM VPS では ok と表示されます。OpenVZ や LXC など、ホストのカーネルを共有するコンテナ仮想化では Operation not supported で失敗します。自分のものではないカーネルにモジュールをロードできないためです。

ネゴシエーションが不要です。 WireGuard には固定された暗号スイートが 1 つだけあります。データには ChaCha20-Poly1305、鍵には Curve25519 を使用します。ダウングレードするバージョンも、誤って選択するオプションもありません。OpenVPN は各クライアントと暗号方式および TLS(transport layer security)バージョンをネゴシエートします。これは柔軟性をもたらしますが、設定ミスの原因にもなります。サーバーが data-ciphers AES-256-GCM:AES-128-CBC のままだと、より適切な方式を提示しないクライアントに対して CBC 暗号へ問題なくフォールバックします。ログにもそれを問題として記録するものはありません。

ポートは応答しません。 メッセージ認証の検証に失敗した WireGuard パケットは、返信なしで破棄されます。そのため、何かが listening しているかどうかに関係なく、nmap -sU -p 51820open|filtered を返します。TCP モードの OpenVPN サーバーは、接続を受け入れないと判断する前に TCP ハンドシェイクを完了します。これだけで、スキャナーは何かが存在すると確認できます。tls-crypt を使用した UDP 上の OpenVPN はほぼ同じように静かです。したがって、これは OpenVPN 自体ではなく、OpenVPN を TCP で実行することに対する論拠です。

ローミングに追加コストがありません。 WireGuard の peer はアドレスではなく公開鍵で識別されます。ノート PC が自宅からモバイルホットスポットへ移動し、新しいアドレスからハンドシェイクを 1 回送信すると、サーバーは応答先の endpoint を更新します。再接続は発生しません。接続状態が存在していなかったためです。OpenVPN でも float により同様の動作が可能ですが、通常、クライアントは完全な TLS セッションを終了して再構築します。そのため、OpenVPN では lid-open 時の一時停止が目立ちますが、WireGuard では発生しません。

2026年の速度:差は縮小しています

長年、速度に関するOpenVPNの正当な弱点は、すべてのパケットをuserspaceにコピーしてそこで暗号化し、再びコピーして戻していたことでした。一方、WireGuardは常にkernel内で処理していました。しかし、現在ではこれだけが全体像ではありません。この点を無視した比較は古くなっています。

OpenVPN 2.7は2026年2月に、Linux 6.16へ統合された上流のovpn kernel moduleをサポートしてリリースされました。これはDCO(data channel offload)です。control channelはuserspaceに残し、大量のデータ処理をkernelへ移します。これは、WireGuardが従来から行ってきた処理とほぼ同じです。対応するkernelと、DCOを使用できる十分に新しいOpenVPNでは、throughputは別格ではなく同程度になります。実際の環境を確認してください。

uname -r
openvpn --version | head -n 1
modinfo ovpn 2>/dev/null | head -n 3

2026年7月時点で、標準のUbuntu 24.04 LTSに含まれるOpenVPNは2.6であり、2.7ではありません。また、ovpn moduleには2.7が必要です。このreleaseでは、古いopenvpn-dco-dkms packageを使用した場合にだけoffloadを利用できます。このpackageは実行中のkernelに対してout-of-tree moduleを構築するため、kernelをupgradeするたびに再構築されます。これはWireGuardにはない可動部分です。

DCOを使用し続ける理由にする前に、制限事項を確認してください。DCOがサポートするのはLayer 3 tunnelだけです。使用できるのはAEAD cipher(associated data付き認証暗号化:AES-GCMまたはChaCha20-Poly1305)だけです。compressionはサポートしません。また、serverではtopology subnetとの組み合わせでだけ動作します。これらの制限はいずれも、そもそもOpenVPNの利点だった柔軟性の一部を失わせます。高速なOpenVPNとは、WireGuardのように見えるよう設定したOpenVPNです。

このページを含め、公開されているthroughputの数値をそのまま信頼しないでください。VPSの上限は通常、protocolではなくCPU allowanceまたはnetwork allowanceによって決まります。iperf3をtunnel経由で実行して自分の環境を測定し、その後tunnelの外でもう一度実行して、2つの結果を比較してください。

OpenVPNが今も有効な場面

TCP port 443で外部ネットワークへ接続する必要がある場合です。 WireGuardは意図的にUDP専用として設計されており、TCP modeが追加される予定はありません。TCP 443のみを許可するホテルのネットワークや企業プロキシでも、proto tcp-serverport 443を設定したOpenVPNの通信は、通常のTLSセッションに見えるため通過します。同じネットワークを通過させるには、WireGuardではwstunneludp2rawなどのwrapperが必要です。実行してパッチを適用し続けるprocessが1つ増えます。なお、同じIP addressでweb serverがすでにTCP 443を使用している場合は、どちらかを別のportへ移す必要があります。

すでにcertificate authorityを運用している場合です。 OpenVPNはX.509 certificateで認証するため、既存のPKI(public key infrastructure)に組み込めます。Certificateには有効期限があり、certificate revocation listに追加して失効させます。serverはcrl-verifyを通じてこのlistを読み取ります。WireGuardにはcertificate、有効期限、revocation listがありません。peerを削除するには、server configを編集してreloadします。peerが10個なら問題ありません。監査要件がある環境で400個になると、certificate modelが実際に役立ちます。

keyだけでなく、名前付きuserが必要な場合です。 OpenVPNはauth-user-pass-verifyopenvpn-plugin-auth-pam.soなどのpluginを使用して、認証を外部systemに委譲できます。これによりLDAPやone-time-passwordによる2要素目の認証を追加できます。WireGuardにはuserという概念自体がありません。keyがconfigにあるか、ないかのどちらかです。「Saraがphoneに届くcodeを入力する必要がある」という要件を、WireGuard単体で実現することはできません。

Layer 2、または古いclientが必要な場合です。 dev tapを使用するOpenVPNはEthernet frameをbridgeします。これはbroadcast protocolや古いLAN gameで重要です。WireGuardはLayer 3専用であり、今後も変わりません。OpenVPNには、WireGuard appを利用できないhardwareやoperating system向けのclientもあります。これらの理由が該当する場面は減っています。また、dev tapはDCOと互換性がないため、bridgeを使用すると処理速度の遅い経路になります。

2つの構成で実際に発生するコスト

WireGuard のアイデンティティは1つのコマンドで作成できます。括弧が重要なのは、鍵が存在する前にファイルモードを設定するためです。

(umask 077; wg genkey > private.key)
wg pubkey < private.key > public.key

OpenVPN では、VPNを使用する限り自分で管理する認証局が必要です。

sudo apt install -y easy-rsa
make-cadir ~/openvpn-ca
cd ~/openvpn-ca
./easyrsa init-pki
./easyrsa build-ca
./easyrsa gen-req server nopass
./easyrsa sign-req server server

どちらの一覧も不公平ではありません。CAによって有効期限と失効が可能になります。その代わり、何年も保護しなければならない秘密鍵、忘れずに実施する必要がある更新、秘密鍵を失った場合の再構築が必要です。CAの機能を使わないのであれば、そのコストは無駄です。転送、NAT(ネットワークアドレス変換)、および午後を無駄にするハンドシェイクの失敗を含む、WireGuardをVPSでセルフホストする完全な手順は、VPSでWireGuard VPNをセルフホストするガイドにあります。

各VPNがファイアウォールに要求する設定

WireGuardには、ListenPortのポートでUDPを許可する受信ルールが1つだけ必要です。

sudo ufw allow 51820/udp
sudo ufw status verbose

OpenVPNでは、デフォルトでUDP 1194が必要です。TCP 443を選択した場合は、TCP 443を使用します。どちらの場合も、IP転送を有効にし、送信元NATルールを設定する必要があります。Linuxは、自分宛てではないパケットを破棄するためです。この部分は2つのプロトコルで同じです。「トンネルは接続するがインターネットに接続できない」という問題の多くは、ここが原因です。ufwを初めて使う場合は、VPSでのufwファイアウォールの基本から始めてください。また、多くのプロバイダーはコントロールパネルで別のネットワークファイアウォールも提供しています。パケットがサーバーに到達しなければ、サーバー上で追加したルールは機能しません。ポートとは何か、Linuxがポートで待ち受ける仕組みを理解すると、これらの確認をより迅速に行えます。

1つの段落で選ぶ方法

WireGuardで実行してください。WireGuardで実現できない具体的な要件がある場合に限り、別の選択肢を検討します。制限されたネットワークから接続するために TCP 443 が必要な場合は、そこで OpenVPN を実行してください。両方を実行することも検討できます。異なるポートを使用するため、1台のサーバー上で競合なく共存できます。ユーザーごとのアカウントまたは2要素認証が必要な場合は、WireGuardだけで対応しようとしないでください。その上位にID管理レイヤーを配置します。自分でホストする Headscale コントロールサーバーは内部で WireGuard を使用し、通常の WireGuard では利用者が管理する必要があるアカウントモデル、鍵の配布、デバイスの承認を追加します。

OpenVPNから停止時間なしで移行する

変換はありません。OpenVPNのPKIをWireGuardの鍵に変換することはできません。WireGuardには変換対象となる証明書がないためです。各クライアントには、サーバーと同じ方法で生成した新しい鍵ペアを割り当てます。

切り替えるのではなく、並行して移行します。同じホスト上で、UDP 51820のWireGuardと1194のOpenVPNを同時に実行できます。そのため、まずwg0を起動し、sudo wg showで最新のlatest handshakeが一覧に表示されることを確認してから、クライアントを1台ずつ移行します。OpenVPNのピア一覧に変化がなくなったら、sudo systemctl disable --now openvpn-server@serverでサービスを停止します。確信が持てるまでCAファイルを保持してください。削除したCAで失効済みクライアントを再構築することはできません。

引き継がれないものが1つあります。それは、ユーザー名とパスワードによるアカウント、およびそれらに関連する失効履歴です。旧サーバーを停止する前に、それらの保存先を決めてください。停止した後では対応できません。

FAQ

WireGuardはOpenVPNより高速ですか?

標準構成のUbuntu 24.04サーバーでは、高速です。差も大きくなります。WireGuardはカーネル内で暗号化する一方、OpenVPN 2.6はすべてのパケットをユーザー空間のプロセスで処理するためです。OpenVPN 2.7とLinux 6.16のovpnカーネルモジュールを使用すると、データパスもカーネル内に入り、両者は同程度になります。ブログの数値を信用せず、トンネル経由でiperf3を使って自分の環境を測定してください。VPSでは通常、制限要因はCPUまたは帯域幅の上限だからです。

WireGuardはTCPポート443で実行できますか?

単独ではできません。WireGuardは設計上UDP専用で、TCPモードの予定もありません。TCP 443しか許可しないネットワークを通過するには、wstunneludp2rawなどのトンネルでWireGuardを包む必要があります。この方法では、両端で実行とパッチ適用が必要なプロセスが追加されます。その制限が通常の作業環境にある場合は、proto tcp-serverport 443を使用するOpenVPNのほうが簡単です。

OpenVPNは現在、安全ではありませんか?

いいえ。AES-256-GCMなどのAEAD暗号とtls-cryptを有効にした最新のOpenVPNは、安全なVPNです。WireGuardを選ぶ理由は別にあります。OpenVPNはコード量も設定項目もはるかに多いため、管理者が誤った設定をする可能性も増えます。選択肢が少なければ、誤りも少なくなります。

VPSで個人用VPNを構築する場合、どちらを選ぶべきですか?

WireGuardです。デバイスごとに1つの鍵ペア、約10行の設定ファイル、開放するUDPポートは1つだけで、ハンドシェイクも開始に気付く前に完了します。UDPをブロックするネットワークから定期的に接続する場合、または既存の認証局やユーザーディレクトリに合わせる必要がある場合に限り、OpenVPNを選んでください。