Archive Calculate
IPSEC IKEv2 による VPN 構築方法メモ for mac/windows/android

IPSEC IKEv2 による VPN 構築方法メモ for mac/windows/android

2024-11-22   2019 / 06 / 02 , LAST updated 2023 / 10 / 10 - moriya -  ~7 Minutes 以下のような記事を書いたものの、現在は、 raspberry pi 4 で openvpn サーバを構築 に書いた構成に落ち着いている。ただし、スマ

  2019 / 06 / 02 , LAST updated 2023 / 10 / 10 – moriya –  ~7 Minutes

以下のような記事を書いたものの、現在は、
raspberry pi 4 で openvpn サーバを構築

に書いた構成に落ち着いている。ただし、スマートフォンからはアクセスしておらず、専ら PC からのアクセスである。

概要

a) 社外から社内(もしくは学外から学内)のネットワークに接続したり、b) インターネット上の特定のサーバから接続したように見せかけるのに VPN が利用される。

私の場合、リモートでメンテナンスや開発をすることが多い。セキュリティの関係で、接続が特定の IP アドレスからしか許可されていない場合がほとんどだ。

ssh で ポート フォワード し て も よい の だ が 、 毎度 、 ssh 接続 を し たり 、 ssh が 切れる た 場合 に つなぐ なおす たり する の も 面倒 に なっ て き た 。 また 、 開発 中 の web サイト が 特定 の IP アドレス から しか 接続 を 許可 さ れ て い ない 場合 に 、 スマートフォン で 確認 する ため に は 、 ある 程度 の 範囲 の IP アドレス から 接続 を 許可 し て やる ない と いける ない 。 開発 中 な の で 、 バグ が ある だろう し 、 ちょっと 恐い 。 テスト 中 の サイト が 見える 可能 性 が ある と いう の も どう か と 思う 。

サーバ 、 クライアント 双方 で インストール が 最小 と なる 組み合わせ を 模索 し た ところ 、 サーバ に Linux + strongswan を 使う 、 ikev 2 + 証明 書 で 設定 する の が 最も 簡単 かつ 安全 で 、 色々 な 端末 から の 接続 が 可能 に なる 組み合わせ で は ない か と 思う 。

android に限り、strongSwan VPN Client をインストールする必要があるが、mac(High Sierra)で/windows(Windows 10) からは、他にインストールするものも不要で、システム環境設定のメニューから VPN 接続を追加するだけでよかった。

VPN とは

VPN と は 、 バーチャル プライベート ネットワーク ( Virtual private network ) の 略 で ある 。 物理 的 に は 存在 し ない が あたかも 存在 し て いる か の よう に 見える ( Virtual ) 、 非 公式 ( private ) な ネットワーク と いう こと だろう か 。

ネットワーク上(例えばイーサネット接続や WiFi接続)など既存のネットワーク接続の上に構築される。外から見えないので、現実世界との類似性からトンネルと呼ばれたりする。

VPN の種類

OS のメニューから選べる VPN の種類としては、以下のようなものがある。

  • PPTP
  • L2TP/IPSEC
  • SSTP (Secure Socket Tunneling Protocol)
  • IKEv2

この他にアプリ(ネットワークドライバを含む)をインストールすれば OpenVPN などの SSL VPN を利用することができる。

違い に つい て は 、

などがわかりやすい。IPSEC とは、IP security の略で、IP レベルでセキュリティを確保するためのプロトコルである。
RFC6071
 
として公開されている。

サーバ(Linux)、クライアント(Windows / Mac / iPhone / Android)への設定・インストールを最小にしたいと考えたのであるが、この条件に合うのは、IKEv2 による VPN 接続であった。ただし、Android にはアプリのインストールが必要。

Windows / macOS / Android で 共通 に 使える もの は 、 l 2 TP / IPsec は 、 サーバ に l 2 TP サーバ と IPsec の 鍵 交換 サーバ を 、 OPENVPN は クライアント PC / スマートフォン に SSL VPN 対応 の ソフト を インストール する 必要 is ある が ある 。

そのため、IKEv2 が最善と考えた。

l 2 TP / IPsec VS ikev 2

L2TP/IPSECは、L2TP にはセキュリティが、IPSEC には認証が欠けているためそれらを組み合わせて使う。L2TP と IPSEC の両プロトコルに対してファイアウォール設定をする必要があり、かなり設定の難易度が高い。

IKEv2(+IPSEC) では認証、NAT などが追加されており、IKEv2 で使う UDP 500 番、4500 番のポートに対してのみファイアウォール設定すればよい。

SSL VPN vs IKEv2

SSL VPN で ある OPENVPN と 比較 する と 、 OPENVPN は 強力 な セキュリティ と 、 何 か 一 つ TCP が 通る ば トンネリング できる の が すばらしい ( ikev 2 は UDP 500 番 ポート が 必要 ) が 、 ネットワーク ドライバ を インストール する 必要 が ある の で やっかい だ 。 OS の バージョン アップ に 対応 できる か どう か を 考える 必要 is ある が ある 。

一方 で 、 ikev 2 は 、 IPsec な の で 、 最近 の OS で あれ ば 、 カーネル レベル で IPsec を サポート し て いる で ある 。 ネットワーク ドライバ を 入れる なく て いい の が すばらしい と 思う 。 ( 私 の 理解 で は 、 ikev 2 デーモン is 行う が 、 IPsec 設定 を 行う 。 )

IKEv2 による VPN 環境構築の方法を以降に書いておく。

VPN サーバの環境

さくら インターネット vps + CENTOS 7 。 さくら インターネット の 場合 は 、 インタフェース に グローバル IP アドレス が 直接 割る 当てる られ て いる 。 AWS is 振ら は プライベート IP アドレス is 振ら が 割る 振る れ て いる 。 ( NAT ? ) 面倒 を 避ける ため 、 さくら インターネット の vps を 使用 。

