設定

VPN入門|安全なリモート接続の仕組みと設定方法

ネットワーク VPN セキュリティ

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プロトコル一覧

プロトコル暗号化速度特徴
WireGuardChaCha20, Curve25519非常に高速軽量・モダン、コード量が少なく監査しやすい
OpenVPNAES-256-GCM等高速実績豊富、高い互換性、柔軟な設定
IPsec/IKEv2AES, 3DES高速OS標準サポート、モバイル向き
L2TP/IPsecAES(IPsec併用)中程度広い互換性、やや古い
PPTPMPPE(脆弱)高速非推奨、深刻な脆弱性あり
PPTPは使用しないこと
PPTPは暗号化が脆弱であり、既に解読手法が公開されています。新規導入では絶対に使用しないでください。既存環境でPPTPを使っている場合は、WireGuardまたはOpenVPNへの移行を推奨します。

WireGuard vs OpenVPN

比較項目WireGuardOpenVPN
コード行数約4,000行約100,000行
暗号スイート固定(ChaCha20等)選択可能(AES等)
プロトコルUDPUDP / 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.conf
sudo 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/udp
IP転送も忘れずに有効化してください: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/0PostUp/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、ログ監視などのセキュリティ対策を忘れずに