racoon でらくらく iPhone VPN

BSD 系 OS や GNU/Linux 上の racoon を利用して、iPhone 等から IPSec VPN で接続可能にする設定を試行錯誤の末に発見したので公開してみます。(もしうまく接続できなければコメントで質問してください。)

[訂正] 初出時の内容に誤りもしくは不適切な部分がありましたので該当部分を訂正しました。

サーバー側の設定

まず racoon.conf の remote ノード指定を次のように書きます。(重要部分は太字で強調してあります。またホスト名や IP アドレスは記述例ですのでお使いの環境に合わせて書き換えてください。)

remote "server"anonymous {
    exchange_mode main, aggressive;
    my_identifier fqdn "server.example.com";
    mode_cfg on;
    passive on;
    generate_policy on;
    nat_traversal on;
    proposal {
        encryption_algorithm aes;
        hash_algorithm sha1;
        authentication_method xauth_psk_server;
        dh_group modp1024;
    }
}

次に sainfo 指定を次のように書きます。(pfs_group はお好みで追加してください。筆者は pfs_group modp1024 しか試していません。PFS は iOS では使えませんでした。)

sainfo anonymous {
    encryption_algorithm aes;
    authentication_algorithm hmac_sha1;
    compression_algorithm deflate;
}

最後に mode_cfg を次のように書きます。(auth_source 等はお好みで追加してください。筆者は auth_source pam しか試していません。)

mode_cfg {
    network4 198.51.100.0;
    netmask4 255.255.255.0;
    dns4 198.18.0.1;
    split_network include 198.51.100.0/24;
    default_domain "remote.example.com";
}

そしてもう一つ、psk.txt に次の行を追加してください。

グループ名 秘密鍵

例えば次のような記述になります。

iphone opensesame

iOS 側の設定

iOS の VPN 構成で IPSec を選択して各項目を次のように設定します。

  • 説明: 適当に決めてください。
  • サーバ: racoon を実行しているサーバーのホスト名を指定します。動的 DNS を利用している場合は、そのホスト名でもとりあえず OK です。
  • アカウント: サーバー上の自分のアカウント名を指定します。
  • パスワード: 空欄のままで OK です。(iOS の不具合なのか、ここで指定しても接続ごとに入力を要求されます。)
  • 証明書を試用: オフにします。
  • グループ名: psk.txt に追加した行のグループ名を指定します。
  • シークレット: psk.txt に追加した行の秘密鍵を指定します。

以上を設定したら保存して設定完了です。