Open2
Open VPN

OpenVPNとは
OpenVPNは、「インターネット上に安全な専用トンネルを作る技術」です。
身近な例で説明
普通のインターネット通信:
あなたの家 ━━━ インターネット(誰でも見れる公道) ━━━ 会社
VPN通信:
あなたの家 ━━━ 暗号化トンネル(専用の地下通路) ━━━ 会社
外から見ると「何をやっているかわからない」状態になります。
VPNの主な用途
1. リモートアクセス
自宅 → VPN → 社内ネットワーク
在宅勤務で社内システムにアクセス
2. 拠点間接続
東京オフィス ← VPN → 大阪オフィス
離れた場所にある拠点を安全に接続
3. プライバシー保護
あなた → VPN → インターネット
ISPや盗聴者から通信内容を隠す
OpenVPNの仕組み
基本的な構成
サーバー側(VPNサーバー):
- OpenVPNサーバープロセス
- 証明書と秘密鍵
- 設定ファイル
クライアント側(VPNクライアント):
- OpenVPNクライアントソフト
- クライアント証明書
- 設定ファイル
暗号化の流れ
- 証明書で相互認証
- 共通鍵を生成
- 全ての通信を暗号化
OpenVPNの特徴
- オープンソース:無料で使える
- SSL/TLS暗号化:非常に強固なセキュリティ
- 柔軟な設定:様々な用途に対応
- クロスプラットフォーム:Windows、Mac、Linux、スマホで使用可能
OpenVPNの動作モード
OpenVPNには2つの主要な動作モードがあります:
1. サーバー・クライアントモード
用途:リモートアクセス
複数のクライアント → OpenVPNサーバー → 内部ネットワーク
例:
- 在宅勤務で会社ネットワークにアクセス
- 外出先から自宅のNASにアクセス
2. サイト間接続モード
用途:拠点間接続
本社ネットワーク ←→ OpenVPN ←→ 支社ネットワーク
例:
- 本社と支社のネットワークを統合
- データセンター間の接続
OpenVPNのインストールと基本設定
インストール
# Ubuntu/Debian
apt update
apt install openvpn easy-rsa
# CentOS/RHEL
yum install epel-release
yum install openvpn easy-rsa
ディレクトリ構造
/etc/openvpn/
├── server/ # サーバー設定
├── client/ # クライアント設定
└── easy-rsa/ # 証明書管理ツール
証明書認証の仕組み(重要!)
OpenVPNは**PKI(公開鍵基盤)**を使用します:
証明書の種類
- CA証明書:認証局(Certificate Authority)
- サーバー証明書:OpenVPNサーバー用
- クライアント証明書:各クライアント用
- DH鍵:暗号化強化用
信頼の連鎖
CA(認証局) → サーバー証明書を署名
CA(認証局) → クライアント証明書を署名
↓
サーバーとクライアントが相互に認証可能
証明書の作成手順
1. 認証局(CA)の作成
# easy-rsa環境をセットアップ
cd /etc/openvpn/easy-rsa
./easyrsa init-pki
# CA証明書を作成
./easyrsa build-ca
実行すると:
Enter New CA Key Passphrase: [CAの秘密鍵パスワードを入力]
Common Name (eg: your user, host, or server name) [Easy-RSA CA]: MyCompany-CA
2. サーバー証明書の作成
# サーバーの証明書要求を作成
./easyrsa gen-req server nopass
# CA証明書でサーバー証明書に署名
./easyrsa sign-req server server
3. クライアント証明書の作成
# クライアント証明書要求を作成
./easyrsa gen-req client1 nopass
# CA証明書でクライアント証明書に署名
./easyrsa sign-req client client1
4. DH鍵の生成
# Diffie-Hellman鍵を生成(時間がかかります)
./easyrsa gen-dh
OpenVPNサーバー設定
サーバー設定ファイル:/etc/openvpn/server/server.conf
# 基本設定
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
# ネットワーク設定
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
# クライアントに配布するルート
push "route 192.168.1.0 255.255.255.0"
push "dhcp-option DNS 8.8.8.8"
# セキュリティ設定
keepalive 10 120
cipher AES-256-CBC
user nobody
group nobody
persist-key
persist-tun
# ログ設定
status openvpn-status.log
log openvpn.log
verb 3
各設定の説明
ネットワーク設定:
server 10.8.0.0 255.255.255.0
- VPNクライアントに割り当てるIPアドレス範囲
- サーバー:10.8.0.1
- クライアント:10.8.0.2, 10.8.0.3, ...
ルーティング設定:
push "route 192.168.1.0 255.255.255.0"
- クライアントに「192.168.1.0/24にアクセスする時はVPN経由で」と指示
OpenVPNクライアント設定
クライアント設定ファイル:client.ovpn
client
dev tun
proto udp
remote your-server.com 1194
# 証明書設定(ファイル参照形式)
ca ca.crt
cert client1.crt
key client1.key
# セキュリティ設定
cipher AES-256-CBC
verb 3
# 接続維持
keepalive 10 120
ファイアウォール設定
サーバー側のファイアウォール
# OpenVPNポートを開放
iptables -A INPUT -p udp --dport 1194 -j ACCEPT
# VPN内部通信を許可
iptables -A INPUT -i tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -j ACCEPT
# NAT設定(インターネットアクセスを許可する場合)
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
IPフォワーディング有効化
# 一時的な設定
echo 1 > /proc/sys/net/ipv4/ip_forward
# 永続化
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
OpenVPNサービスの起動
# サービス開始
systemctl start openvpn-server@server
# 自動起動設定
systemctl enable openvpn-server@server
# 状態確認
systemctl status openvpn-server@server
# ログ確認
journalctl -u openvpn-server@server -f
セキュリティ強化設定
追加のセキュリティオプション
# TLS認証を追加
tls-auth ta.key 0 # サーバー側は0
tls-auth ta.key 1 # クライアント側は1
# 証明書の用途を限定
remote-cert-tls client # サーバー側設定
remote-cert-tls server # クライアント側設定
# 接続元IPを固定
client-config-dir /etc/openvpn/ccd
TLS認証鍵の生成
# TLS認証用の共有鍵を生成
openvpn --genkey --secret ta.key
トラブルシューティング
よくある問題
1. 接続はできるがインターネットにアクセスできない
# IPフォワーディングとNAT設定を確認
sysctl net.ipv4.ip_forward
iptables -t nat -L
2. 証明書エラー
# 証明書の有効期限確認
openssl x509 -in client1.crt -text -noout | grep "Not After"
3. ファイアウォールでブロック
# ポートが開いているか確認
netstat -tulnp | grep 1194
4. サーバー設定ファイル
/etc/openvpn/server.conf:
# 基本設定
port 1194
proto udp
dev tun
# 証明書とキー
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
tls-auth ta.key 0
# ネットワーク設定
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
# クライアントに配布するルート
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
# セキュリティ設定
keepalive 10 120
cipher AES-256-CBC
user nobody
group nobody
persist-key
persist-tun
# ログ設定
status openvpn-status.log
log-append /var/log/openvpn.log
verb 3

