※本記事にはアフィリエイト広告(PR)を含みます。
「WireGuard VPS 構築」「自分専用VPN 作り方」を調べている方の多くは、商用VPNではなく、自分で借りたVPSに検証・学習・自分の通信保護用のVPNサーバーを立てたいのだと思います。本記事では現役の社内SE・インフラエンジニアの視点で、UbuntuサーバーにWireGuardを構築する手順を、鍵生成からクライアント接続、トラブルシュートまで解説します。
内容は執筆時点(2026年7月)の情報に基づきます。カーネル対応状況やパッケージ名は環境・時期で変わるため、実施前に公式サイト(wireguard.com)とUbuntu公式ドキュメントで最新情報を確認してください。
市販VPNと自前VPN、どちらを選ぶか
商用VPNはアプリを入れるだけで手軽です。一方、自分でVPSにWireGuardを立てる「自前VPN」は次のような人向きです。
- 自分が管理するVPS・検証環境に安全にアクセスしたい人
- 公衆Wi-Fiなど信頼できない回線で自分の通信を暗号化したい人
- ネットワーク・Linuxサーバーの学習をしたい人
地域制限の回避や大規模な匿名化が目的なら商用VPNの方が向いています。自前VPNはサーバー1台分の帯域・信頼性しかなく、運用も自己責任です。
WireGuardの特徴
WireGuardはOpenVPNやIPsecに比べ実装がシンプルで、Linuxカーネルに組み込まれ軽量です。暗号方式はCurve25519やChaCha20-Poly1305などに固定されており、証明書局(PKI)なしでも公開鍵・秘密鍵のペアだけでピア(接続相手)を認証できます。ただし企業向けVPN基盤としての実績はOpenVPNやIPsecの方が長く、枯れています。
前提:VPSとポートの準備
本記事はグローバルIPを持つLinux VPS(例:198.51.100.10、ドキュメント用IP)、Ubuntu Server LTS、開放ポートはWireGuard用UDP(標準51820/udp)とSSHを前提とします。帯域幅やVPN用途の可否は契約プランで異なるため、事前に利用規約を確認してください。
サーバー側の構築
1. インストールと鍵生成
sudo apt update
sudo apt install wireguard
umask 077
wg genkey | tee server_private.key | wg pubkey > server_public.key
umask 077は生成ファイルを所有者以外読めなくする設定です。private.keyの中身は秘密鍵そのものなので、他人に見せたり貼り付けたりしないでください。クライアント側でも同じ手順で鍵ペアを作ります。
2. /etc/wireguard/wg0.confの作成
[Interface]
Address = 10.8.0.1/24
ListenPort = 51820
PrivateKey = (サーバーの秘密鍵)
PostUp = iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
# client1
PublicKey = (クライアント1の公開鍵)
AllowedIPs = 10.8.0.2/32
Addressはこのインターフェースに割り当てるVPN内IP、ListenPortは待受UDPポート、PostUp/PostDownはNAT設定の追加・削除です。AllowedIPsは、そのピアからの通信として受け入れる送信元範囲であり、同時にそのピア宛の経路として使う宛先範囲です。サーバー側では各クライアントの/32アドレスを指定します。eth0はVPSの外部インターフェース名に置き換えてください。近年のUbuntuはnftablesバックエンドのiptables互換コマンドで動作しますが、素のnftables構文にしたい場合は公式ドキュメントを参照して書き換えてください。
3. IP転送とNAT、ufw、systemd
echo 'net.ipv4.ip_forward = 1' | sudo tee /etc/sysctl.d/99-wireguard.conf
sudo sysctl -p /etc/sysctl.d/99-wireguard.conf
sudo ufw allow OpenSSH
sudo ufw allow 51820/udp
sudo ufw enable
sudo systemctl enable --now wg-quick@wg0
ip_forwardを1にしないと、クライアントの通信がVPS経由でインターネットへ出られません。ufwではSSHを先に許可してからWireGuard用UDPを開け、VPS事業者側にも別途ファイアウォールがあれば同様に開放します。wg-quick@wg0は/etc/wireguard/wg0.confを使ってインターフェースを自動起動するsystemdユニットで、設定変更後はsudo systemctl restart wg-quick@wg0で反映します。
クライアント側の設定
クライアントもWireGuardをインストールし、同様に鍵ペアを作成します。PCは公式クライアントアプリ、スマホはApp Store/Google Playの公式アプリを使います。
[Interface]
Address = 10.8.0.2/24
PrivateKey = (クライアントの秘密鍵)
DNS = 1.1.1.1
[Peer]
PublicKey = (サーバーの公開鍵)
Endpoint = 198.51.100.10:51820
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25
Endpointは接続先VPSのグローバルIP(例のexample.comのようなドメインでも可)とポートです。AllowedIPs = 0.0.0.0/0はすべての通信をVPN経由にするフルトンネル設定で、検証用途だけなら10.8.0.0/24のようなスプリットトンネルにもできます。PersistentKeepaliveは一定間隔(ここでは25秒)でキープアライブを送り、クライアントがNAT配下にいてもサーバーからの着信経路を保つ設定で、不要なら既定値の0のままで構いません。
スマホアプリはQRコード読込に対応していますが、QRコードには秘密鍵がそのまま含まれます。画面共有や画像投稿で漏えいしないよう、表示は自分の端末だけで完結させてください。
動作確認とトラブルシュート
sudo wg show
接続済みならpeerの行にlatest handshakeが表示されます。表示されない・更新されない場合は次を順に確認します。
- ポート到達性:ufwとVPS事業者側のファイアウォールでUDPポートが開いているか
- 鍵の組み合わせ:サーバーとクライアントのPublicKey/PrivateKeyを取り違えていないか
- AllowedIPs:範囲の不一致があるとRequired key not availableのようなエラーで拒否される
- MTU:wg-quickは自動で1420前後を設定するが、環境によっては通信が不安定になるため[Interface]にMTU = 1380のように明示してみる
- DNS漏えい:クライアントのDNS設定がVPN外を向いたままだとアクセス先ドメインが漏れる。dnsleaktest.comなどで確認する
ハンドシェイクは成立するのに特定宛先だけ届かない場合は、ip_forwardの有効化とiptablesのMASQUERADEルール(sudo iptables -t nat -L POSTROUTING)を再確認してください。
運用上の注意
秘密鍵は設定ファイルに平文で残るため/etc/wireguard/の権限を絞ります。クライアント追加時は新しい鍵ペアを作り、不要になった[Peer]は削除してください。WireGuard自体は通信内容のログをほとんど残しませんが、VPSのOSログは別途残ります。常時稼働で帯域を使うため、帯域上限とVPN用途の利用規約も確認しましょう。
用途面の注意も重要です。本記事の自前VPNは、自分の通信保護や検証・学習が目的であり、地域制限の回避や各種サービスの規約に反する目的での利用を勧めるものではありません。接続先サービスの規約違反や法令違反になり得る使い方は避けてください。また、会社の業務用PCやアカウントの通信を、会社が把握していない個人VPN(自前VPSを含む)経由にすることは、勤務先の情報セキュリティポリシー違反になり得ます。検証目的であっても、業務端末で使う前には勤務先の情報システム部門やセキュリティ規程を確認してください。
よくある質問
WireGuardとOpenVPN、どちらを選べばいいですか
設定のシンプルさや軽さを重視するならWireGuard、TCP443番での偽装や長年の導入実績を重視するならOpenVPNが選ばれる傾向にあります。まずWireGuardで試し、必要に応じて比較するとよいでしょう。
ポート番号は51820以外でも大丈夫ですか
問題ありません。ListenPortとファイアウォールの開放ポート、クライアントのEndpointのポート番号を揃えれば任意のUDPポートに変更できます。既定値は広く知られているため、変更するとスキャン対策になります。
スマホからも同じ設定で使えますか
はい。公式アプリに[Interface]と[Peer]を持つ設定を読み込ませれば利用できます。クライアントごとに鍵ペアとVPN内IPは分けてください。
会社のPCで使ってもいいですか
推奨しません。会社が管理していない個人VPN経由に業務端末の通信を切り替えることは、情報セキュリティポリシー上、無許可の外部トンネルとみなされる可能性があります。使う前に勤務先の情報システム部門に確認してください。
接続できてもインターネットに出られません。何が原因ですか
多くはサーバー側のnet.ipv4.ip_forwardが無効、またはiptables(もしくはnftables)のMASQUERADE設定が反映されていないことが原因です。対象インターフェース名がVPSの実際の外部インターフェースと一致しているかも見直してください。
まとめ
WireGuardは設定項目が少なく、VPS1台とUbuntuがあれば自分専用の検証用VPNを短時間で構築できます。鍵生成、wg0.confの作成、IP転送とNAT、ufwでのポート開放、systemdでの自動起動という流れを押さえれば、あとはクライアントごとに鍵とピア設定を追加するだけです。つながらないときはポート・鍵・AllowedIPs・MTU・DNSの順で切り分けてください。自前VPNは自分の通信保護や検証目的で使い、規約違反目的の利用は避けること、会社の業務端末で使う場合は勤務先の情報セキュリティポリシーを事前に確認することも忘れないようにしましょう。
最終更新:2026年7月

