Debian GNU/Linux Wheezy で StrongSwan にてL2TP / IPsec サーバ設定の備忘録

Debian GNU/Linux で L2TP / IPsec を使用する VPN サーバを設定する (サーバ側で NAPT する場合)」の記事を Debian GNU/Linux 7 Wheezy の StrongSwan で設定した場合の自分用備忘録です。

下記の URL を参考にさせて頂き、とりあえず動くレベル (tcpdump で該当通信が平文ではないと言うことを確認をした) の設定を行いました。

参考 URL:
strongSwan どてやの戯れ言/ウェブリブログ
UserDocumentation – strongSwan – strongSwan – IKEv2/IPsec VPN for Linux, Android, FreeBSD, Mac OS X, Windows

■前提

  • 対象サーバは、単一のグローバル IPv4 アドレスを持っている事を想定。
  • VPN 側の仮想的なネットワークは 192.168.64.0/24 を想定。
  • 設定するサーバの VPN 側 IPv4 アドレスは 192.168.64.1 を想定。
  • OS は Debian GNU/Linux 7 Wheezy (AMD64) を利用。

■設定

  • Backports の設定

    色々 Web 上を調べてみたところ、Backports から入れている事例が多かったので、まずはその設定から。/etc/apt/sources.list に下記を追記します。

    deb http://ftp.jp.debian.org/debian/ wheezy-backports main
    deb-src http://ftp.jp.debian.org/debian/ wheezy-backports main
  • 必要なパッケージをインストール

    xl2tpd と、Backports から StrongSwan をそれぞれインストールします。

    # apt-get update
    # apt-get install xl2tpd
    # apt-get -t wheezy-backports install strongswan
  • カーネルパラメータの設定

    IPsec が通るよう、カーネルパラメータを調整します。/etc/sysctl.conf に下記を設定します。

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

    上記の設定を反映します。

    # sysctl -p
  • /etc/ipsec.conf の設定 (IPsec の設定)
    config setup
    	
    
    conn L2TP-NAT
    	rightsubnet=0.0.0.0/0
    	also=L2TP-noNAT
    
    conn L2TP-noNAT
    	forceencaps=yes
    	authby=secret
    	auto=add
    	keyexchange=ikev1
    	keyingtries=3
    	ike=aes128-sha1-modp3072
    	esp=aes128-sha1-modp3072
    	rekey=no
    	ikelifetime=8h
    	lifetime=1h
    	type=transport
    	left=aaa.bbb.ccc.ddd	# 自サーバのグローバル IPv4 アドレスを指定する
    	leftprotoport=17/1701
    	right=%any
    	rightprotoport=17/%any
    	dpddelay=40
    	dpdtimeout=130
    	dpdaction=clear
    
    include /var/lib/strongswan/ipsec.conf.inc

    「left」には、自サーバのグローバル IPv4 アドレスを指定します

  • /etc/ipsec.secrets の設定 (IPsec の事前共有キー)
    include /var/lib/strongswan/ipsec.secrets.inc
    aaa.bbb.ccc.ddd %any : PSK "PRESHAREDKEY"

    ここでも、aaa.bbb.ccc.ddd にはグローバル IPv4 を指定します。
    なお、このファイルは、所有権が root 、パーミッションは 600  で作成します。

  • /etc/strongswan.conf の設定
    charon {
    	load_modular = yes
    	plugins {
    		include strongswan.d/charon/*.conf
    	}
    	dns1=eee.fff.ggg.hhh
    	dns2=vvv.xxx.yyy.zzz
    }

    dns1 と dns2 に、サーバが参照している DNS サーバを指定します。私の場合は、利用している VPS の DNS サーバを指定しました。

  • サービスの起動と自動起動設定
    # /etc/init.d/ipsec start
    # insserv ipsec

    StrongSwan を起動し、またシステム起動時に自動的に実行されるようにします。

  • xl2tpd / iptables の設定

    xl2tpd や iptables の設定は、この記事の「xl2tpd の設定」以下が、「サーバ再起動時に Openswan IPsec を自動起動する」の部分を除いて、基本的にそのまま使えます。(xl2tpd の設定において、ms-dns の部分に指定する IPv4 アドレスは、上記 strongswan.conf の「dns1」、「dns2」で指定したものにします。)

  • 接続状態の確認
    # ipsec status

    上記コマンドをサーバ側で実行すると、現在の IPsec の状態が確認できます。

StrongSwan 自体の設定は、OpenSwan のそれと非常に似ています。(両方とも、FreeS/WAN から派生したプロジェクトだからかな) ただ、微妙にパラメータの名前や取る値が異なる場合があるので、注意が必要と思いました。

接続については、iOS 7.1.2 の iPhone 5s からは出来ました。なお、本当にとりあえず動かしただけですので、誤りがあるようであれば、コメントいただけると嬉しいです。