Edited at

AWS環境にOpenVPNでVPNを構築

More than 3 years have passed since last update.

AWS環境にOpenVPNをインストールし、ソフトウェアVPN環境を構築するための簡単な構築メモです。

クライアント側に専用クライアントのインストールが必要ですが、ハードウェアVPNを構築するほどのコストを掛けられ無いような規模であれば、役に立つこともあるかと思います。


環境

Ppublicセグメントでは、OpenVPN用サーバのみを公開し、Privateセグメントの各サーバに対しては、クライアントからプライベートアドレスで接続できるようにします。

env.png


AWSの設定


  • OpenVPNをインストールしたサーバにEIPを設定。

  • OpenVPNをインストールしたサーバのみをPublicセグメントのセキュリティグループに所属させる。

  • Privateセグメントのセキュリティグループに、Publicセグメントに設定したセキュリティグループからのアクセスを許可。

  • Publicセグメントのセキュリティグループに以下を設定。


    Custom UDP Rule, UDP, 1194, 0.0.0.0/0


  • Routeテーブルに、VPNのクライアント側のセグメントから、OpenVPNをインストールしたサーバへのルーティングを設定。

  • OpenVPNをインストールしたサーバに対し、Source/dest.checkをdisabled。


OpenVPNのインストール

sudo yum install openvpn


easy-rsaのインストール

Amazon Linuxでは、標準でeasy-rsaに相当するパッケージがインストールされていません。このため、個別にインストールする必要がありますが、yumにepelリポジトリを有効にするオプションの指定が必要です。

sudo yum install easy-rsa --enablerepo=epel

以下にインスト−ルされます。


  • /usr/share/easy-rsa


各種keyの作成


build-ca

cd /usr/share/easy-rsa/2.0

sudo -s
source ./vars
./clean-all
./build-ca


入力例

Country Name (2 letter code) [US]:JP

State or Province Name (full name) [CA]:Tokyo
Locality Name (eg, city) [SanFrancisco]:Hoge-shi
Organization Name (eg, company) [Fort-Funston]:Fuga Company
Organizational Unit Name (eg, section) [MyOrganizationalUnit]:Hoge Dept.
Common Name (eg, your name or your server's hostname) [Fort-Funston CA]:openvpn-ca
Name [EasyRSA]:
Email Address [me@myhost.mydomain]:ec2-user@example.com


build-key-server

./build-key-server server


入力例

Country Name (2 letter code) [US]:JP

State or Province Name (full name) [CA]:Tokyo
Locality Name (eg, city) [SanFrancisco]:Hoge-shi
Organization Name (eg, company) [Fort-Funston]:Fuga Company
Organizational Unit Name (eg, section) [MyOrganizationalUnit]:Hoge Dept.
Common Name (eg, your name or your server's hostname) [server]:openvpn-server
Name [EasyRSA]:
Email Address [me@myhost.mydomain]:ec2-user@example.com


build-key

以下はアクセスを許可するアカウント毎に作成します。

./build-key [username]


入力例

countryName           :PRINTABLE:'JP'

stateOrProvinceName :PRINTABLE:'Tokyo'
localityName :PRINTABLE:'Hoge-shi'
organizationName :PRINTABLE:'Fuga Company'
organizationalUnitName:PRINTABLE:'Hoge Dept.'
commonName :PRINTABLE:'ec2-user'
name :PRINTABLE:'EasyRSA'
emailAddress :IA5STRING:'ec2-user@example.com'


build-dh

./build-dh


リンクの作成

ln -s /usr/share/easy-rsa/2.0/keys/ca.crt .

ln -s /usr/share/easy-rsa/2.0/keys/server.crt .
ln -s /usr/share/easy-rsa/2.0/keys/server.key .
ln -s /usr/share/easy-rsa/2.0/keys/dh2048.pem .


OpenVPNの設定


/etc/openvpn/config.conf

port 1194

proto udp
dev tun

server 172.25.254.0 255.255.255.0
ifconfig-pool-persist ipp.txt

push "route 172.31.0.0 255.255.240.0"

ca ca.crt
cert server.crt
key server.key
dh dh2048.pem

comp-lzo
keepalive 10 60
ping-timer-rem
persist-tun
persist-key

status /var/log/openvpn-status.log
verb 3


OpenVPNプロセスの再起動

sudo /etc/rc.d/init.d/openvpn restart


OpenVPNの自動起動設定

sudo chkconfig --level 345 openvpn on


IP Forwardingを設定

OpenVPNをインストールした開発環境管理サーバで、IP Forwardingを有効にします。


/etc/sysct.conf

net.ipv4.ip_forward = 1

設定を読み込みます。

sudo sysctl -p


OpenVPN Clinet for Mac

MacであればTunnelblickが良いと思います。以下は設定例です。


Tunnelblick

client

remote [OpenVPN用サーバに設定したEIP]
proto udp
dev tun
port 1194

tls-client

ca ca.crt
cert [username].crt
key [username].key

comp-lzo
keepalive 10 60
ping-timer-rem
persist-tun
persist-key


OpenVPN Client for Windows

vpnux Clientが非常に使いやすくてお勧めです。