本エントリは2枚目 SoftLayer Advent Calendar 2014の15日目向けに書いてみました!
※本当はvSphere on SoftLayerをやりたかったんですが、ベアメタルサーバを使う必要があるため、課金が厳しい的判断で今回は諦めました……。
#やりたいこと#
スマホ(iPhone)で特定のユーザしか見えないサイトを作りたい!
しかも、ユーザー以外にはサイトの存在さえ知られたくない!
#前提#
IP-VPNでつなげた状態でないと閲覧できないWebサーバを作成します。
VPNで使用するのは、お手軽に出来そうなL2TP/IPSec。
※iPhoneで使用可能なVPNプロトコルについては、下記のアップルの資料を参照しています。
iOS:サポートしている VPN プロトコル
iPhoneユーザはまずVPN接続を張った上で、Webサーバのアドレス(ローカルアドレス)を叩くことでサイトを閲覧できます。
####VPN-GW####
タイプ:VirtualServer,Vyatta
OS:Vyatta Community Edition for VSI6.6.0
スペック:1CPU/1GBmemory
####Webサーバ####
タイプ:VirtualServer
OS:CentOS6.0-64 LAMP for VSI
スペック:1CPU/1GBmemory
#設定#
##SoftLayer側設定##
####VPN-GW####
eth0がPrivateネットワーク側インターフェース
eth1がPublicネットワーク側インターフェース
#####NAT設定#####
vyatta@VPN-GW01# show nat
source {
rule 1 {
outbound-interface eth0
source {
address 0.0.0.0/0
}
translation {
address [VPN-GWのPrivate IP]
}
}
}
#####VPN設定#####
vyatta@VPN-GW01# show vpn
ipsec {
ipsec-interfaces {
interface eth1
}
nat-networks {
allowed-network 0.0.0.0/0 {
}
}
nat-traversal enable
}
l2tp {
remote-access {
authentication {
local-users {
username test {
password [パスワード]
}
}
mode local
}
client-ip-pool {
start [プライベート側ネットワークの割り当てIPの開始アドレス]
stop [プライベート側ネットワークの割り当てIPの終了アドレス]
}
ipsec-settings {
authentication {
mode pre-shared-secret
pre-shared-secret [プリシェアードキー]
}
}
outside-address [VPN-GWのPublic IP]
}
}
####Webサーバ####
ドキュメントルールに接続確認用のページを作るだけです(その他は、SoftLayerでデプロイされるLAMP構成はデフォルト)
※ドキュメントルートは
#more /etc/httpd/conf/httpd.conf
で確認すると
DocumentRoot "/var/www/html"
という記載があったので、/var/www/htmlの配下にindex.htmlというファイルを作成しました。
##iPhone側設定##
今回はiPhone6
iOS:8.1.2
を使用しています。
4.下記のように設定します。
タイプ:L2TP
説明:任意
サーバ:VPN-GWのIPアドレス(またはDNS名)
アカウント:VPN-GW側で作った接続ユーザ名
パスワード:VPN-GW側で作った接続ユーザ用のパスワード
シークレット:VPN-GW側で設定したプリシェアードキー
5.[VPN設定を保存]して完了!
#接続テスト#
##iPhoneで接続確認##
上記で作ったVPN設定を選択して(※)、接続ボタンをONにします。
※複数設定がある場合は明示的に選択する必要があります。選択された設定にはチェックマークが付いてます。
Webサーバのローカルアドレスに接続してみます。
私が作ったハイセンスなページが見えているので接続成功です!
画面左上でVPN接続が成功していることもわかります。
##VPN-GW側で確認##
VPN-GW側で接続されているか確認します。
vyatta@VPN-GW01:~$ show vpn ipsec state
src [VPN-GWのPublic IP] dst [iPhoneのグローバルIP]
proto esp spi 0x02dacb1b reqid 16504 mode transport
〜中略〜
src [iPhoneのグローバルIP] dst [VPN-GWのPublic IP]
proto esp spi 0xced962b6 reqid 16504 mode transport
replay-window 32
〜中略〜
アクセス中であることがわかります。
#本構成のメリット#
- VPN-GWをVitualServerで作っているのでお安い!
- iPhoneに余計なアプリを入れる必要がない!
- わかりやすいようにWebにしたけど、他のアプリケーション通信もたぶん可能だよ!
#課題#
vyattaがSPOFになっているので冗長化をするにはどうすればよいか?
vyattaをVRRPで冗長化?
別DCに同じ構成を作る?