2012年9月28日金曜日

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

スズキです。

下記でVPC上にOpenVPNサーバを構築し、
適当なクライアント(Mac)からVPN接続ができるようになったので
いよいよ、一番やりたかった、上記のVPN接続で、次のようなVPC上の
プライベートなサブネットに配置されているEC2との通信を行ってみます。



まずは"OpenVPN Server"の設定ですが、このEC2インスタンスは
NATインスタンスである必要があるため下記のように"Souce / Dest Check"を無効にします。




そして下記のように"/etc/sysctl.conf"を設定しIPフォワード機能を有効にします。
# Controls IP packet forwarding
#net.ipv4.ip_forward = 0
net.ipv4.ip_forward = 1
"/etc/sysctl.conf"の反映は次のコマンドで行います。
# sysctl -p


さらにOpenVPNクライアントでVPCのサブネットに関するルーティングを設定するため、
OpenVPNサーバの設定(/etc/openvpn/server.conf)に下記を追加します。
push "route 10.0.0.0 255.255.255.0"
push "route 10.0.2.0 255.255.255.0"
Publicサブネット(10.0.0.0/24)のNATインスタンスとPrivateサブネット(10.0.2.0/24)の
EC2インスタンスにOpenVPNクライアントからアクセスできるように設定しています。

最終的なOpenVPNサーバの設定ファイルは次のようになっています。
# grep -v "^#" /etc/openvpn/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 dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 10.0.0.0 255.255.255.0"
push "route 10.0.2.0 255.255.255.0"
keepalive 10 120
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3


ここまでの設定で、OpenVPNクライアント(10.8.0.6)からOpenVPNサーバ(10.0.0.166)に
通信できるようになります。(OpenVPNサーバの"10.8.0.1"の方は既に通信できています)
$ ping 10.0.0.166
PING 10.0.0.166 (10.0.0.166): 56 data bytes
64 bytes from 10.0.0.166: icmp_seq=0 ttl=64 time=10.960 ms
64 bytes from 10.0.0.166: icmp_seq=1 ttl=64 time=11.723 ms
64 bytes from 10.0.0.166: icmp_seq=2 ttl=64 time=11.373 ms


最後にプライベートサブネット(10.0.2.0/24)と通信するための設定です。

といっても、このサブネットの10.8.0.0/24(OpenVPNクライアント)へのルーティングを
下記のようにNATインスタンス(OpenVPNサーバ)に設定するだけです。



これで準備が完了したので、接続テストをしてみます。

まずは、プライベートサブネットのEC2(10.0.2.54)からOpenVPNで接続したオフィスのMac(10.8.0.6)に通信してみます。
# ping 10.8.0.6
PING 10.8.0.6 (10.8.0.6) 56(84) bytes of data.
64 bytes from 10.8.0.6: icmp_seq=1 ttl=63 time=17.5 ms
64 bytes from 10.8.0.6: icmp_seq=2 ttl=63 time=17.3 ms
64 bytes from 10.8.0.6: icmp_seq=3 ttl=63 time=18.3 ms
無事、通信できました。

次は、オフィスのMac(10.8.0.6)からEC2(10.0.2)
$ ping 10.0.2.54
PING 10.0.2.54 (10.0.2.54): 56 data bytes
64 bytes from 10.0.2.54: icmp_seq=0 ttl=63 time=7.907 ms
64 bytes from 10.0.2.54: icmp_seq=1 ttl=63 time=14.115 ms
64 bytes from 10.0.2.54: icmp_seq=2 ttl=63 time=13.294 ms

ちなみにオフィスのMacのルーティングは下記の通りです。
$ netstat -nr
Routing tables

Internet:
Destination   Gateway            Flags    Refs    Use  Netif  Expire
default       10.33.22.253       UGSc       27      0    en2
10/24         10.8.0.5           UGSc        0      0   tun0
10.0.2/24     10.8.0.5           UGSc        1      0   tun0
10.8.0.1/32   10.8.0.5           UGSc        0      0   tun0
10.8.0.5      10.8.0.6           UH          4      0   tun0
10.33.22/24   link#7             UCS         2      0    en2
10.33.22.53   127.0.0.1          UHS         0      0    lo0
10.33.22.253  0:9:41:fa:7a:35    UHLWIir    28      0    en2    1097
10.33.22.255  ff:ff:ff:ff:ff:ff  UHLWbI      0      1    en2
127           127.0.0.1          UCS         0      0    lo0
127.0.0.1     127.0.0.1          UH          6  20896    lo0
169.254       link#7             UCS         0      0    en2
ちゃんと、OpenVPNサーバからプッシュしたルーティング(10.0.0.0/24と10.0.2.0/24)が
設定されていることがわかります。

そしてCDPネタへ...
--------
http://www.suz-lab.com

0 コメント: