VPN入門|安全なリモート接続の仕組みと設定方法
VPNの仕組み、プロトコルの種類、WireGuardとOpenVPNの設定方法まで、安全なリモート接続の基礎を解説します。
こんな人向けの記事です
- VPNの仕組みを理解したい
- WireGuardやOpenVPNを設定したい
- リモート環境でのセキュリティを強化したい
Step 1VPNとは(仮想プライベートネットワーク)
VPN(Virtual Private Network)は、インターネットなどの公衆ネットワーク上に、暗号化された仮想的な専用回線(トンネル)を構築する技術です。
VPNを使うことで、離れた拠点間やリモートワーカーが、あたかも同じLAN内にいるかのように安全に通信できます。
VPNの基本的な仕組み
VPNは主に以下の3つの技術で安全性を実現しています。1. トンネリング:通信データを別のプロトコルでカプセル化して転送
2. 暗号化:データを暗号化して第三者に読み取られないようにする
3. 認証:接続先が正当な相手であることを確認する
VPNなしとVPNありの比較
VPNなし(通常の通信)
[クライアント] ---平文データ--- [インターネット] ---平文データ--- [サーバー]
↑ 盗聴・改ざんのリスク
VPNあり(暗号化トンネル)
[クライアント] ===暗号化トンネル=== [VPNサーバー] --- [社内LAN/サーバー]
↑ 第三者は内容を読めない
VPNの主なユースケース
| ユースケース | 説明 |
|---|---|
| リモートワーク | 自宅から会社の社内ネットワークに安全にアクセス |
| 拠点間接続 | 本社と支社のネットワークを暗号化して接続 |
| 公衆Wi-Fiの保護 | カフェや空港のWi-Fiで通信を暗号化 |
| サーバー管理 | クラウドサーバーへの安全なリモートアクセス |
Step 2VPNの種類
VPNは利用形態によって大きく2つに分類されます。
リモートアクセスVPN
リモートアクセスVPNは、個々のクライアント(PC・スマートフォン)からVPNサーバーに接続する形態です。リモートワークで最もよく使われます。
リモートアクセスVPNの構成
┌──────────────┐
[自宅PC] ========== │ VPNサーバー │ ─── [社内ファイルサーバー]
│ │ ─── [社内Webシステム]
[外出先スマホ] ===== │ (ゲートウェイ) │ ─── [社内DB]
└──────────────┘
===== : VPNトンネル(暗号化)
スプリットトンネリング
VPN接続時に、社内向けの通信のみVPNトンネルを通し、インターネット向けの通信は直接接続する設定です。帯域を節約できますが、セキュリティポリシーに応じて無効にすべき場合もあります。
サイト間VPN(Site-to-Site VPN)
サイト間VPNは、拠点のルーター同士を接続して、拠点間のネットワーク全体を暗号化接続する形態です。
サイト間VPNの構成
本社 (192.168.1.0/24) 支社 (192.168.2.0/24)
┌──────────────────┐ ┌──────────────────┐
│ [PC] [サーバー] │ │ [PC] [プリンター] │
│ │ │ │ │ │
│ [VPNルーター] ──╋════════════╋── [VPNルーター] │
└──────────────────┘ 暗号化 └──────────────────┘
トンネル
2つのVPN方式の比較
| 項目 | リモートアクセスVPN | サイト間VPN |
|---|---|---|
| 接続単位 | 個々のデバイス | ネットワーク全体 |
| クライアントソフト | 必要 | 不要(ルーターが処理) |
| 主な用途 | リモートワーク、外出先 | 拠点間接続 |
| 設定の複雑さ | 中程度 | 高い |
| 常時接続 | 必要時のみ | 常時 |
Step 3VPNプロトコルの比較
VPNで使用されるプロトコルにはいくつかの種類があり、それぞれ特徴が異なります。
主要VPNプロトコル一覧
| プロトコル | 暗号化 | 速度 | 特徴 |
|---|---|---|---|
| WireGuard | ChaCha20, Curve25519 | 非常に高速 | 軽量・モダン、コード量が少なく監査しやすい |
| OpenVPN | AES-256-GCM等 | 高速 | 実績豊富、高い互換性、柔軟な設定 |
| IPsec/IKEv2 | AES, 3DES | 高速 | OS標準サポート、モバイル向き |
| L2TP/IPsec | AES(IPsec併用) | 中程度 | 広い互換性、やや古い |
| PPTP | MPPE(脆弱) | 高速 | 非推奨、深刻な脆弱性あり |
PPTPは使用しないこと
PPTPは暗号化が脆弱であり、既に解読手法が公開されています。新規導入では絶対に使用しないでください。既存環境でPPTPを使っている場合は、WireGuardまたはOpenVPNへの移行を推奨します。
WireGuard vs OpenVPN
| 比較項目 | WireGuard | OpenVPN |
|---|---|---|
| コード行数 | 約4,000行 | 約100,000行 |
| 暗号スイート | 固定(ChaCha20等) | 選択可能(AES等) |
| プロトコル | UDP | UDP / TCP |
| 接続速度 | 非常に高速 | 高速 |
| カーネル統合 | Linux カーネルモジュール | ユーザースペース |
| 設定の簡便さ | シンプル | やや複雑 |
| 企業での実績 | 増加中 | 非常に豊富 |
| ファイアウォール通過 | UDP のみ | TCP 443番で通過しやすい |
どちらを選ぶべきか
WireGuard:新規構築、パフォーマンス重視、シンプルな構成の場合に最適OpenVPN:企業環境、TCP通信が必要、細かい設定が必要な場合に最適
Step 4WireGuardの設定方法
WireGuardはシンプルかつ高速な次世代VPNプロトコルです。Linuxカーネルに統合されており、設定も非常に簡潔です。
インストール
Ubuntu / Debian
# WireGuardのインストール
sudo apt update
sudo apt install wireguard
# カーネルモジュールの確認
sudo modprobe wireguard
lsmod | grep wireguard
CentOS / RHEL
# EPELリポジトリの追加
sudo yum install epel-release
sudo yum install wireguard-tools
鍵ペアの生成
サーバー・クライアント両方で実施
# 秘密鍵を生成
wg genkey | tee privatekey | wg pubkey > publickey
# 鍵の確認
cat privatekey
# oK0jS2m8T3x...(秘密鍵 - 絶対に外部に漏らさない)
cat publickey
# aB3cD4eF5g6...(公開鍵 - 相手に渡す)
# 事前共有鍵(オプション、追加のセキュリティ層)
wg genpsk > presharedkey
秘密鍵の取り扱い
秘密鍵ファイルのパーミッションは必ず600に設定してください。秘密鍵が漏洩するとVPN通信の安全性が完全に失われます。
パーミッションの設定
chmod 600 privatekey
chmod 600 /etc/wireguard/wg0.conf
サーバー側の設定
/etc/wireguard/wg0.conf(サーバー)
[Interface]
# サーバーの秘密鍵
PrivateKey = <サーバーの秘密鍵>
# VPNトンネルのIPアドレス
Address = 10.0.0.1/24
# リッスンポート
ListenPort = 51820
# IP転送を有効にするPost-Upスクリプト
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 = <クライアントの公開鍵>
# クライアントに割り当てるIP
AllowedIPs = 10.0.0.2/32
クライアント側の設定
/etc/wireguard/wg0.conf(クライアント)
[Interface]
# クライアントの秘密鍵
PrivateKey = <クライアントの秘密鍵>
# VPNトンネルのIPアドレス
Address = 10.0.0.2/24
# DNSサーバー
DNS = 1.1.1.1, 8.8.8.8
[Peer]
# サーバーの公開鍵
PublicKey = <サーバーの公開鍵>
# サーバーのエンドポイント
Endpoint = vpn.example.com:51820
# トンネルに流すトラフィック(全トラフィック)
AllowedIPs = 0.0.0.0/0
# 接続維持のためのキープアライブ
PersistentKeepalive = 25
WireGuardの起動と管理
WireGuardの操作コマンド
# VPNインターフェースの起動
sudo wg-quick up wg0
# VPNインターフェースの停止
sudo wg-quick down wg0
# 自動起動の設定
sudo systemctl enable wg-quick@wg0
# 接続状態の確認
sudo wg show
# 出力例:
# interface: wg0
# public key: aB3cD4eF5g6...
# private key: (hidden)
# listening port: 51820
#
# peer: xY7zW8vU9t0...
# endpoint: 203.0.113.10:51820
# allowed ips: 10.0.0.2/32
# latest handshake: 32 seconds ago
# transfer: 1.24 MiB received, 3.45 MiB sent
IP転送の有効化
VPNサーバーがクライアントのトラフィックを転送するには、IP転送を有効にする必要があります。echo "net.ipv4.ip_forward = 1" | sudo tee -a /etc/sysctl.confsudo sysctl -p
Step 5OpenVPNの設定方法
OpenVPNは最も実績のあるオープンソースVPNソリューションです。柔軟な設定が可能で、企業環境での導入実績が豊富です。
インストール
Ubuntu / Debian
# OpenVPNとEasyRSA(証明書管理ツール)のインストール
sudo apt update
sudo apt install openvpn easy-rsa
PKI(公開鍵基盤)の構築
EasyRSAによる証明書の作成
# EasyRSAディレクトリの準備
make-cadir ~/openvpn-ca
cd ~/openvpn-ca
# PKIの初期化
./easyrsa init-pki
# CA(認証局)の作成
./easyrsa build-ca nopass
# → ca.crt が生成される
# サーバー証明書と鍵の作成
./easyrsa build-server-full server nopass
# → server.crt, server.key が生成される
# クライアント証明書と鍵の作成
./easyrsa build-client-full client1 nopass
# → client1.crt, client1.key が生成される
# DH(Diffie-Hellman)パラメータの生成
./easyrsa gen-dh
# → dh.pem が生成される(数分かかる)
# TLS認証鍵の生成
openvpn --genkey secret ta.key
サーバー設定ファイル
/etc/openvpn/server.conf
# ポートとプロトコル
port 1194
proto udp
dev tun
# 証明書と鍵のパス
ca /etc/openvpn/ca.crt
cert /etc/openvpn/server.crt
key /etc/openvpn/server.key
dh /etc/openvpn/dh.pem
tls-auth /etc/openvpn/ta.key 0
# VPNネットワーク設定
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 8.8.8.8"
# 暗号化設定
cipher AES-256-GCM
auth SHA256
# セキュリティ
user nobody
group nogroup
persist-key
persist-tun
# ログ
status /var/log/openvpn-status.log
log-append /var/log/openvpn.log
verb 3
クライアント設定ファイル
client1.ovpn
client
dev tun
proto udp
remote vpn.example.com 1194
resolv-retry infinite
nobind
persist-key
persist-tun
# 証明書(インライン形式)
<ca>
-----BEGIN CERTIFICATE-----
(CA証明書の内容)
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
(クライアント証明書の内容)
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
(クライアント秘密鍵の内容)
-----END PRIVATE KEY-----
</key>
<tls-auth>
-----BEGIN OpenVPN Static key V1-----
(TLS認証鍵の内容)
-----END OpenVPN Static key V1-----
</tls-auth>
key-direction 1
cipher AES-256-GCM
auth SHA256
verb 3
OpenVPNの起動と管理
OpenVPNの操作コマンド
# サーバーの起動
sudo systemctl start openvpn@server
# 自動起動の設定
sudo systemctl enable openvpn@server
# 状態の確認
sudo systemctl status openvpn@server
# 接続中のクライアント確認
cat /var/log/openvpn-status.log
ファイアウォールの設定
OpenVPNのデフォルトポート(UDP 1194)を開放する必要があります。sudo ufw allow 1194/udpIP転送も忘れずに有効化してください:
sudo sysctl -w net.ipv4.ip_forward=1
Step 6VPN利用時のセキュリティ考慮事項
VPNは強力なセキュリティツールですが、正しく運用しないと効果が半減します。以下のポイントを必ず確認してください。
認証の強化
| 対策 | 説明 | 優先度 |
|---|---|---|
| 多要素認証(MFA) | パスワード+OTP等の組み合わせ | 高 |
| 証明書認証 | PKIベースのクライアント証明書 | 高 |
| 鍵の定期更新 | 秘密鍵・証明書の有効期限管理 | 中 |
| 失効リスト(CRL) | 退職者等の証明書を即座に無効化 | 高 |
ネットワーク設定のセキュリティ
ファイアウォール設定例(VPNサーバー)
# WireGuard用:VPNポートのみ許可
sudo ufw allow 51820/udp
sudo ufw allow from 10.0.0.0/24 # VPNクライアントからのアクセス
# OpenVPN用
sudo ufw allow 1194/udp
sudo ufw allow from 10.8.0.0/24
# 不要なポートは閉じる
sudo ufw default deny incoming
sudo ufw enable
# VPNインターフェース以外からの管理アクセスを拒否
sudo iptables -A INPUT -i eth0 -p tcp --dport 22 -j DROP
sudo iptables -A INPUT -i wg0 -p tcp --dport 22 -j ACCEPT
DNS漏洩の防止
VPN接続中でもDNSクエリがVPNトンネルの外を通ると、通信先が漏洩します。
DNS漏洩のテスト
# VPN接続中のDNSサーバーを確認
resolvectl status
# DNS漏洩テスト
# VPNトンネル経由でDNSが解決されていることを確認
nslookup example.com
# Server: 10.0.0.1 ← VPN内のDNSならOK
# Server: 192.168.1.1 ← ローカルDNSなら漏洩している
Kill Switchの設定
VPN接続が切断された際に、暗号化されていない通信が漏洩しないよう、Kill Switch(VPN切断時にすべての通信をブロック)を設定することを強く推奨します。WireGuardの場合、AllowedIPs = 0.0.0.0/0とPostUp/PostDownのiptablesルールで実現できます。
ログと監視
VPNログの監視設定
# WireGuard:接続状態のモニタリング
watch -n 5 sudo wg show
# OpenVPN:ログのリアルタイム監視
tail -f /var/log/openvpn.log
# 不審な接続の検知(失敗した接続を抽出)
grep "AUTH_FAILED" /var/log/openvpn.log
grep "TLS Error" /var/log/openvpn.log
運用上のベストプラクティス
定期メンテナンス項目
月次:接続ログの確認、不要なアカウントの棚卸し四半期:VPNソフトウェアのアップデート、セキュリティパッチ適用
年次:証明書の更新、暗号化設定の見直し、セキュリティ監査
まとめ
- VPNはトンネリング・暗号化・認証で安全な通信を実現する
- リモートアクセスVPNとサイト間VPNの2種類がある
- 新規構築にはWireGuard、企業環境にはOpenVPNが適している
- WireGuardは鍵ペア生成と簡潔な設定ファイルで構築できる
- OpenVPNはPKI(証明書基盤)の構築が必要だが柔軟性が高い
- DNS漏洩防止、Kill Switch、ログ監視などのセキュリティ対策を忘れずに