CentOS Stream 8 にOpenVPNクライアントをインストール

アフィリエイト広告を利用しています

このページの内容が役に立ったら X (旧twitter) でフォローして頂けると励みになります
挨拶や報告は無しで大丈夫です

さくらのVPSにCentOS Stream 8をインストールした覚書です。

今回は、CentOS Stream 8 に OpenVPN のクライアントをインストールします。
通常はDNFでインストールしたいところなのですが、 CentOS Stream 8 はもうサポートが切れていてDNFが使用できません。

そこでソースコードから OpenVPN をインストールしていきます。

なお本番環境で利用される場合はここにある内容だけを鵜呑みにせずセキュリティ専門家に相談されることをお勧めします。

環境

実施日2025-05-07
サーバさくらのVPS 2G
OSCentOS Stream 8
cat /etc/redhat-release
CentOS Stream release 8

ソースコードの取得

公式サイト
https://www.openvpn.jp

ダウンロードURL
https://swupdate.openvpn.org/community/releases/openvpn-2.6.14.tar.gz

libcap-ngのインストール

OpenVPN 2.6 以降では libcap-ng が必須になりました

Github
https://github.com/stevegrubb/libcap-ng

LIBCAP_NG_VERSION=0.8.5

ls -la /usr/local/src
ls -la /usr/local/lib

mkdir -p /usr/local/src

cd /usr/local/src

wget https://github.com/stevegrubb/libcap-ng/archive/refs/tags/v${LIBCAP_NG_VERSION}.tar.gz

mv v${LIBCAP_NG_VERSION}.tar.gz libcap-ng-${LIBCAP_NG_VERSION}.tar.gz

tar xvzf libcap-ng-${LIBCAP_NG_VERSION}.tar.gz

cd libcap-ng-${LIBCAP_NG_VERSION}

touch README

./autogen.sh

./configure --prefix=/usr/local/lib/libcap-ng-${LIBCAP_NG_VERSION}

make -j$(nproc)

make install

インストール

LIBCAP_NG_VERSION=0.8.5
export PKG_CONFIG_PATH=/usr/local/lib/libcap-ng-${LIBCAP_NG_VERSION}/lib/pkgconfig:$PKG_CONFIG_PATH
VPN_VERSION=2.6.14

ls -la /usr/local/src
ls -la /usr/local/lib

mkdir -p /usr/local/src

cd /usr/local/src

wget https://swupdate.openvpn.org/community/releases/openvpn-$VPN_VERSION.tar.gz

tar xvzf openvpn-$VPN_VERSION.tar.gz

cd openvpn-$VPN_VERSION

./configure --prefix=/usr/local/lib/openvpn-$VPN_VERSION \
    --disable-dco \
    --disable-pkcs11 \
    --disable-plugin-auth-pam \
    --disable-lz4 \
    --disable-lzo

make -j$(nproc)

make install

証明書ファイルの準備

証明書は下記より事前に準備しておいてください。

クライアント証明書の作成 / AlmaLinux9.4 on さくらのVPS

証明書や鍵の権限は次のとおりとしてください
※置き場所はどこでも構いません

DIR_VPN_FILES=openvpn_xxx_xxx_xxx_xxx

mv /home/example/${DIR_VPN_FILES} /root/

chown -R root:root /root/${DIR_VPN_FILES}

chmod 600 /root/${DIR_VPN_FILES}/*.key
chmod 644 /root/${DIR_VPN_FILES}/*.crt

.ovpn 設定ファイルの更新

次の内容でVPNを利用する設定です

  • VPNサーバは 192.168.1.2
  • 接続先は 192.168.2.3
  • VPN経由で ssh / rsync する
  • ここで指定した通信のみを VPN をとおす
  • ここで指定しない通信はVPNを通さない

証明書ファイルと一緒に VPN サーバから持ってきた opvn ファイルを使用します。

vi /root/${DIR_VPN_FILES}/example.opvn

下記の4カ所をVPNサーバから持ってきたファイルのパスに変えてください。
それぞれフルパスで指定する必要があります。

ca /etc/openvpn/client/ca.crt
cert /etc/openvpn/client/★★★★.crt
key /etc/openvpn/client/★★★★.key
tls-auth /etc/openvpn/ta.key 1

VPNを利用する通信を制限するために次の2行を最終行に追加します。

pull-filter ignore "redirect-gateway"
pull-filter ignore "dhcp-option"
# 確認
 /usr/local/lib/openvpn-2.6.14/sbin/openvpn --config /root/${DIR_VPN_FILES}/★★★★.ovpn

systemd に登録する

OS起動時にVPNを自動接続し、特定のルート(xxx.xxx.xxx.xxx)を通し、終了時に自動切断する方式とします。

vi /etc/systemd/system/${DIR_VPN_FILES}.service

xxx.xxx.xxx.xxx (2カ所) を接続したいIPアドレスに変えてください
★★★★ のパスを変えてください

[Unit]
Description=OpenVPN to xxx.xxx.xxx.xxx
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
ExecStart=/usr/local/lib/openvpn-2.6.14/sbin/openvpn --config /root/★★★★.ovpn --daemon
ExecStartPost=/bin/bash -c 'sleep 2 && /usr/sbin/ip route add xxx.xxx.xxx.xxx dev tun0'
ExecStop=/usr/bin/killall openvpn
Restart=on-failure

[Install]
WantedBy=multi-user.target

有効化&起動

# systemd に登録
systemctl daemon-reexec
systemctl daemon-reload

# 有効化(起動時に起動)
systemctl enable ${DIR_VPN_FILES}.service

# 今すぐ起動
systemctl start ${DIR_VPN_FILES}.service

# ステータス確認
systemctl status ${DIR_VPN_FILES}.service

# 確認
ip a show tun0

# ルート確認
ip route get 192.168.2.3

再起動して確認

# 再起動
reboot

# 確認
ip a show tun0

# ルート確認
ip route get 192.168.2.3