os インストール後、strongswan をインストールする。


(# yum install epel-release)
# yum install strongswan

設定ファイル

サーバ側

/ etc / strongswan / IPsec . conf

conn ikev2
        keyexchange=ikev2
        ike=aes256-sha256-modp2048,aes256-sha256-modp1024,aes128-sha256-modp3072,aes256-sha1-modp1024!

        dpdaction=clear
        dpddelay=300s
        rekey=no

        left=%any
        leftsubnet=0.0.0.0/0
        leftauth=pubkey
        leftcert=cert_server.der
        leftsendcert=always
        leftid=@vpn.runserver.jp
        right=%any
        rightsourceip=10.101.1.0/24
        #rightauth=eap-mschapv2 # ユーザー名、パスワードを使う場合
        rightauth=eap-tls # 証明書を使う場合
        rightdns=8.8.8.8
        eap_identity=%any
        auto=add

(leftid のところは適当に自分のサイト用のものを設定。)

以下のファイルを作る。

  • /etc/strongswan/ipsec.d/cacerts/ca_cert.der
  • / etc / strongswan / IPsec . d / certs / cert _ Server . Der
  • / etc / strongswan / IPsec . d / private / Key _ Server . Der

作り方は、
Setting-up a Simple CA Using the strongSwan PKI Tool
 
を参考に。ipsec コマンドは strongswan コマンドに読みかえる。

ca_cert.der (dn の引数は自分の好みのものに)

$ strongswan pki --gen > ca_key.der
$ strongswan pki --self --in ca_key.der --dn "C=JP, O=runserver, CN=runserver private ca" --ca --flag sererAuth > ca_cert.der

(–flag serverAuth が必要かどうか未検証)

cert_server.der (CN=の後ろは VPN サーバの DNS 名を入れておく)

$ strongswan pki --gen > key_server.der
$ strongswan pki --pub --in key_server.der | strongswan pki --issue --cacert ca_cert.der --cakey ca_key.der --dn "C=JP, O=runserver, CN=vpn.runserver.jp" --flag serverAuth --san vpn.runserver.jp > cert_server.der 

(–san が必要かどうか未検証)

/etc/strongswan/ipsec.secrets

: RSA key_server.der
moriya : EAP "hogehoge"

2行目は、ユーザー名、パスワードを使用する場合、接続時に指定するユーザー名、パスワード。(証明書を使う場合は不要)

サーバ起動

/ etc / sysctl . d / 00 – IPsec . conf

net.ipv4.ip_forward=1

(再起動、もしくは、systemctl restart systemd-sysctl)

以下を実行。

# firewall-cmd --permanent --zone=public --add-service=ipsec
# firewall-cmd --permanent --zone=public --add-port=4500/udp
# firewall-cmd --permanent --add-masquerade
# systemctl enable strongswan
# systemctl start strongswan

クライアント側

ca_cert.der もインストール。Mac の場合は、キーチェーンアクセスで証明書を信頼(情報を見る->信頼->常に信頼する)しないと接続できなかった。

クライアント 側 の 証明 書 も 同様 に し て 作る 、 p 12 ファイル に し て クライアント に インストール する 。

$ strongswan pki --gen > key_client1.der
$ strongswan pki --pub --in key_client1.der | strongswan pki --issue --cacert ca_cert.der --cakey ca_key.der --dn "C=JP, O=runserver, CN=moriya@vpn.runserver.jp" --san moriya@vpn.runserver.jp > cert_client1.der

$ openssl x509 -inform der -outform pem -in ca_cert.der -out ca_cert.pem
$ openssl x509 -inform der -outform pem -in cert_client1.der -out cert_client1.pem
$ openssl rsa -inform der -outform pem -in key_client1.der -out key_client1.pem
$ openssl pkcs12 -export -inkey key_client1.pem -in cert_client1.pem -certfile ca_cert.pem -out client1.p12

(–san が必要かどうか未検証)

Windows の場合は、
IKEv2
ユーザー 名 と パスワード
ユーザー 名
パスワード
を 設定 し た 後 、 「 アダプタ の オプション を 変更 する 」 で 、 WAN mini Port ( ikev 2 ) アダプタ の プロパティ の
ネットワークタブ / インターネットプロトコルバージョン4 プロパティ
全般タブ / 詳細設定
IP 設定タブにある、「リモートネットワークでデフォルトゲートウェイを使う」
をチェックして OK。

Mac の場合は、IKEv2 の設定画面で、上記設定だと、以下のように設定する。

サーバアドレス:vpn.runserver.jp
リモートID:vpn.runserver.jp
ローカル ID : moriya @ VPN . runserver . JP

トラブルシュート

  1. Windows のイベントビューワで見て 13801 番のエラーコードで失敗する場合は、
    Troubleshooting IKEv2 VPN Connections
     
    などが参考になった。
  2. 「no trusted rsa public key found」のエラーがログに表示されている場合は、自己署名した ca certificate をインストールしたか確認。

AWS を 使う 場合

  • アクション > ネットワーク > 送信元/送信先の送信チェックを選択し無効にすること。
  • セキュリティグループのインバウンドの設定で、UDP 500、UDP 4500、プロトコル 50、プロトコル 51 を許可すること。

感想

  • インストール の 手間 is 少ない が 少ない 。
  • 接続が早い。
  • OS の機能から呼び出せて気持ちよい。
  • ファイアウォール の 設定 is シンプル が シンプル 。

参考サイト

strongSwan のサイト

少し 見る づらい が 、 役 に たつ た 。


[PR]
こちらの PC、ラズパイにインストールしてみてはどうでしょうか?