openvpn-logo

AWSのプライベートサブネットにOpenVPNでVPN接続

ネットワークって難しいですよね。

VPNとかポートとかIP制限とかアプリ固有の設定とか。

うまくいかなくてイロイロ調べた結果、ネットワークアダプタが無効になってたとかマジ吠えましたよ。

泣ける。

これがお前らのやりかたか。

ちくそう。

気を取り直して行きましょう。

AWSのプライベートサブネットにVPN接続する手段としてOpenVPNを使ってみました。

VPC、OpenVPNサーバおよびプライベート接続サーバの作成

まずは、テスト環境の作成から。
簡単のため、VPN作成ウィザードから「パブリックとプライベート サブネットを持つ VPC」を選択して作成していきますよ。
NATゲートウェイにはElasticIPアドレスが必要なので先に取得しておくことをオススメします。余ってるヤツがあればそれでいいですよ。

ちなみにNATゲートウェイは基本的にIPアドレスを持たないサーバ側からインターネットを見に行く時だけ必要です。今回の場合は、プライベートサブネット上のサーバしか見ない上に接続テストするだけだからVPC作成後はすぐ削除しちゃってもいいすね。

無駄にお金かかるし。

では、つぎにOpenVPNサーバを作成しますよ。
AWS Linuxインスタンス→t2.nanoを選択して以下の設定。

こいつは当然パブリックサブネット側に置きます。

ストレージはデフォルトの8Gにして、セキュリティポリシーはUDP 1194を開けてやる。サーバ初期設定のためのSSHも開けておく。

インスタンスが作成されたら、インターネット上から接続できるようにするためにElasticIP割り振ってアタッチしてください。

その後、SSHで接続し、openVPNをRPMインストールします。

$ sudo su
# yum install openvpn -y

EasyRSAをダウンロードします。

# wget https://github.com/OpenVPN/easy-rsa/releases/download/3.0.1/EasyRSA-3.0.1.tgz
# tar -xvzf EasyRSA-3.0.1.tgz
# cd EasyRSA-3.0.1

CA証明書、サーバ証明書、クライアント証明書を作成していきます。

# ./easyrsa init-pki
# ./easyrsa build-ca
Generating a 2048 bit RSA private key
…..+++
………………………………..+++
writing new private key to ‘/home/ec2-user/EasyRSA-3.0.1/pki/private/ca.key.b7bOzzNItb’
Enter PEM pass phrase: ← CA証明書のパスワードを登録
Verifying – Enter PEM pass phrase: ← CA証明書のパスワードの確認

Common Name (eg: your user, host, or server name) [Easy-RSA CA]:openvpn.rizworks.net ← 好きなんいれて

# ./easyrsa build-server-full server nopass

Check that the request matches the signature ← CA証明書のパスワードを入力

# ./easyrsa build-client-full client1 nopass

Enter pass phrase for /home/ec2-user/EasyRSA-3.0.1/pki/private/ca.key: ← CA証明書のパスワードを入力

# ./easyrsa gen-dh

出来上がるまで気長に待つ・・・。

出来あがったヤツらをopenVPNサーバのデフォルト参照先にコピー。

# cp -p pki/ca.crt /etc/openvpn/
# cp -p pki/issued/server.crt /etc/openvpn/
# cp -p pki/private/server.key /etc/openvpn/
# cp -p pki/dh.pem /etc/openvpn/dh2048.pem

openVPNサーバの設定ファイルを作る。

# cp /usr/share/doc/openvpn-2.3.12/sample/sample-config-files/server.conf /etc/openvpn/
# vi /etc/openvpn/server.conf

以下、修正箇所。
任意のDHCPアドレスにする。今回は10.30.0.0/16とした。”;”はコメント行。

;server 10.8.0.0 255.255.255.0
server 10.30.0.0 255.255.0.0

こちらはクライアントへのルーティング情報プッシュ。

;push “route 192.168.10.0 255.255.255.0”
;push “route 192.168.20.0 255.255.255.0”
push “route 10.20.0.0 255.255.0.0”

10.20.0.0にアクセスするんなら、OpenVPNのVPNを使えってことですね。

server.confの設定値一覧(上記以外は変更なし):

