ConoHa上にOpenVPNサーバーを立てて、プライベートセグメント上のサーバーにアクセスするという構成を、さくっと作ってみます。
VPSを作る
VPSを2台立てます。一つはVPNサーバーとしてグローバル側/プライベート側両方使い、もう一つはプライベートセグメントに配置します。

VPSを作成してプライベートネットワークに接続する
VPSを2つ作成します。OSはUbuntu14.04を使うとよいでしょう。aptでOpenVPNを簡単にインストールできるからです。そして、オフィシャルのチュートリアルを参考に、VPSをプライベートネットワークに接続します。今回は172.18.0.0/24のプライベートネットワークを作成して使いました。

OpenVPNサーバを立てる
先に書いときますが長いです。
まずVPNサーバにするVPSにSSHでログインします。
OpenVPNのインストールはapt-getするだけです。easy-rsaは認証局(CA)の作成を簡単にしてくれる便利ツールです。
$ apt-get update && apt-get install openvpn easy-rsa
CAのディレクトリを作成して、そのディレクトリに移動します。
make-cadir /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
easy-rsaのパラメータファイルを編集します。
vi /etc/openvpn/easy-rsa/vars
↓このあたりの設定を適当に変更すればOKです。
# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"
パラメータを環境変数に反映させます。
. /etc/openvpn/easy-rsa/vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
clean-allしろと言われるので、その後build-caでcaを作成します。
./clean-all
./build-ca
PKIの初期化
./pkitool --initca
サーバーの鍵ペアの作成。最後にSign the certificate?と聞かれるのでyを選びます。
./build-key-server conoha
DH共通鍵を作成します。
./build-dh
作成した鍵などを/etc/openvpnにコピーします。
cp keys/*.crt keys/*.key keys/dh2048.pem /etc/openvpn
VPNそのものを暗号化するためのTLS鍵を作成します。このファイルも/etc/openvpnにコピーします。
openvpn --genkey --secret ta.key
cp ta.key /etc/openvpn
最後に接続するクライアント毎の鍵ペアを作成します。clientの部分はクライアントの名前で何でも良いです。これも最後にSign the certificate?と聞かれるのでyを選びます。
./build-key client
ネットワークの設定
IPマスカレードの設定を追加しておきます。これによりVPNクライアントからのパケットがeth1に渡されます。
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth1 -j MASQUERADE
忘れないようにカーネルの設定でIPv4のフォワーディングを有効にしましょう。/etc/sysctl.confの以下の行をコメントアウトして、sysctl -pを実行します。
net.ipv4.ip_forward=1
sysctl -p
server.confの編集
次にサーバー側の設定ファイルを編集します。まずサンプルファイルをコピーしてきて展開します。
cd /etc/openvpn
cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/
gunzip server.conf.gz
変更点は以下の通り、意味は頑張って調べよう。
dh dh1024.pem
↓
dh dh2048.pem
server.crt
↓
conoha.crt
server.key
↓
conoha.key
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
↓
push "route 172.18.1.0 255.255.255.0"
;tls-auth ta.key 0 # This file is secret
↓
tls-auth ta.key 0 # This file is secret
OpenVPNサーバの起動
やっと起動です。とりあえず起動するだけなら以下でできます。メッセージも出るので、接続できるまではこの状態でデバッグするのが良さそうです。
openvpn /etc/openvpn/server.conf
serviceコマンドから起動することもできます。運用にはこちらですね。
service openvpn start
クライアントの設定
やっとクライアント側です。長かった・・・('A`)
必要な証明書のコピー
まずVPNサーバーからクライアントに以下のファイルを安全な手段でコピーしてきます。
- /etc/openvpn/ca.crt
- /etc/openvpn/ta.key
- /etc/openvpn/easy-rsa/keys/client.crt
- /etc/openvpn/easy-rsa/keys/client.key
クライアントの設定ファイル
とりあえず以下のファイルをtest.ovpnで保存します。
client
tls-auth ta.key 1
dev tun
proto udp
remote [接続先IPアドレス] [接続先ポート(デフォルトは1194)]
ca ca.crt
cert client.crt
key client.key
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3
以下のコマンドで接続します。「Initialization Sequence Completed」と出れば成功です!
$ sudo openvpn test.vpn
(snip)
Fri Nov 20 13:00:35 2015 Initialization Sequence Completed
疎通確認
OpenVPNは10.8.0.0という仮想ネットワークを作成します。VPNサーバーは10.8.0.1です。このIPアドレスにpingしてみましょう。
$ ping 10.8.0.1
PING 10.8.0.1 (10.8.0.1) 56(84) bytes of data.
64 bytes from 10.8.0.1: icmp_seq=1 ttl=64 time=2.35 ms
64 bytes from 10.8.0.1: icmp_seq=2 ttl=64 time=2.10 ms
VPNに接続すると、ConoHaのローカルネットワークである172.18.1.0/24へのルーティングが自動的に作成されるので、このネットワークにも透過的に接続できます。172.18.1.1がOpenVPNサーバーで、172.18.1.2がプライベートのサーバーです。どちらにもpingが届くことを確認できます。
$ ping 172.18.1.1
PING 172.18.1.1 (172.18.1.1) 56(84) bytes of data.
64 bytes from 172.18.1.1: icmp_seq=1 ttl=64 time=1.94 ms
64 bytes from 172.18.1.1: icmp_seq=2 ttl=64 time=2.14 ms
$ ping 172.18.1.2
PING 172.18.1.2 (172.18.1.2) 56(84) bytes of data.
64 bytes from 172.18.1.2: icmp_seq=1 ttl=63 time=9.31 ms
64 bytes from 172.18.1.2: icmp_seq=2 ttl=63 time=7.83 ms
(参考にしました)
http://qiita.com/mcddx330/items/5814f5c9175fbd517be6