OpenVPNのインストールと設定
1. サーバー側のインストール
# CentOS/RHEL
yum install epel-release
yum install openvpn easy-rsa
# Ubuntu/Debian
apt update
apt install openvpn easy-rsa
2. 証明書機関(CA)の構築
Easy-RSAを使用:
# Easy-RSAのセットアップ
cp -r /usr/share/easy-rsa /etc/openvpn/
cd /etc/openvpn/easy-rsa
# 環境変数設定
vim vars
vars ファイルの内容例:
export KEY_COUNTRY="JP"
export KEY_PROVINCE="Tokyo"
export KEY_CITY="Tokyo"
export KEY_ORG="MyCompany"
export KEY_EMAIL="admin@example.com"
export KEY_OU="IT Department"
3. 証明書の生成
# 環境変数を読み込み
source ./vars
# CAの初期化
./clean-all
# CA証明書を生成
./build-ca
# サーバー証明書を生成
./build-key-server server
# Diffie-Hellman パラメータを生成
./build-dh
# TLS認証キーを生成
openvpn --genkey --secret ta.key
生成されるファイル:
ca.crt ← CA証明書
server.crt ← サーバー証明書
server.key ← サーバー秘密鍵
dh2048.pem ← DH パラメータ
ta.key ← TLS認証キー
5. ネットワーク設定
IPフォワーディング有効化:
echo 1 > /proc/sys/net/ipv4/ip_forward
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
iptables設定(NAT):
# VPNクライアントからのトラフィックをNAT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
# VPNポートを開放
iptables -A INPUT -p udp --dport 1194 -j ACCEPT
# フォワーディング許可
iptables -A FORWARD -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
クライアント設定
1. クライアント証明書の生成
# サーバー側で実行
cd /etc/openvpn/easy-rsa
./build-key client1
2. クライアント設定ファイル
client.ovpn:
client
dev tun
proto udp
remote your-server.example.com 1194
# セキュリティ設定
ca ca.crt
cert client1.crt
key client1.key
tls-auth ta.key 1
# その他設定
resolv-retry infinite
nobind
persist-key
persist-tun
cipher AES-256-CBC
verb 3
3. クライアント接続
# Linux/macOS
sudo openvpn --config client.ovpn
# Windows
# OpenVPN GUIを使用
OpenVPNのセキュリティ強化
1. 暗号化の強化
# サーバー設定に追加
cipher AES-256-GCM
auth SHA512
tls-version-min 1.2
tls-cipher TLS-ECDHE-RSA-WITH-AES-256-GCM-SHA384
2. アクセス制御
クライアント別設定:
# クライアント設定ディレクトリ
client-config-dir /etc/openvpn/ccd
# 特定クライアントの固定IP設定
echo "ifconfig-push 10.8.0.100 10.8.0.101" > /etc/openvpn/ccd/client1
接続ログの監視:
# 接続状況確認
cat /var/log/openvpn.log
# アクティブな接続確認
cat /etc/openvpn/openvpn-status.log
3. 証明書の失効
# 証明書失効リスト(CRL)の作成
cd /etc/openvpn/easy-rsa
./revoke-full client1
# サーバー設定に追加
crl-verify crl.pem