Amazon Linux 2でOpenVPNサーバ

訳あってAWS EC2でOpenVPNサーバを作ったので、その操作ログを残しておきます。

AWSコンソールでの操作

まず、AWSコンソールで下記の操作を行います。

  1. t2.nanoでEC2インスタンスを作成(インスタンスタイプは何でも良いですが、OpenVPNサーバのみの運用ならt2.nanoで良いのではないかと思います)
  2. ElasticIPを割り当て

送信元/送信先の変更チェックを無効化

VPNインスタンスのセキュリティグループの設定

OpenVPNサーバは1194/udpを使うので、セキュリティグループの設定で通信を許可します。

ルーティングの設定

VPCダッシュボードのルートテーブルの設定を行います。10.8.0.0/24のルート先としてOpenVPNサーバにするEC2インスタンスを指定します。

OpenVPNサーバのEC2インスタンスにログインして行う操作

パッケージアップデート

sudo yum update

OpenVPNとeasy-rsaのインストール

sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum install openvpn easy-rsa

認証局と鍵の作成

sudo su -
cd /usr/share/easy-rsa/3
./easyrsa init-pki

./easyrsa build-ca

pass phraseのみ入力。Common Nameは入力の必要なし。

./easyrsa gen-dh


まずは、サーバ側の証明書と秘密鍵を作成します。パスワードが不要な場合はnopassを付けて実行します。

./easyrsa build-server-full server1 nopass

ta.keyも作成します。

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

次に、クライアント側に導入する証明書と秘密鍵を作成します。接続するクライアント毎に作成する必要があります。user1の部分をクライアント毎に置き換えます。
パスワードが不要な場合はnopassを付けて実行します。

./easyrsa build-client-full user1

/etc/openvpn/server.conf

port 1194
proto udp
dev tun
ca /usr/share/easy-rsa/3/pki/ca.crt
cert /usr/share/easy-rsa/3/pki/issued/server1.crt
key /usr/share/easy-rsa/3/pki/private/server1.key
dh /usr/share/easy-rsa/3/pki/dh.pem

management localhost 7505

server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt

push "route 10.8.0.0 255.255.0.0"

tls-auth /etc/openvpn/ta.key 0

keepalive 10 120
cipher AES-256-CBC
comp-lzo

persist-key
persist-tun

status openvpn-status.log
verb 3
explicit-exit-notify 1

crl-verify /usr/share/easy-rsa/3/pki/crl.pem

management localhost 7505は、OpenVPNサーバの操作をコンソールの設定です。telnet localhost 7505でコンソールにアクセスできます。

最後の行のcrl-verifyは、失効した証明書のチェックを行う場合に追加します。

証明書の失効は下記のように行います。

./easyrsa revoke user1

失効の操作を行った後、下記の操作でcrl.pemファイルを作成します。

./easyrsa gen-crl

/etc/sysctl.conf

下記の行を追加します。

net.ipv4.ip_forward = 1

sysctlコマンドで反映します。

sysctl -p

OpenVPNサーバの起動

まず、テスト起動してみます。

cd /etc/openvpn/
openvpn server.conf

サービスとしての起動と、自動起動の設定を行います。

systemctl start openvpn@server
systemctl enable openvpn@server

これでOpenVPNサーバが立ち上がりました。次の記事でクライアントからの接続について説明します。

この記事を書いた人

井上 研一

株式会社ビビンコ代表取締役、ITエンジニア/経済産業省推進資格ITコーディネータ。AI・IoTに強いITコーディネータとして活動。画像認識モデルを活用したアプリや、生成AIを業務に組み込むためのサービス「Gen2Go」の開発などを行っている。近著に「使ってわかった AWSのAI」、「ワトソンで体感する人工知能」。日本全国でセミナー・研修講師としての登壇も多数。