SSL証明書・Go言語開発・Linuxサーバー構築・セキュリティ
OpenVPN は SSL/TLS を使ったオープンソースの VPN ソリューションです。
柔軟な設定と高い互換性(Windows/macOS/Linux/iOS/Android)から広く使われています。
本記事では Ubuntu 24.04 LTS に OpenVPN サーバーを構築し、クライアントが接続するまでの手順を解説します。
PKI(公開鍵基盤)の構築には EasyRSA を使用します。
| 項目 | OpenVPN | WireGuard |
|---|---|---|
| 認証方式 | 証明書(PKI)または PSK | 公開鍵ペア(固定) |
| プロトコル | TCP または UDP | UDP のみ |
| 速度 | 普通(SSL/TLS オーバーヘッドあり) | 高速(軽量プロトコル) |
| 設定複雑度 | 複雑(PKI 構築が必要) | シンプル |
| OS 互換性 | 幅広い(旧 OS も対応) | モダン OS 向け |
| ファイアウォール通過 | TCP 443 で通過しやすい | UDP のみのため制限されることあり |
sudo apt update sudo apt install -y openvpn easy-rsa
# EasyRSA ディレクトリを作成 make-cadir ~/easy-rsa cd ~/easy-rsa # PKI を初期化 ./easyrsa init-pki # CA(認証局)証明書を作成(Common Name を入力) ./easyrsa build-ca nopass # サーバー証明書の秘密鍵と CSR を生成 ./easyrsa gen-req server nopass # CA でサーバー証明書に署名 ./easyrsa sign-req server server # "yes" を入力して確認 # Diffie-Hellman パラメータを生成(時間がかかる) ./easyrsa gen-dh # TLS 認証キーを生成 openvpn --genkey secret ta.key
cd ~/easy-rsa # クライアント証明書を生成(client1 の部分はクライアント名) ./easyrsa gen-req client1 nopass ./easyrsa sign-req client client1 # "yes" を入力して確認
sudo mkdir -p /etc/openvpn/server # サーバー用ファイルをコピー sudo cp ~/easy-rsa/pki/ca.crt /etc/openvpn/server/ sudo cp ~/easy-rsa/pki/issued/server.crt /etc/openvpn/server/ sudo cp ~/easy-rsa/pki/private/server.key /etc/openvpn/server/ sudo cp ~/easy-rsa/pki/dh.pem /etc/openvpn/server/ sudo cp ~/easy-rsa/ta.key /etc/openvpn/server/ # パーミッションを設定 sudo chmod 600 /etc/openvpn/server/server.key /etc/openvpn/server/ta.key
# /etc/openvpn/server/server.conf port 1194 proto udp dev tun ca /etc/openvpn/server/ca.crt cert /etc/openvpn/server/server.crt key /etc/openvpn/server/server.key dh /etc/openvpn/server/dh.pem tls-auth /etc/openvpn/server/ta.key 0 server 10.8.0.0 255.255.255.0 push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 8.8.8.8" push "dhcp-option DNS 8.8.4.4" cipher AES-256-GCM auth SHA256 tls-version-min 1.2 keepalive 10 120 persist-key persist-tun user nobody group nogroup status /var/log/openvpn/openvpn-status.log log /var/log/openvpn/openvpn.log verb 3
sudo mkdir -p /var/log/openvpn
# IP フォワーディングを有効化 echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf sudo sysctl -p # UFW で OpenVPN ポートを開放 sudo ufw allow 1194/udp # UFW に NAT ルールを追加 # /etc/ufw/before.rules の *filter 行の前に追記 # *nat # :POSTROUTING ACCEPT [0:0] # -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE # COMMIT # /etc/default/ufw で DEFAULT_FORWARD_POLICY を ACCEPT に変更 sudo sed -i 's/DEFAULT_FORWARD_POLICY="DROP"/DEFAULT_FORWARD_POLICY="ACCEPT"/' /etc/default/ufw sudo ufw reload
sudo systemctl enable --now openvpn-server@server sudo systemctl status openvpn-server@server
# client1.ovpn を生成するスクリプト(各証明書を inline で埋め込む) cat > ~/client1.ovpn <<EOF client dev tun proto udp remote YOUR_SERVER_IP 1194 resolv-retry infinite nobind persist-key persist-tun cipher AES-256-GCM auth SHA256 tls-version-min 1.2 key-direction 1 verb 3 <ca> $(cat ~/easy-rsa/pki/ca.crt) </ca> <cert> $(cat ~/easy-rsa/pki/issued/client1.crt) </cert> <key> $(cat ~/easy-rsa/pki/private/client1.key) </key> <tls-auth> $(cat ~/easy-rsa/ta.key) </tls-auth> EOF
生成した client1.ovpn をクライアント PC に転送し、OpenVPN クライアントで読み込みます。
WireGuard VPN サーバー構築(Ubuntu 24.04 LTS) — よりシンプルな VPN の選択肢
UFW・Fail2ban 設定(Ubuntu 24.04) — ファイアウォール設定
AES暗号化入門 — AES-256-GCM の仕組み
OpenVPN が使う証明書は EasyRSA で作成する自己署名の内部 CA から発行する証明書です。
これは VPN クライアントの認証に使うもので、公的 CA は不要です。
一方、Web サーバーの HTTPS に必要な SSL証明書は公的 CA(デジサート等)から発行される必要があります。
VPN サーバーと同じサーバーで Web サービスも運用する場合は、両方の証明書が必要になります。
エスロジカルではデジサート・サイバートラストの正規取扱代理店として、
2009年から16年以上、RapidSSL(ラピッドSSL) 4,356円/1年(税込)〜でSSL証明書を販売しています。審査サポート・インストール代行も対応しています。
SSL証明書の購入はこちら / SSL証明書とは? / インストール代行サービス