Skip to content

CentOS 6.x で StrongSwan を使った L2TP over IPsec 環境を作る

Openswan(IPSec VPN)がiPhoneから繋がらなくなった! 等に記載がありますが、CentOS 6.x 系では OpenSwan に問題があり、iPhone や OS X から IPsec 出来なくなっているそうです(出来なくなっていました)。そこで、今回は OpenSwan では無く、StrongSwan で L2TP over IPsec 環境を作ってみます。

今回の環境

以下の環境で作業を行いました。

  • さくら VPS
  • さくら VPS の標準 OS(※ 現時点では CentOS 6.6 x86_64)
  • ファイアウォール(iptables)は「全通し」
  • SELinux は無効化

パラメータ

主なパラメータは以下の通りです。

項目
グローバルアドレス AAA.BBB.CCC.DDD
PSK PSK
IPsec クライアントに割り当てるアドレス範囲 172.16.1.100 〜 172.16.1.200
IPsec サーバのアドレス 172.16.1.1

L2TP 認証用のユーザは以下の通りです。2 ユーザ作成しました。

ユーザ名 パスワード
user1 secret1
user2 secret2

実際のインターネット環境で設定する際は「もっと複雑なパスワードを設定する」「iptables で必要なポートだけを許可する」等、セキュリティに配慮します。

パッケージのインストール

StrongSwan と xl2tpd をインストールします。

1
yum -y install strongswan xl2tpd

設定ファイルの修正

/etc/strongswan/ipsec.conf

IPsec に関連する設定を行います。今回は以下のように設定しました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
config setup

conn %default
        ikelifetime=60m
        keylife=20m
        rekeymargin=3m
        keyingtries=1

conn l2tp
        keyexchange=ikev1
        left=AAA.BBB.CCC.DDD    # IPSec を Listen するグローバルアドレスを指定
        leftsubnet=0.0.0.0/0
        leftprotoport=17/1701
        authby=secret
        leftfirewall=no
        right=%any
        rightprotoport=17/%any
        type=transport
        auto=add

/etc/strongswan/ipsec.secrets

IPsec で利用する事前共有鍵(PSK)を設定します。

1
2
# ipsec.secrets - strongSwan IPsec secrets file
: PSK "PSK"

/etc/xl2tpd/xl2tpd.conf

L2TP に関連する設定を行います。今回は以下のように設定しました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[global]
listen-addr = AAA.BBB.CCC.DDD

[lns default]
ip range = 172.16.1.100-172.16.1.200
local ip = 172.16.1.1
assign ip = yes
;refuse chap = yes
;refuse pap = yes
require authentication = yes
name = LinuxVPNserver
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

/etc/ppp/options.xl2tpd

PPP に関連する設定を行います。今回は以下のように設定しました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
ipcp-accept-local
ipcp-accept-remote
ms-dns  8.8.8.8
ms-dns  8.8.4.4
# noccp
auth
crtscts
idle 1800
mtu 1410
mru 1410
nodefaultroute
debug
lock
proxyarp
connect-delay 5000

name xl2tpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
persist
logfile /var/log/xl2tpd.log

/etc/ppp/chap-secrets

1
2
3
4
# Secrets for authentication using CHAP
# client   server    secret     IP addresses
"user1"    "xl2tpd"  "secret1"  *
"user2"    "xl2tpd"  "secret2"  *

/etc/sysctl.conf

カーネルパラメータを修正します。

1
2
3
4
5
6
7
8
9
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

完了したら修正内容を反映しておきます。

1
sysctl -p

デーモンの再起動(起動)

デーモンを再起動(場合によっては起動)します。

1
2
3
4
5
6
7
8
# service strongswan restart
Stopping strongswan: Stopping strongSwan IPsec...

Starting strongswan: Starting strongSwan 5.2.0 IPsec [starter]...
                                                           [  OK  ]
# service xl2tpd restart
Stopping xl2tpd:                                           [  OK  ]
Starting xl2tpd:                                           [  OK  ]

VPN 接続テスト

あとは OS X から VPN 接続をテストするだけです。問題がある場合は以下のログ等を確認します。

  • /var/log/secure
  • /var/log/xl2tpd.log