iOS で L2TP over IPsec ソリューション

IPsec – Openswan

Openswan は Cent OS 5.5 の標準レポジトリにパッケージがありますが、Version 2.6.21 ベースです。

ところが、このバージョンの Openswan の NAT-T(NATトラバーサル)にはバグがあるようで、NAT-T により IPsec の ESP プロトコルが over UDP でカプセリングされて IPsec が確立しても、その後の L2TP パケットは、そのまま 通そうとしてしまいます。 つまり、IPsec 接続しかできず、L2TP によるトンネリングが行えません。

xl2tpd 側で回避できればいいのですが、回避策は無いようでした。

Cent OS 6 がリリースされれば RHEL6 の Openswan は 2.6.24 ベースみたいなのでバグが解消されてると思いますが、Cent OS 5.x 系ではソースから入れるのが無難なようです。

 

tar ボールからのインストール

  1. VPS にログインする。
  2. 事前に Openswan の make に必要なライブラリをインストーする
    # yum install gmp-devel
    • 当然、gcc や glibc-devel は入っている前提で書いてます。
  3. http://www.openswan.org/code/ より最新版の Openswan の tar.gz を取得して、make する
    $ wget http://www.openswan.org/download/openswan-2.6.32.tar.gz
    $ tar xzvf ./openswan-2.6.32.tar.gz
    $ cd openswan-2.6.32
    $ make programs
    # make install
    • make install で、/etc/ipsec.conf や /etc/ipsec.d/ 配下にサンプルなどが置かれます。
  4. L2TP/IPsec 設定のサンプルをコピーする
    # cp /etc/ipsec.d/examples/l2tp-psk.conf /etc/ipsec.d
  5. サービス登録する。
    # chkconfig --add ipsec

 

標準リポジトリからのインストール

※CentOS 5.x の Openswan Version 2.6.21 では、NAT-T による L2TP/IPsec が行えませんので、
残念ながら tar ボールからインストールしてください。

 

  1. VPS にログインする。
  2. Openswan をインストールする。
    # yum -y install openswan

 

設定

IPsec – Openswan設定
  1. Openswan 自身に関する設定を行う。
    # vi /etc/ipsec.conf
    
    config setup
        protostack=netkey
        virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
        listen=AAA.BBB.CCC.DDD
        include /etc/ipsec.d/*.conf
    • protostack を auto にした場合は、netkey, klips, mast の中で使えるコードを調べてくれます。
    • virtual_private は NATトラバーサル用の設定です。接続元の NAT 配下の IPレンジが含まれるようにします。
    • listenは、 LISTEN する IPアドレスを指定する場合のみ、必要です。VPS のグローバル IP アドレスを指定します。
    • include は、追加の設定を読み込むオプションです。
  2. L2TP/IPsec に関する設定を行う。標準リポジトリからインストールした場合は、/etc/ipsec.d/l2tp-psk.conf が無いので作成する。
    # vi /etc/ipsec.d/l2tp-psk.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=%defaultroute
        leftprotoport=17/1701
        right=%any
        rightprotoport=17/%any
    • サンプルをコピーしている場合は、以下の部分を変更する。
      # vi /etc/ipsec.d/l2tp-psk.conf
      
      left=%defaultroute
      rightprotoport=17/%any
      
      conn passthrough-for-non-l2tp 以下を全て消すか、コメントアウトする。
    • type は L2TP/IPsec するには、transport にする必要があります。
    • left は VPS 自身の IP アドレスを設定しますが、%defaultroute にすると、デフォルト ゲートウェイとなるインターフェースの IPアドレスに自動的に設定されます。
    • leftprotoport は IPsec 上に流すプロトコルを指定します。L2TPパケットを流して欲しいので、L2TP が使用する 1701/udp を指定します。17/1701 または udp/l2tp と書けば OK です。(17は UDPのプロトコル番号)
    • right は、接続元ルータ等のグローバル IP アドレスですが、制限しない場合は、%any とします。
    • rightprotoport は、leftprotoportと同じで IPsec 上に流す他のプロトコルを指定します。なので、17/1701 で良いのですが、端末が VPN接続できないとか、接続しても通信が行えないような場合は、17/%any にしてみてください。
      なお、rightprotoport=17/0 は1台しか VPN接続しない場合は設定できますが、それ以外には使えません。(認証は何台でも可能ですが、実際の通信は1台に限られます)
  3. 「事前共有キー」を設定する。事前共有キーは、認証したい VPNサーバと端末だけが知っている鍵のことで、IPsec の最初のネゴシエーションで使われる。
    # vi /etc/ipsec.secrets
    
    : PSK "Preshared key authentication"
    • この例の場合は、「Preshared key authentication」が、L2TP/IPsec 時の事前共有キーとなります。

 

IPsec – Cent OS 設定

今回の構成では、VPS にグローバル IPアドレス以外の別のネットワークが出来ています。(インターフェースは、pppX1

そのため、ppp インターフェースから他のインターフェースへ通信ができる(ルーティング)ように、一部の CentOS 自体の設定を変更します。

# vi /etc/sysctl.conf

net.ipv4.ip_forward = 1	# = 0 を 1 にします。

また、IPsec Kernel コードとして NETKEY を使う場合、以下の設定も必要になります。全てのインターフェースに対して行います。 (/etc/sysctl.conf の最後にでも追加してください)

# vi /etc/sysctl.conf

net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.lo.accept_redirects = 0
net.ipv4.conf.eth0.accept_redirects = 0

設定を有効化します。

# sysctl -p

IPsec の設定の確認は以下のコマンドで行えます。

# ipsec verify

 

自動起動設定
  1. サービス登録して、起動します。
    # chkconfig ipsec on
    # service ipsec start

  1. 1接続のみなら ppp0、以降 ppp1, ppp2 と増えていく。 []
前のページへ 次ページへ

 

関連するコンテンツ


コメントを残す


メモ - 以下の HTML タグと属性が利用できます。
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>