PR

AlmaLinux 9 に OpenVPN サーバーを構築しました

1. はじめに

OS を変えて OpenVPN サーバーを構築したので手順を残しておきます。
環境は

  • AlmaLinux 9.5
  • EasyRSA 3.2.1
  • OpenVPN 2.5.11
  • OpenSSL 3.2.2

で OpenVPN サーバーを構築しています。

2. インストールと初期設定

dnf install -y epel-release
 dnf install -y openvpn easy-rsa

/usr/share/easy-rsa/3.2.1 を /etc/openvpn/easy-rsa にコピーします。

cp -r /usr/share/easy-rsa/3.2.1 /etc/openvpn/easy-rsa

cd /etc/openvpn/easy-rsa

PKI を初期化します。

./easyrsa init-pki

CA(認証局)を作成します。

./easyrsa build-ca

サーバー証明書を作成します。

# <server> はなんでもいいですがわかりやすくサーバー名を使うのをおすすめします
./easyrsa build-server-full <server> nopass

Diffie-Hellman パラメータを作成します。

./easyrsa gen-dh

TLS 認証キーを作成します。

openvpn --genkey --secret /etc/openvpn/server/ta.key

OpenVPN サーバーの設定ファイルをコピーします。

cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn/server/server.conf

3. 設定ファイルの編集

編集する設定ファイルはこちらです。

vi /etc/openvpn/server/server.conf

以下のように設定します。

port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/pki/ca.crt # 作成した CA の証明書
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 # 作成した Diffie-Hellman パラメータ
server 192.168.yyy.yyy 255.255.255.0 # クライアントに割り当てる OpenVPN接続時に割り当てる IP アドレスの範囲
push "route 192.168.xxx.xxx 255.255.255.0" # クライアントにルーティング情報を教える
push "redirect-gateway def1 bypass-dhcp" # クライアントの全ての通信を VPN 経由にする
push dhcp-option DNS 192.168.xxx.xxx # クライアントに DNS サーバーの IP アドレスを教える
;client-to-client # クライアント間の通信を許可しないためコメント
tls-auth /etc/openvpn/server/ta.key 0 # 作成した TLS 認証キー
comp-lzo # 通信を圧縮する
use nobody
group nobody
status /var/log/openvpn-status.log
log /var/log/openvpn.log
;crl-verify /etc/openvpn/easy-rsa/pki/crl.pem # クライアント証明書の失効リスト。使う場合はコメントを外す

サーバーの起動と自動起動設定をします。

systemctl start openvpn-server@server
systemctl enable openvpn-server@server

4. IP フォワーディング と ファイアーウォールの設定

IP フォワーディングを有効にします。

echo -e "\n# Controls IP packet forwarding\nnet.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p # 設定を反映

ファイアーウォールの設定をします。

firewall-cmd --add-service=openvpn --permanent
firewall-cmd --add-masquerade --permanent
firewall-cmd --add-port=1194/udp --zone=public --permanent

firewall-cmd --zone=trusted --add-service=openvpn --permanent
firewall-cmd --zone=trusted --add-interface=tun0 --permanent
# 192.168.yyy.xxx は OpenVPN サーバーの IP アドレスに置き換えてください
# <LAN> は LAN のインターフェース名に置き換えてください
firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 192.168.yyy.xxx/24 -o <LAN> -j MASQUERADE

firewall-cmd --reload

5. クライアント証明書の作成

クライアント証明書を作成します。

cd /etc/openvpn/easy-rsa
# <client> にクライアント名を入れてください
./easyrsa build-client-full <client> nopass

以下にクライアント証明書が作成されます。

/etc/openvpn/easy-rsa/pki/issued/<client>.crt # クライアント証明書
/etc/openvpn/easy-rsa/pki/private/<client>.key # クライアント秘密鍵

あとは、クライアント証明書をクライアントに配布して、OpenVPN クライアントを設定すれば接続できます。

6. まとめ

昔、CentOS 7 で構築したときと変わらず。
iptables から firewalld に変えたところくらいで特に問題なく構築できました。

今回の記事も、Github Copilot が7割くらい書いてくれました。

A. 参考サイト

AlmaLinux9でのOpenVPNサーバーの設定
自宅にVPNサーバーを構築して、クライアント端末から接続確認する方法
OpenVPNのアカウント管理

B. 関連書籍

コメント