Shrewsoft VPN clientをMacでQTのGUIなしで動かす話

要約

Shrewsoft VPN clientはLinux/BSD/Mac向けのソースが公開されてるので、自分でコンパイルすればQtなしで動くバイナリが作れる。その場合はQtないから当然CUIなので、ターミナルから使うよ。

背景

無料のVPNクライアントとしてたぶん人気だと思うShrewsoft VPN Client。Macで動かしたいひとはたぶんこの辺りをみて、QtだのTUN/TAP driverだのいろいろ入れて、ようやくdmgからインストールして動かしてると思う。

http://ulaptech.blogspot.jp/2012/11/shrew-soft-vpn-client-for-mac-os-x.html http://blog.livedoor.jp/kerorou/archives/28739240.html

でも、僕はQtとかあまり使わないもの/詳しくないものをインストールしたくなかったのでいろいろ見てたら、Linux/BSD版もあったので、そっちで動かせるんじゃないかと試行錯誤してたら、うまいこと動いてくれたので記録を残しておく。

MacにビルトインのVPNもあるんだからそれを使うのが一番綺麗なんだけど、ビルトインVPNクライアントからの接続方法がわからんかった。。。

ちなみにVPNの対向先はJuniper SSG5。

手順

  1. Cmakeをインストール
  2. ソースをダウンロード & ビルド
  3. ファイアウォールでikedを許可
  4. 接続

cmakeをインストール

ikeはビルドするのにCmakeを使ってるみたいなので、事前にインストールする。手軽にhomebrew使った。

sudo brew install cmake

ソースをダウンロード & ビルド

https://www.shrew.net/download/ike からStableの最新をダウンロード。 展開したら、以下のコマンドを実行していく。インストール先は /usr/local/ にしたけど、

cd Download/ike
cmake -DNATT=YES -DCMAKE_INSTALL_PREFIX=/usr/local/

ファイアウォールでikedを許可

Macのビルトインファイアウォールが有効になっている場合、トンネル接続時のnegotiationがタイムアウトで失敗する。 上記の通りにインストールすると、/usr/local/sbin/ikedが存在すると思うので、これをファイアウォールの許可リストに入れる。

と思ったのだけど、/usr以下はFinderからはそのままでは見えないのね ( ;゚皿゚)ノシΣ フィンギィィーーッ!!! ってなりかけたけど、一時的に移動 -> フォルダへ移動/usrを開いて、サイドバーに追加して事なきを得た。

http://d.hatena.ne.jp/testnoda/20120515/1337069061

問題と解決

問題と解決 1: failed to attach to key daemon

$ ikec -r 'hogehoge.vpn' -a
ii : ## : VPN Connect, ver 2.2.0
## : Copyright 2012 Shrew Soft Inc.
## : press the <h> key for help
>> : config loaded for site 'hogehoge.vpn'
!! : failed to attach to key daemon

ikedを再起動しよう!!!

問題と解決 2: peer config failed

$ ikec -r 'hogehoge.vpn' -a
ii : ## : VPN Connect, ver 2.2.0
## : Copyright 2012 Shrew Soft Inc.
## : press the <h> key for help
>> : config loaded for site 'hogehoge.vpn'
>> : attached to key daemon ...
!! : peer config failed
>> : detached from key daemon

クライアントとデーモンのバージョンが違うとこれがでる。以前にdmgで提供されているパッケージをインストールしていませんか? その場合、/usr/bin/ikecというバイナリが置いてあるのでこいつが邪魔をしてます。上記の通りにインストールしてあれば、正しいikec/usr/local/bin/ikecにあると思うので、/usr/bin/ikecは消しましょう。

どうでもいいけど、/usr/bin/ikecはよくわからんライブラリにリンクが張られているな。なんだろ。

$ otool -L /usr/bin/ikec
/usr/bin/ikec:
    /Users/mgrooms/ike/head/source/libike/ShrewSoftIke.framework/Versions/2.2.0/ShrewSoftIke (compatibility version 2.2.0, current version 2.2.0)
    /Users/mgrooms/ike/head/source/libidb/ShrewSoftIdb.framework/Versions/2.2.0/ShrewSoftIdb (compatibility version 2.2.0, current version 2.2.0)
    /Users/mgrooms/ike/head/source/libith/ShrewSoftIth.framework/Versions/2.2.0/ShrewSoftIth (compatibility version 2.2.0, current version 2.2.0)
    /Users/mgrooms/ike/head/source/liblog/ShrewSoftLog.framework/Versions/2.2.0/ShrewSoftLog (compatibility version 2.2.0, current version 2.2.0)
    /usr/lib/libcrypto.0.9.8.dylib (compatibility version 0.9.8, current version 0.9.8)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 123.0.0)
    /usr/lib/libedit.2.dylib (compatibility version 2.0.0, current version 2.11.0)
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)

問題と解決 3: negotiation timout occurred

ii : ## : VPN Connect, ver 2.2.1
## : Copyright 2013 Shrew Soft Inc.
## : press the <h> key for help
>> : config loaded for site 'hogehoge.vpn'
>> : attached to key daemon ...
>> : peer configured
>> : iskamp proposal configured
>> : esp proposal configured
>> : client configured
>> : local id configured
>> : remote id configured
>> : pre-shared key configured
ii : bringing up tunnel ...
!! : negotiation timout occurred
ii : tunnel disabled
>> : detached from key daemon

ファイアウォールが閉じてると思う。上記の手順でikedを許可しよう。 ちなみにこのケースの場合は/var/log/iked.logにこんなログが出てるはず。

13/09/05 12:48:04 DB : phase1 resend event scheduled ( ref count = 2 )
13/09/05 12:48:14 -> : resend 1 phase1 packet(s) [0/2] 192.168.x.x:500 -> w.x.y.z:500
13/09/05 12:48:24 -> : resend 1 phase1 packet(s) [1/2] 192.168.x.x:500 -> w.x.y.z:500
13/09/05 12:48:34 -> : resend 1 phase1 packet(s) [2/2] 192.168.x.x:500 -> w.x.y.z:500
13/09/05 12:48:44 ii : resend limit exceeded for phase1 exchange
13/09/05 12:48:44 ii : phase1 removal before expire time
13/09/05 12:48:44 DB : phase1 deleted ( obj count = 0 )
13/09/05 12:48:44 DB : policy not found
13/09/05 12:48:44 DB : policy not found
13/09/05 12:48:44 DB : policy not found
13/09/05 12:48:44 DB : policy not found
13/09/05 12:48:44 DB : policy not found
13/09/05 12:48:44 DB : policy not found
13/09/05 12:48:44 DB : removing tunnel config references
13/09/05 12:48:44 DB : removing tunnel phase2 references
13/09/05 12:48:44 DB : removing tunnel phase1 references

それでもうまくいかないときは

log_level debug;

にして、ikedのログをみるのがいいです。

https://www.shrew.net/support/VPN_Bug_Report_Unix