2010年6月2日水曜日

EC2 & L2TP/IPsec & iPhone

スズキです。

EC2でOpenswanが利用できるかの確認もかねて、
iPhoneでVPN接続できる環境を構築してみました。

EC2上には、下記のCentOS(64bit)を利用し、
http://blog.suz-lab.com/2010/04/suz-lab-centos-ami-549.html
IPsecには以下の"Openswan"、
http://www.openswan.org/
L2TP
には以下の"xl2tpd"を利用しています。
http://www.xelerance.com/software/xl2tpd/

まずはインストールです。

"Openswan"のインストールは、下記のとおりです。
(最新ソースからのインストールとしています)
# yum install make gcc gmp-devel bison flex
# curl -OL http://www.openswan.org/download/openswan-2.6.26.tar.gz
# tar xvzf openswan-2.6.26.tar.gz
# make programs install

"xl2tpd"のインストールは、次のように"yum"で行います。
# yum install xl2tpd

次に、Openswanの設定で、設定ファイルは、
"/etc/ipsec.conf"、"/etc/ipsec.secrets"、"/etc/ipsec.d/l2tp-psk.conf"
となり、以下のようにしています。

--------【ipsec.conf】--------
version 2.0
config setup
  nat_traversal=yes
  virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
  oe=off
  protostack=netkey
include /etc/ipsec.d/*.conf
--------
ほぼ、デフォルト通りです。

--------【ipsec.secrets】--------
: PSK "pre-shared-key"
--------
"pre-shared-key"は任意の文字列で、iPhoneにも入力する内容です。

--------【ipsec.conf】--------
conn L2TP-PSK-NAT
  rightsubnet=vhost:%priv
  also=L2TP-PSK-noNAT
conn L2TP-PSK-noNAT
  authby=secret
  pfs=no
  auto=add
  keyingtries=3
  rekey=no
  ikelifetime=8h
  keylife=1h
  type=transport
  left=10.160.x.y
  leftprotoport=17/1701
  right=%any
  rightprotoport=17/0
conn passthrough-for-non-l2tp
  type=passthrough
  left=10.160.x.y
  leftnexthop=10.160.z.1
  right=0.0.0.0
  rightsubnet=0.0.0.0/0
  auto=route
--------
"left"には、EC2に割り振られたプライベートIP、
"leftnexthop"にはそのデフォルトゲートウェイを指定します。

そして、"xl2tpd"の設定は、"/etc/xl2tpd/xl2tpd.conf"、"/etc/ppp/chap-secrets"
"/etc/ppp/options.xl2tpd"で行います。

--------【xl2tpd.conf】--------
[global]
[lns default]
ip range = 192.168.2.128-192.168.2.254
local ip = 192.168.2.1
require chap = yes
refuse pap = yes
require authentication = yes
name = LinuxVPNserver
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
--------
"ip range"はVPNクライアントに割り振るIPアドレスの範囲、
"local ip"はVPNサーバのIPアドレスです。

--------【chap-secrets】--------
user * "password" *
--------
ユーザーとパスワードを定義します。iPhoneの入力項目でもあります。

--------【options.xl2tpd】--------
ipcp-accept-local
ipcp-accept-remote
ms-dns 192.168.2.1
noccp
auth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
lock
proxyarp
connect-delay 5000
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
logfile /var/log/xl2tpd.l2tp-ipsec.log
--------
"ms-dns"でDNSとなるIPアドレスを指定します。

この状態で、"Openswan"と"xl2tpd"を起動すれば、サーバの設定は終了です。
# /etc/init.d/ipsec start
# /etc/init.d/xl2tpd start

最後に、AWSのセキュリティーグループで、
UDPの1701番と500番と4500番を許可すれば、iPhoneからEC2にVPN接続できるようになります。

iPhoneの設定に関しては、
「設定」 → 「一般」 → 「ネットワーク」 → 「VPN」 → 「VPN構成を追加」で、「L2TP」を選択して、

説明: 適当に
サーバ: 上記サーバ(Public IP)
アカウント: user ("chap-secrets"の内容)
RSA SecureID: オフ
パスワード: password ("chap-secrets"の内容)
シークレット: pre-shared-key ("ipsec.secrets"の内容)
すべての信号を送信: オン

と入力しておけば、OKです。

次はNetScreenとつなげないと...

--------
http://www.suz-lab.com

5 コメント:

hiroysato さんのコメント...

とおりすがりのものです。
ブログの記事を参考にさせていただきました。
ありがとうございます。


dpddelay=40
dpdtimeout=130
dpdaction=clear

も入れた方が良いみたいです。
iPhoneは、コネクションを切断したときに、Delete SAのメッセージを送出しないため、一度切断したあと再度接続をしようとするとこちらの環境では接続に失敗しました。

この対策をするのが上記の設定のようです。詳しくはこちらをご覧ください。
参考になれば幸いです。

http://www.jacco2.dds.nl/networking/freeswan-panther.html

suz-lab さんのコメント...

コメントありがとうございます。

僕の方でも試してみて、改めて、フィードバックエントリとさせていただきます。

karai さんのコメント...

ブログ記事を参考にアンドロイド(Xperia)からL2TP+IPSEC+PSKの接続を試してみました。おかげさまで、家のUbuntu環境にアンドロイドから入れるようになりました。

こんどは、同じ環境を、Amazon EC2上のCentOSで作ったのですが、うまくいきません。

tcpdumpしてもUDPのパケットがとどかないのです。

Amazon Security Groupで、以下の設定を加えたのですが、設定が足りないのでしょうか?

Connection Method: All
Protocol: UDP
From Port: 0
To Port: 65535
Source IP: 0.0.0.0/0
(From PortとTo PortにUDP 1701,500,4500を指定してもうまくいかなかったので、UDPを全部あけてしまいました。)

Security Groupの設定内容を教えてください。

suz-lab さんのコメント...

コメントありがとうございます。

こちらでは、
UDP 1701, 500, 4500
を許可していますが、これでうまくいっています。

匿名 さんのコメント...

自宅ルータ->VPNノートPCへフォワードするためのポート番号を教えてもらいました。
まず、Ubuntu11.04ノートのカーネルが対応してないのでserver(実際はpaeバージョンでOK)が必要だと知るのに一番時間がかかってしまいました。
その他の設定は案外すんなりでよかったです。
現在galaxy2からspモード経由で自宅にあるwindowsPCたちと無事ファイル共有しています。