株式会社エスロジカル
株式会社エスロジカル
SSL証明書(DV、OV、EV)、セキュリティ、Web開発、Linux開発、Go言語

HOME > 技術ドキュメント > OpenVPN サーバー構築(Ubuntu 24.04 LTS)

OpenVPN サーバー構築(Ubuntu 24.04 LTS)


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 3,960円/1年(税込)〜でSSL証明書を販売しています。審査サポート・インストール代行も対応しています。

SSL証明書の購入はこちら / SSL証明書とは? / インストール代行サービス


← 技術ドキュメント一覧へ戻る