# grep -v “^#” server.conf | grep -v “^;” | grep -v “^$”
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key # This file should be kept secret
dh dh2048.pem
server 10.30.0.0 255.255.0.0
ifconfig-pool-persist ipp.txt
push “route 10.20.0.0 255.255.0.0”
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3

openVPNサーバのipパケットフォワーディングを有効にし、反映しておく。

# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1 ← 0 を 1 に変更。
# sysctl -p ← 反映

あと、AWSマネジメントコンソールから「送信元/送信先の変更チェック」を無効化します。

 
 
でもってopenVPNサーバを起動しておきます。

# /etc/init.d/openvpn start

次に接続するプライベートサブネット上のサーバを配置します。

同じVPC上のプライベートサブネットを選択してください。

ここポイントです。OpenVPNサーバのクライアントからのトラフィック、すなわちserver.confで設定した「10.30.0.0/16」からのトラフィックを許可するようにしてください。
プライベートサブネット上にあるコイツにアクセスできればこっちのもんです。

サーバ側の最後の設定としてプライベートサブネットのルーティングテーブルをいじります。

server.confで設定した「10.30.0.0/16」へのレスポンス(プライベートサブネットからのレスポンス)をopenVPNサーバに向けるようにしています。
 

Windowsクライアントから接続してみる

ではでは、クライアントから接続してみます。
openVPNクライアントとしてはvpnuxの方が便利ですが
今回はあえてマニアック向けのOpenVPN GUIを使ってみます。
/home/ec2-user/EasyRSA-3.0.1/pki/ca.crt
素っ気ないユーザーインターフェースがまた激渋(しぶ)です。

上記ソフトのインストールが完了したら、OpenVPN GUIを起動してください。
タスクバーにアイコンが現れます。アイコンを右クリックして「設定の編集」を選択してください。
以下のように証明書の設定が書かれていることを確認します。

ca ca.crt
cert client1.crt
key client1.key

また、remote記述子にOpenVPNサーバのインターネット側アドレスを指定します。

remote 54.92.100.54 1194

設定が終わったら保存してください。

openVPNサーバから最初に作成したクライアント用の各種証明書をダウンロードし設置します。
まずはec2-userでダウンロードできるように権限を。

# chown -R ec2-user /home/ec2-user/EasyRSA-3.0.1
MEMO:
TeraTermをお使いの方は、ファイル→SSH SCPで開くダイアログを使うとWinSCP等使わずお手軽にダウンロードできます。ec2-userログイン状態でダウンロードしてください。
Receive側のFrom欄に下記パスを1つずつ入力して「Receive」ボタンを押す。
/home/ec2-user/EasyRSA-3.0.1/pki/issued/client1.crt
/home/ec2-user/EasyRSA-3.0.1/pki/private/client1.key
/home/ec2-user/EasyRSA-3.0.1/pki/ca.crt

ダウンロードしたファイルをOpenVPNクライアントのインストールフォルダへ上書きコピーします。

これで準備が整いました。
それではVPN接続できるかテストしてみましょう。
タスクバーのアイコンを右クリックして「接続」を選択します。
うまくいけば、アイコンが緑色になります。

コマンドプロンプトからipconfigコマンドでVPNに対してIPアドレスが割り振られていることを確認してください。

イーサネット アダプター OpenVPN:
IPv4 アドレス . . . . . . . . . . : 10.30.0.6

route printコマンドでは、10.20.0.0のアドレスに対して「10.30.0.X」をゲートウェイとするようルーティングされていることでしょう。

ネットワーク宛先 ネットマスク ゲートウェイ インターフェイス メトリック
10.20.0.0 255.255.0.0 10.30.0.5 10.30.0.6 20

それでは、プライベートサブネット上のマシンにアクセスしてみましょう。
Teratermで該当のマシンのIPアドレスにSSHアクセスしてみます。
プライベートサブネットは10.20.2.0/24に指定しているのでその範囲のIPアドレスとなっているはずです。

VPN経由でログイン完了っ!

これで、家からでもバンバンお仕事できますね!

補足

OpenVPNクライアントで接続するとネットワークアダプタとして「TAP-Windows Adapter」というのが出来ます。
私の場合以前にOpenVPNを入れた時のものがアダプタを無効にしたまま放置していたため、クライアント接続ができませんでした。もし、接続できない場合はこのあたりも確認してみてください。(^^)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です