VPNサーバ on windows server 2012 R2

windows serverでVPNサーバを構築した際のメモ。

iOS, android->windowsは苦労せずに接続できたが、CentOS->windowsは設定が厄介。 windows serverでのVPNサーバ構成自体はサーバーマネージャの役割と機能の追加から出来るし、記事も複数あるので割愛してはまったことだけメモしておく。

環境

VPNサーバ: windows server 2012 R2 VPNクライアント: iOS, android, CentOS7(libreswan)

はまったこと(すべてCentOS->windows

  • エラーメッセージのログ

CentOSIPSec関連のログって /var/log/pluto.logを指定していたからすべてここに出るかと思っていたら、 接続関係のエラーは/var/log/messageに出力されていた。 これに気づくまで、ログの出力少なすぎだと思っていた。 ログの出力ファイルの確認は大事。

  • no prosal chosen

使用可能な暗号方式がマッチせずにno proposal chosenになっていた。 暗号方式の調査はike-scanを用いて確認すればいい。

CentOS7ではyumでインストール出来ないためgithubからソースを入手する。

今回は一時的に使えればいいので./configureとmakeだけして、インストールはしなかった。

使い方

ike-scan <VPNサーバのIPアドレス>

コマンドの出力結果を元にipsecのコンフィグファイルに

        ike=3des-sha1;modp1024
        esp=3des-sha1;modp1024

を追加する。

なお、ipsecサービスが動いているとike-scanがポートを使用できないため、サービスの停止が必要。

  • libreswanとstrongswanは別物

調べているとstrongswanとかopenswanとかの記事が見つかって設定参考にしたりしたけど、 設定の記述方法が微妙に異なっているので動作しなかったり、変なログが出ている場合は 疑った方がいい。

例えば上記のikeやespの暗号化の指定はstringswanだと

        ike=3des-sha1-modp1024
        esp=3des-sha1-modp1024

になる(sha1とmodp1024の間が"-"になる)

  • refuse chap

IPSecがつながったと思ったら、chapがrefuseされてL2TPの接続が確立できなかった。

/etc/ppp以下のコンフィグファイルに

refuse-pap
refuse-eap
refuse-chap
refuse-mschap
require-mppe

を追記して解消。

感想

windows<->CentOSの接続をやってみると、IPSecの設定が難しいと言われるのが少しわかった気がする。 パラメータが多すぎて対向で合わせるのが大変なのでike-scanとかをうまく使う必要がある。 一方でandroidとかiOSはすんなりつながったので、簡易につながるのを意識して実装してるんですね。