LoginSignup
5
4

More than 5 years have passed since last update.

AWSにOpenVPN[AmazonLinux]を構築(ユーザー & パスワード認証編)

Last updated at Posted at 2018-06-14

1. 環境構成

環境はこんな感じ
OpenVPN.png

VPNでトンネルはって、プライベートサブネット上にいるEC2に接続する手順を下記に記載!!

1.1. VPCネットワーク

VPC CIDR:172.24.0.0/16
Public1:172.24.0.0/24
Public2:172.24.1.0/24
Private1:172.24.2.0/24
Private2:172.24.3.0/24

1.1.1. ルートテーブル

【Public】

送信先 ターゲット
172.24.0.0/16 local
0.0.0.0/0 InternetGateway

【Private】

送信先 ターゲット
172.24.0.0/16 local

1.2. VPNサーバー

AmazonLinux
- PublicSubnetに配置
- EIP付与
- 送信元/送信先チェック False(OpenVPNをNATで構成する場合はTrueでもいい)

SG:Inbound TCP 0.0.0.0/443
今回はTCP 443で受け付けます

2. インストール手順

2.1. OpenVPNサーバー

AmazonLinux(OpenVPN)にSSHログイン

以下実施

yum --enablerepo=epel -y install openvpn openssl-devel lzo-devel pam-devel
wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
unzip master.zip
cp -r easy-rsa-master/easyrsa3/ /etc/openvpn/
rm -rf easy-rsa-master/
rm -f master.zip

# 認証局初期化
cd /etc/openvpn/easyrsa3/
./easyrsa init-pki
# CA証明書・秘密鍵作成
./easyrsa build-ca
cp pki/ca.crt /etc/openvpn

# サーバー証明書・秘密鍵作成(パスフレーズを2回入力)
./easyrsa build-server-full server nopass

cp pki/issued/server.crt /etc/openvpn/
cp pki/private/server.key /etc/openvpn/

# DH(Diffie Hellman)パラメータ作成(ちょっと時間かかる)
./easyrsa gen-dh
cp pki/dh.pem /etc/openvpn/

# 証明書廃止リスト作成
./easyrsa build-client-full dmy nopass
./easyrsa revoke dmy

rm -f /etc/openvpn/easyrsa3/pki/issued/dmy.crt
rm -rf /etc/openvpn/easyrsa3/pki/private/dmy.key
rm -rf /etc/openvpn/easyrsa3/pki/reqs/dmy.req

cp vars.example vars

varsファイル編集
vi vars

#set_var EASYRSA_CRL_DAYS       180
set_var EASYRSA_CRL_DAYS       3650

続き

./easyrsa gen-crl

cp /etc/openvpn/easyrsa3/pki/crl.pem /etc/openvpn/
chmod o+r /etc/openvpn/crl.pem
cd

openvpn --genkey --secret /etc/openvpn/ta.key
cp /usr/share/doc/openvpn-2.x.x/sample/sample-config-files/server.conf /etc/openvpn/

/etc/openvpn/server.confファイル編集

server.conf
dev tun
#dh dh2048.pem
dh dh.pem

# OpenVPNからクライアントへ払い出すIPアドレスのレンジ
server 10.8.0.0 255.255.255.0

# クライアントがVPNを経由して、通信させたいネットワーク経路を記載(複数可)
push "route 172.24.0.0 255.255.0.0"

tls-auth ta.key 0

;comp-lzo

user nobody
group nobody

;log-append  openvpn.log
log-append  /var/log/openvpn.log

# TCP通信の場合はコメントアウト(今回はTCPなのでコメントアウト)
#explicit-exit-notify 1

# 最終行へ追加
crl-verify crl.pem

# ユーザー/パスワード認証の場合必要
plugin /usr/lib64/openvpn/plugin/lib/openvpn-auth-pam.so login
client-cert-not-required
username-as-common-name

ログのローテーションファイル設定
/etc/logrotate.d/openvpn

/var/log/openvpn.log {
    missingok
    notifempty
    sharedscripts
    postrotate
        /etc/init.d/openvpn restart 2>&1 > /dev/null || true
    endscript
}

/etc/sysctl.confファイルを編集
IPフォワードの設定

sysctl.conf
#net.ipv4.ip_forward = 0
net.ipv4.ip_forward = 1

IPフォワードの設定を反映

sysctl -p

2.1.1. NAT設定の場合

/etc/init.d/iptables start
iptables -t nat -A POSTROUTING -o eth0 -s 10.8.0.0/24 -j MASQUERADE

/etc/init.d/iptables save
iptables -L -n -t nat

/etc/init.d/iptables restart

2.1.2. ルーティング構成の場合

送信元/送信先チェック Falseになっていること

AWSコンソールよりルートテーブルを編集
(下記はPrivate用のテーブルです。必要であればPublic用のテーブルにも同様の設定を追記)
【Private ルートテーブル】

送信先 ターゲット
172.24.0.0/16 local
10.8.0.0/24 EC2(OpenVPN)インスタンス

↑ OpenVPNサーバーのインスタンスNICを経由する。というルートテーブルを記載してます。

2.2. openvpn サービス自動起動

chkconfig openvpn on

2.3. openvpn サービス起動

/etc/init.d/openvpn start

3. クライアント設定

3.1. サーバーでVPNユーザー作成

OSのユーザーがVPNユーザーです。
VPNサーバーでユーザーを作成します。
AmazonLinux、CentOSであれば下記です。

■ユーザー / パスワード
useradd vpnuser01
passwd vpnuser01

3.2. サーバーでVPNクライアント用のコンフィグファイルを作成

cp /usr/share/doc/openvpn-2.x.x/sample/sample-config-files/client.conf ~/client.ovpn

client.ovpn
client
# 今回はudpではなくTCPなので変更
;proto udp
proto tcp
remote [VPNサーバのFQDN or IPアドレス] 443

ca ca.crt
# 証明書じゃなくユーザー・パスワードなのでコメントアウト
#cert client.crt
#key client.key

#remote-cert-tls server

tls-auth ta.key 1

#comp-lzo ←圧縮を無効にする。これはサーバーのconfファイルと合わせる必要がある。

auth-user-pass

下記ファイルをクライアント端末に配置する
~/client.ovpn
/etc/openvpn/ca.crt
/etc/openvpn/ta.key

3.3. VPNクライアント(Windows端末の場合)

openvpnクライアントダウンロードしてインストール

~/client.ovpn
/etc/openvpn/ca.crt
/etc/openvpn/ta.key
上記3ファイルを
C:\Program Files\OpenVPN\config配下に配置する

このまま実行して接続すると、ユーザー、パスワードを聞いてくるので
LinuxOS上で作成したユーザーとパスワードを入力し接続する。

OpenVPNクライアントがグリーンになれば接続成功

3.3.1. 通信経路の確認

  1. 家(PC) → OpenVPNに接続
  2. 家(PC)に10.8.0.0 255.255.255.0のIPアドレスが/30で区切られて払い出される[最初に振られるIPはおそらく10.8.0.6/30]
  3. 家(PC) → AWS上のプライベートEC2(Windows、Linux)に接続確認
  • NAT構成の場合、3. は一方通行の通信となり、EC2(Windows、Linux)からみれば送信元IPはOpenVPNサーバーのプライベートIP

OpenVPN_通信1.png

  • ルーティング構成の場合、EC2(Windows、Linux)からみれば送信元IPはOpenVPNサーバーが払い出したクライアントのIPアドレス10.8.0.6/30となる。 [サーバーから家(PC)にも通信可能]

OpenVPN_通信2.png

5
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4