BlackBerry用にIKEv2なVPN環境を作る

2015年4月11日

BlackBerry OS10はVPNに使える方式が、

  • Check Point Software Technologies VPN-1
  • Cisco VPN 3000 Concentrator
  • Cisco Secure PIX Firewall VPN
  • Cisco IOS (Easy VPN Server 搭載)
  • Cisco ASA
  • Cisco AnyConnect
  • Juniper IPsec VPN(SRXシリーズ)
  • Juniper IPSec VPN(NetScreenシリーズ)
  • Juniper SSL VPN(MAG/SAシリーズ)
  • Microsoft IKEv2 VPNサーバー
  • 汎用IKEv2 VPN Server

と、法人向けの接続方式が豊富な反面、割と一般向けに広まっているL2TP/IPsecが使えません。
私の場合は、お手軽なニフティのスマートサーブを利用して自宅へVPN接続できるようにしています。
自宅LAN内のLinuxサーバー上のrep2で2chを読み書きしているので、VPN接続を便利に使っていました。
せっかくのQWERTY端末でこういった読み書きが出てくるコンテンツを使えないのも残念なので、汎用IKEv2 VPN Serverを構築してみました。
サーバーに使ったのは上記のLinuxサーバーでUbuntu 14.04をインストールしてあるので、strongSwanをaptでインストールします。
設定にはほぼこちらを参考にさせていただきました、

基本の設定はほぼコピペですが幾つか変更をしています。
ちょっとはまった所は、ipsec.confの

leftid=yourdomain.dyndns.org

の部分。
FQDNだけで良いと思っていたのですが、

leftid="C=US, O=xxx, CN=yourdomain.dyndns.org"

と使用しているサーバー証明書のDNをフルに指定してやらないと、strongSwan側は接続完了としているのに、BlackBerry Q5は認証失敗としてエラーになってしまってました。

あとは、

rightauth2=eap-mschapv2

は証明書の認証が通っているにもかかわらず、エラーになるようだったので今回のBlackBerry専用の設定には不要なため削除しています。
Firewallの設定はこのサーバーは既にFirewallの後ろにいるので無設定で、必要なNAT設定は

leftfirewall=yes

の部分でstrongSwanがiptablesを適切に設定してくれます。
strongSwanの設定が終わったら、あとはFirewall側でLinuxサーバーに対してUDP 500と4500を転送してやります。
あとは手順の中で作成したclientCert.p12をBlackBerryにインポートしたあと、BlackBerryの設定でVPNの設定を行います。

  • サーバーアドレス: (ダイナミックDNSで取得したFQDN)
  • ゲートウェイタイプ: 汎用IKEv2 VPN Server
  • 認証の種類: PKI
  • 認証IDの種類: ID証明書の識別名
  • クライアント証明書: (作成した証明書の名前)
  • ゲートウェイ認証タイプ: PKI
  • ゲートウェイ認証IDの種類: ID証明書の識別名
  • 信頼されない証明書を許可: プロンプト
  • ゲートウェイCA証明書: (作成した証明書のCA名)
  • Perfect Forward Secrecy: ON
  • IPを自動的に決定: ON
  • DNSを自動的に決定: ON
  • アルゴリズムを自動的に決定: ON

という設定でOKでした。
以下設定ファイル群

ipsec.conf


config setup
        strictcrlpolicy=no

conn %default
        ikelifetime=24h
        keylife=24h
        keyexchange=ikev2
        dpdaction=clear
        dpdtimeout=3600s
        dpddelay=3600s
        compress=yes

conn roadwarrior
        left=%any
        leftsubnet=0.0.0.0/0
        leftauth=pubkey
        leftcert=serverCert.pem
        leftid="C=JP, O=Tokyo, CN=(FQDN)"
        leftfirewall=yes
        right=%any
        rightsourceip=%dhcp
        rightauth=pubkey
        rightcert=clientCert.pem
        rightfirewall=yes
        auto=add
        esp=aes-aes256-sha-modp1024,aes256-sha512-modp4096
        ike=aes-aes256-sha-modp1024,aes256-sha512-modp4096

strongswan.conf


charon {
        threads = 16
        dns1 = 8.8.8.8
        dns2 = 8.8.4.4
        plugins {
                dhcp {
                        server = 192.168.1.2
                }
        }
}

pluto {
}

libstrongswan {
        crypto_test {
                on_add = yes
        }
}

ipsec.secret


# This file holds shared secrets or RSA private keys for authentication.

# RSA private key for this host, authenticating it to any other host
# which knows the public part.  Suitable public keys, for ipsec.conf, DNS,
# or configuration of other implementations, can be extracted conveniently
# with "ipsec showhostkey".
 : RSA serverKey.pem

LinuxBlackBerry,Linux,strongSwan

Posted by ryu