1. 環境構成
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ファイル編集
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フォワードの設定
#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
# 今回は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端末の場合)
~/client.ovpn
/etc/openvpn/ca.crt
/etc/openvpn/ta.key
上記3ファイルを
C:\Program Files\OpenVPN\config
配下に配置する
このまま実行して接続すると、ユーザー、パスワードを聞いてくるので
LinuxOS上で作成したユーザーとパスワードを入力し接続する。
OpenVPNクライアントがグリーンになれば接続成功
3.3.1. 通信経路の確認
- 家(PC) → OpenVPNに接続
- 家(PC)に
10.8.0.0 255.255.255.0
のIPアドレスが/30で区切られて払い出される[最初に振られるIPはおそらく10.8.0.6/30
] - 家(PC) → AWS上のプライベートEC2(Windows、Linux)に接続確認
- NAT構成の場合、3. は一方通行の通信となり、EC2(Windows、Linux)からみれば送信元IPはOpenVPNサーバーのプライベートIP
- ルーティング構成の場合、EC2(Windows、Linux)からみれば送信元IPはOpenVPNサーバーが払い出したクライアントのIPアドレス
10.8.0.6/30
となる。
[サーバーから家(PC)にも通信可能]