以前、CentOS 7をOpenVPNサーバーにするメモを書きましたが、今回はCentOS 8で新たにセットアップします。
この記事に書いてあること
- 最小インストールしてあるCentOS 8.1.1911にOpenVPNをインストール・設定する
- OpenVPNのサーバーモードはブリッジ方式
- OpenVPNの認証は証明書認証を使用する
準備
ファイアウォール設定
( 12341/udp を使用する場合)
firewall-cmd --permanent --add-port=12341/udp
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload
で、firewall-cmd --list-all
で確認する。
IPフォワード設定
vi /etc/sysctl.conf
で、net.ipv4.ip_forward=1
と追記してから再起動。
SELinux設定
semanage port -a -t openvpn_port_t -p udp 12341
確認はsemanage port --list | grep openvpn
インストール
epelリポジトリ追加
dnf install epel-release
OpenVPNとeasy-rsaのインストール
dnf --enablerepo=epel install openvpn easy-rsa
認証局の設定、証明書作成など
念のためコピー
mkdir /etc/openvpn/easy-rsa
cp /usr/share/easy-rsa/3/* /etc/openvpn/easy-rsa/ -R
作業ディレクトリへ移動
cd /etc/openvpn/easy-rsa
初期設定、証明書作成など
./easyrsa init-pki
./easyrsa build-ca
./easyrsa gen-dh
./easyrsa build-server-full server nopass
クライアント証明書(clientname を変えて必要な数だけ作る)./easyrsa build-client-full clientname nopass
TLS-Auth用共通鍵作成
cd /etc/openvpn
openvpn --genkey --secret ta.key
OpenVPNサーバー設定
前回の記事や、こちらの記事を参照。
設定ファイルの置き場所は
/etc/openvpn/ ではなく /etc/openvpn/server/ となる。
ブリッジの設定
ブリッジ br0 を追加nmcli connection add type bridge con-name br0 ifname br0 stp no
IPアドレス固定(この例では192.168.9.11、マスク255.255.255.0)nmcli connection modify br0 ipv4.method manual ipv4.addresses "192.168.9.11/24" ipv4.gateway "192.168.9.1" ipv4.dns 192.168.9.1
インターフェース名の確認nmcli
インターフェースを(この例では enp1s0) を br0 に追加。nmcli connection add type bridge-slave ifname enp1s0 master br0
enp1s0を削除してリブート。nmcli connection delete enp1s0; reboot
OpenVPN 起動と自動起動設定
設定ファイルが vpn-bridge.conf として、起動するにはsystemctl start openvpn-server@vpn-bridge
ブリッジに tap0 を組み込むサービスを作る。vi /etc/systemd/system/openvpn-bridge.service
中身は↓こんな感じ(OpenVPNの設定ファイルが vpn-bridge.conf で dev tap0 になってて、ブリッジが br0)
[Unit]
Description=OpenVPN bridge service
Requires=openvpn-server@vpn-bridge.service
After=openvpn-server@vpn-bridge.service
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/sbin/ip link set dev tap0 master br0
ExecStartPost=/sbin/ip link set tap0 up
ExecReload=/bin/true
ExecStop=/sbin/ip link set dev tap0 nomaster
[Install]
WantedBy=multi-user.target
で、systemctl start openvpn-bridge
自動起動させるには
systemctl enable openvpn-server@vpn-bridge
systemctl enable openvpn-bridge
…だと思ったんだけど、openvpn-bridge.serviceのほうが先に起動しちゃう…
とりあえず…
cp /usr/lib/systemd/system/openvpn-server@.service /etc/systemd/system/openvpn-bridge@.service
で、これをいじる。
ExecStartの後ろに
ExecStartPost=/sbin/ip link set dev tap0 master br0
ExecStartPost=/sbin/ip link set tap0 up
ExecStop=/sbin/ip link set dev tap0 nomaster
と書き足す…とりあえずこれを使うことにしました…