訳あってAWS EC2でOpenVPNサーバを作ったので、その操作ログを残しておきます。
AWSコンソールでの操作
まず、AWSコンソールで下記の操作を行います。
- t2.nanoでEC2インスタンスを作成(インスタンスタイプは何でも良いですが、OpenVPNサーバのみの運用ならt2.nanoで良いのではないかと思います)
- 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サーバが立ち上がりました。次の記事でクライアントからの接続について説明します。