このチュートリアルの以前のバージョンは、 JustinEllingwoodおよびNamoによって作成されました。

序章

仮想プライベートネットワーク(VPN)を使用すると、コーヒーショップ、会議、空港などの信頼できないネットワークを通過するトラフィックを安全に暗号化できます。

Internet Key Exchange v2 、またはIKEv2は、サーバーとクライアント間の直接IPSecトンネリングを可能にするプロトコルです。 IKEv2 VPNの実装では、IPSecはネットワークトラフィックの暗号化を提供します。 IKEv2は、一部のプラットフォーム(OS X 10.11以降、iOS 9.1以降、およびWindows 10)でネイティブにサポートされており、追加のアプリケーションは必要ありません。また、クライアントの一時的な中断を非常にスムーズに処理します。

このチュートリアルでは、Ubuntu20.04サーバーでStrongSwanを使用してIKEv2VPNサーバーをセットアップします。 次に、Windows、macOS、Ubuntu、iOS、およびAndroidクライアントを使用して接続する方法を学習します。

前提条件

このチュートリアルを完了するには、次のものが必要です。

ステップ1—StrongSwanをインストールする

まず、VPNサーバーとして構成するオープンソースのIPSecデーモンであるStrongSwanをインストールします。 また、公開鍵インフラストラクチャ(PKI)コンポーネントをインストールして、インフラストラクチャの資格情報を提供する認証局(CA)を作成できるようにします。

ローカルパッケージキャッシュを更新することから始めます。

  1. sudo apt update

次に、次のように入力してソフトウェアをインストールします。

  1. sudo apt install strongswan strongswan-pki libcharon-extra-plugins libcharon-extauth-plugins libstrongswan-extra-plugins

追加のlibcharon-extauth-pluginsパッケージは、さまざまなクライアントが共有ユーザー名とパスフレーズを使用してサーバーに対して認証できるようにするために使用されます。 libstrongswan-extra-pluginsパッケージが含まれているため、StrongswanはCurve25519暗号化スイートを使用する楕円曲線暗号スイートをサポートします。

すべてがインストールされたので、証明書の作成に移りましょう。

ステップ2—認証局を作成する

IKEv2サーバーには、クライアントに対して自身を識別するための証明書が必要です。 必要な証明書の作成を支援するために、strongswan-pkiパッケージには、認証局とサーバー証明書を生成するためのpkiというユーティリティが付属しています。

まず、作業するすべてのアセットを格納するためのディレクトリをいくつか作成しましょう。 ディレクトリ構造は、/etc/ipsec.dの一部のディレクトリと一致します。ここで、作成するすべてのアイテムを最終的に移動します。

  1. mkdir -p ~/pki/{cacerts,certs,private}

次に、権限をロックして、プライベートファイルが他のユーザーに表示されないようにします。

  1. chmod 700 ~/pki

すべてを格納するディレクトリ構造ができたので、ルートキーを生成できます。 これは、ルート認証局に署名するために使用される4096ビットのRSAキーになります。

次のコマンドを実行して、キーを生成します。

  1. pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem

その後、ルート証明書に署名するために生成したキーを使用して、ルート認証局の作成に進むことができます。

  1. pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem \
  2. --type rsa --dn "CN=VPN root CA" --outform pem > ~/pki/cacerts/ca-cert.pem

--lifetime 3650フラグは、認証局のルート証明書が10年間有効であることを保証するために使用されます。 機関のルート証明書は、それを依存するすべてのサーバーとクライアントに再配布する必要があるため、通常は変更されません。したがって、10年が安全なデフォルトの有効期限値です。

必要に応じて、識別名(DN)の値を別の値に変更できます。 ここでの一般名(CNフィールド)は単なるインジケーターであるため、インフラストラクチャ内の何かと一致する必要はありません。

ルート認証局が稼働しているので、VPNサーバーが使用する証明書を作成できます。

ステップ3—VPNサーバーの証明書を生成する

次に、VPNサーバーの証明書とキーを作成します。 この証明書により、クライアントは、生成したCA証明書を使用してサーバーの信頼性を検証できます。

まず、次のコマンドを使用してVPNサーバーの秘密鍵を作成します。

  1. pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem

次に、前の手順で作成した認証局のキーを使用してVPNサーバー証明書を作成して署名します。 次のコマンドを実行しますが、[共通名(CN)]フィールドと[サブジェクト代替名(SAN)]フィールドをVPNサーバーのDNS名またはIPアドレスに変更します。

  1. pki --pub --in ~/pki/private/server-key.pem --type rsa \
  2. | pki --issue --lifetime 1825 \
  3. --cacert ~/pki/cacerts/ca-cert.pem \
  4. --cakey ~/pki/private/ca-key.pem \
  5. --dn "CN=server_domain_or_IP" --san server_domain_or_IP \
  6. --flag serverAuth --flag ikeIntermediate --outform pem \
  7. > ~/pki/certs/server-cert.pem

:DNS名の代わりにIPアドレスを使用している場合は、複数の--sanエントリを指定する必要があります。 識別名(--dn ...)を指定する前のコマンドブロックの行は、次の抜粋行のように追加のエントリで変更する必要があります。

--dn "CN=IP address" --san @IP_address --san IP_address \

この余分な--san @IP_addressエントリの理由は、一部のクライアントが、サーバーのIDを確認するときに、TLS証明書にサーバーのDNSエントリとIPアドレスエントリの両方があるかどうかを確認するためです。

--flag serverAuthオプションは、暗号化されたトンネルが確立される前に、証明書がサーバー認証に明示的に使用されることを示すために使用されます。 --flag ikeIntermediateオプションは、古いmacOSクライアントをサポートするために使用されます。

StrongSwanが必要とするすべてのTLS/SSLファイルを生成したので、次のように入力して、ファイルを/etc/ipsec.dディレクトリの所定の場所に移動できます。

  1. sudo cp -r ~/pki/* /etc/ipsec.d/

このステップでは、クライアントとサーバー間の通信を保護するために使用される証明書ペアを作成しました。 また、CAキーを使用して証明書に署名したため、クライアントはCA証明書を使用してVPNサーバーの信頼性を検証できます。 これらの証明書がすべて揃ったら、ソフトウェアの構成に進みます。

ステップ4—StrongSwanを設定する

StrongSwanには、いくつかの例を含むデフォルトの構成ファイルがありますが、ほとんどの構成は自分で行う必要があります。 最初から始める前に、参照用にファイルをバックアップしましょう。

  1. sudo mv /etc/ipsec.conf{,.original}

お好みのテキストエディタを使用して、新しい空の設定ファイルを作成して開きます。 ここでは、nanoを使用します。

  1. sudo nano /etc/ipsec.conf

:このセクションを実行してVPNのサーバー部分を構成すると、接続の左側および右側を参照する設定が表示されます。 IPSec VPNを使用する場合、慣例により left 側は、構成しているローカルシステム(この場合はサーバー)を指します。 これらの設定の右側のディレクティブは、電話や他のコンピューターなどのリモートクライアントを参照します。

このチュートリアルの後半でクライアントの構成に進むと、クライアント構成ファイルはさまざまな left ディレクティブを使用して自身を参照し、サーバーはright側の用語を使用して参照されます。

まず、StrongSwanに、デバッグのためにデーモンのステータスをログに記録し、重複接続を許可するように指示します。 次の行をファイルに追加します。

/etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

次に、VPNの構成セクションを作成します。 また、StrongSwanにIKEv2 VPNトンネルを作成し、起動時にこの構成セクションを自動的にロードするように指示します。 次の行をファイルに追加します。

/etc/ipsec.conf
. . .
conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes

また、クライアントが予期せず切断した場合に「ぶら下がっている」接続をクリアするようにデッドピア検出を構成します。 次の行を追加します。

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    dpdaction=clear
    dpddelay=300s
    rekey=no

次に、サーバーの「左側」のIPSecパラメーターを構成します。 次の各パラメーターは、サーバーがクライアントからの接続を受け入れ、サーバー自体を正しく識別するように構成されていることを確認します。 これらの設定とその使用理由を理解したら、これらの各設定を/etc/ipsec.confファイルに追加します。

  • left=%any %anyの値は、サーバーがネットワークインターフェイスを使用して、クライアントとの後続の通信のために着信接続を受信することを保証します。 たとえば、プライベートネットワークを介してクライアントを接続している場合、サーバーは残りの接続でトラフィックを受信するプライベートIPアドレスを使用します。
  • leftid=@server_domain_or_IPこのオプションは、サーバーがクライアントに提示する名前を制御します。 次のオプションleftcertと組み合わせると、leftidオプションは、サーバーの構成名と公開証明書に含まれる識別名(DN)が一致することを保証します。
  • leftcert=server-cert.pemこのオプションは、手順3で構成したサーバーの公開証明書へのパスです。 これがないと、サーバーはクライアントで自身を認証したり、IKEv2セットアップのネゴシエーションを終了したりできません。
  • leftsendcert=always always値は、サーバーに接続するすべてのクライアントが、初期接続セットアップの一部としてサーバーの公開証明書のコピーを常に受信することを保証します。
  • leftsubnet=0.0.0.0/0追加する最後の「左側」オプションは、サーバーの背後で到達可能なサブネットについてクライアントに通知します。 この場合、0.0.0.0/0は、IPv4アドレスのセット全体を表すために使用されます。つまり、サーバーは、デフォルトですべてのトラフィックをVPN経由で送信するようにクライアントに指示します。

関連する「左側」の各オプションについて理解したので、次のようにすべてをファイルに追加します。

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0

:サーバーID(leftid)を構成するときは、VPNサーバーがドメイン名で識別される場合にのみ@文字を含めてください。

/etc/ipsec.conf
    . . .    leftid=@vpn.example.com
    . . .

サーバーがIPアドレスで識別される場合は、IPアドレスを次のように入力します。

/etc/ipsec.conf
    . . .
    leftid=your_server_ip
    . . .

次に、クライアントの「右側」のIPSecパラメータを設定できます。 次の各パラメータは、クライアントからの接続を受け入れる方法、クライアントがサーバーに対して認証する方法、およびクライアントが使用するプライベートIPアドレス範囲とDNSサーバーをサーバーに指示します。 これらの設定とその使用理由を理解したら、これらの各設定を/etc/ipsec.confファイルに追加します。

  • right=%any接続のright側の%anyオプションは、リモートクライアントからの着信接続を受け入れるようにサーバーに指示します。
  • rightid=%anyこのオプションは、暗号化されたトンネルが確立される前に、サーバーがIDを提供するクライアントからの接続を拒否しないようにします。
  • rightauth=eap-mschapv2このオプションは、クライアントがサーバーへの認証に使用する認証方法を構成します。 eap-mschapv2は、Windows、macOS、Androidデバイスなどのクライアントをサポートするための幅広い互換性のためにここで使用されます。
  • rightsourceip=10.10.10.0/24このオプションは、指定された10.10.10.0/24IPプールからクライアントにプライベートIPアドレスを割り当てるようにサーバーに指示します。
  • rightdns=8.8.8.8,8.8.4.4これらのIPアドレスは、GoogleのパブリックDNSリゾルバーです。 これらは、他のパブリックリゾルバー、VPNサーバーのリゾルバー、またはクライアントが到達できる他のリゾルバーを使用するように変更できます。
  • rightsendcert=neverこのオプションは、クライアントが自身を認証するために証明書を送信する必要がないことをサーバーに指示します。

VPNに必要な「右側」のオプションについて理解したので、次の行を/etc/ipsec.confに追加します。

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never

次に、StrongSwanに、接続時にクライアントにユーザー資格情報を要求するように指示します。

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    eap_identity=%identity

最後に、Linux、Windows、macOS、iOS、およびAndroidクライアントをサポートするために次の行を追加します。 これらの行は、StrongSwanがさまざまなクライアントに使用を許可するさまざまなキー交換、ハッシュ、認証、および暗号化アルゴリズム(一般に暗号スイートと呼ばれる)を指定します。

/etc/ipsec.conf
. . .
conn ikev2-vpn
    . . .
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

サポートされている各暗号スイートは、他の暗号スイートとはコンマで区切られています。 たとえば、chacha20poly1305-sha512-curve25519-prfsha512は1つのスイートであり、aes256gcm16-sha384-prfsha384-ecp384は別のスイートです。 ここにリストされている暗号スイートは、Windows、macOS、iOS、Android、およびLinuxクライアント間で最も幅広い互換性を確保するために選択されています。

完全な構成ファイルは次のようになります。

/etc/ipsec.conf
config setup
    charondebug="ike 1, knl 1, cfg 0"
    uniqueids=no

conn ikev2-vpn
    auto=add
    compress=no
    type=tunnel
    keyexchange=ikev2
    fragmentation=yes
    forceencaps=yes
    dpdaction=clear
    dpddelay=300s
    rekey=no
    left=%any
    leftid=@server_domain_or_IP
    leftcert=server-cert.pem
    leftsendcert=always
    leftsubnet=0.0.0.0/0
    right=%any
    rightid=%any
    rightauth=eap-mschapv2
    rightsourceip=10.10.10.0/24
    rightdns=8.8.8.8,8.8.4.4
    rightsendcert=never
    eap_identity=%identity
    ike=chacha20poly1305-sha512-curve25519-prfsha512,aes256gcm16-sha384-prfsha384-ecp384,aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
    esp=chacha20poly1305-sha512,aes256gcm16-ecp384,aes256-sha256,aes256-sha1,3des-sha1!

各行が正しく追加されたことを確認したら、ファイルを保存して閉じます。 nanoを使用した場合は、CTRL + XYENTERの順に押してください。

VPNパラメーターを構成したので、ユーザーがサーバーに接続できるようにアカウントの作成に移りましょう。

ステップ5—VPN認証の構成

これで、VPNサーバーはクライアント接続を受け入れるように構成されましたが、まだ資格情報が構成されていません。 ipsec.secretsと呼ばれる特別な構成ファイルでいくつかのことを構成する必要があります。

  • サーバーがクライアントに対して認証できるように、サーバー証明書の秘密鍵の場所をStrongSwanに指示する必要があります。
  • また、VPNへの接続を許可されるユーザーのリストを設定する必要があります。

シークレットファイルを開いて編集しましょう。

  1. sudo nano /etc/ipsec.secrets

まず、StrongSwanに秘密鍵の場所とその解析方法を指示します。

/etc/ipsec.secrets
: RSA "server-key.pem"

行が:文字で始まり、行全体が: RSA "server-key.pem"になるように、その後にスペースがあることを確認してください。

次に、ユーザーの資格情報を定義します。 任意のユーザー名またはパスワードの組み合わせを作成できます。

/etc/ipsec.secrets
your_username : EAP "your_password"

ファイルを保存して閉じます。 VPNパラメータの操作が終了したので、VPNサービスを再起動して、構成を適用します。

  1. sudo systemctl restart strongswan-starter

VPNサーバーがサーバーオプションとユーザー資格情報の両方で完全に構成されたので、次に最も重要な部分であるファイアウォールの構成に移ります。

ステップ6—ファイアウォールとカーネルのIP転送を構成する

StrongSwanの構成が完了したら、VPNトラフィックが通過して転送できるようにファイアウォールを構成する必要があります。

前提条件の初期サーバーセットアップチュートリアルに従った場合は、UFWファイアウォールを有効にする必要があります。 UFWをまだ構成していない場合は、ファイアウォールを介したSSH接続を許可するルールを追加することから始めて、UFWを有効にしたときに現在のセッションが閉じないようにする必要があります。

  1. sudo ufw allow OpenSSH

次に、次のように入力してファイアウォールを有効にします。

  1. sudo ufw enable

次に、UDPトラフィックを標準のIPSecポート500および4500に許可するルールを追加します。

  1. sudo ufw allow 500,4500/udp

次に、UFWの構成ファイルの1つを開いて、IPSecパケットをルーティングおよび転送するためのいくつかの低レベルポリシーを追加します。 ただし、これを行う前に、サーバー上のどのネットワークインターフェイスがインターネットアクセスに使用されているかを確認する必要があります。 デフォルトルートに関連付けられているデバイスを照会して、このインターフェイスを見つけます。

  1. ip route show default

パブリックインターフェイスは「dev」という単語の後に続く必要があります。 たとえば、この結果はeth0という名前のインターフェイスを示しています。これは、次の例で強調表示されています。

Output
default via your_server_ip dev eth0 proto static

パブリックネットワークインターフェイスを使用している場合は、テキストエディタで/etc/ufw/before.rulesファイルを開きます。 このファイルのルールは、残りの通常の入力および出力ルールの前にファイアウォールに追加されます。 これらは、サーバーがクライアントおよびインターネットとの間で接続を正しくルーティングできるように、ネットワークアドレス変換(NAT)を構成するために使用されます。

  1. sudo nano /etc/ufw/before.rules

ファイルの先頭近く(*filter行の前)に、次の構成ブロックを追加します。 上記の構成のeth0の各インスタンスを、ip routeで見つけたインターフェイス名と一致するように変更します。 *nat行は、ファイアウォールがVPNクライアントとインターネット間のトラフィックを正しくルーティングおよび操作できるようにルールを作成します。 *mangle行は、特定のVPNクライアントで発生する可能性のある問題を防ぐために、最大パケットセグメントサイズを調整します。

/etc/ufw/before.rules
*nat
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
COMMIT

*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT

*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]
. . .

次に、*filterとチェーン定義行の後に、構成のブロックをもう1つ追加します。

/etc/ufw/before.rules
. . .
*filter
:ufw-before-input - [0:0]
:ufw-before-output - [0:0]
:ufw-before-forward - [0:0]
:ufw-not-local - [0:0]

-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT

これらの行は、VPNクライアントが接続できるように ESP (Encapsulating Security Payload)トラフィックを転送するようにファイアウォールに指示します。 ESPは、VPNパケットが信頼できないネットワークを通過するときに、VPNパケットに追加のセキュリティを提供します。

終了したら、各行が正しく追加されたことを確認したら、ファイルを保存して閉じます。 nanoを使用した場合は、CTRL + XYENTERの順に押してください。

ファイアウォールを再起動する前に、いくつかのネットワークカーネルパラメータを変更して、あるインターフェイスから別のインターフェイスへのルーティングを許可します。 これらの設定を制御するファイルは/etc/ufw/sysctl.confと呼ばれます。 ファイル内でいくつかの設定を行う必要があります。

最初にIPv4パケット転送をオンにして、トラフィックがVPNとサーバー上の公開されているネットワークインターフェイスの間を移動できるようにする必要があります。 次に、パケットの断片化の問題を防ぐために、パスMTU探索を無効にします。 最後に、中間者攻撃を防ぐために、ICMPリダイレクトを受け入れたりICMPリダイレクトを送信したりすることはありません。

nanoまたはお好みのテキストエディタを使用して、UFWのカーネルパラメータ設定ファイルを開きます。

  1. sudo nano /etc/ufw/sysctl.conf

次に、ファイルの最後に次のnet/ipv4/ip_forward=1設定を追加して、インターフェイス間でパケットを転送できるようにします。

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_forward=1

次のブロックは、ファイルの最後に次の行を追加して、ICMPリダイレクトパケットの送受信をブロックします。

/etc/ufw/sysctl.conf
. . .
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0

最後に、ファイルの最後に次の行を追加して、パスMTU探索をオフにします。

/etc/ufw/sysctl.conf
. . .
net/ipv4/ip_no_pmtu_disc=1

終了したらファイルを保存します。 これで、ファイアウォールを無効にしてから再度有効にすることで、すべての変更を有効にできます。UFWは、再起動するたびにこれらの設定を適用するためです。

  1. sudo ufw disable
  2. sudo ufw enable

プロセスを確認するように求められます。 Yと入力して、新しい設定でUFWを再度有効にします。

ステップ7— Windows、macOS、Ubuntu、iOS、およびAndroidでのVPN接続のテスト

すべての設定が完了したので、試してみましょう。 まず、作成したCA証明書をコピーして、VPNに接続するクライアントデバイスにインストールする必要があります。 これを行う最も簡単な方法は、サーバーにログインして証明書ファイルの内容を出力することです。

  1. cat /etc/ipsec.d/cacerts/ca-cert.pem

次のような出力が表示されます。

Output
-----BEGIN CERTIFICATE----- MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE . . . H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA== -----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----および-----END CERTIFICATE-----行を含むこの出力をコンピューターにコピーし、ca-cert.pemなどの認識可能な名前のファイルに保存します。 作成するファイルの拡張子が.pemであることを確認してください。

または、SFTPを使用してファイルをコンピューターに転送します

ca-cert.pemファイルをコンピューターにダウンロードしたら、VPNへの接続を設定できます。

Windowsから接続する

ルート証明書をインポートし、VPNに接続するようにWindowsを構成する方法は複数あります。 最初の方法では、ステップごとにグラフィカルツールを使用します。 2番目の方法では、PowerShellコマンドを使用します。このコマンドは、VPN構成に合わせてスクリプト化および変更できます。

注:これらの手順は、バージョン1903および1909を実行しているWindows10インストールでテストされています。

グラフィカルツールを使用したWindowsの構成

まず、次の手順に従ってルート証明書をインポートします。

  1. WINDOWS+Rを押して実行ダイアログを表示し、mmc.exeと入力してWindows管理コンソールを起動します。

  2. ファイルメニューからスナップインの追加または削除に移動し、使用可能なスナップインのリストから証明書を選択して、追加[ X156X]。

  3. VPNをすべてのユーザーと連携させたいので、コンピューターアカウントを選択し、次へをクリックします。

  4. ローカルコンピューターで設定しているので、ローカルコンピューターを選択し、完了をクリックします。

  5. コンソールルートノードで、証明書(ローカルコンピューター)エントリを展開し、信頼されたルート証明機関を展開して、証明書を選択します。エントリ:

  6. アクションメニューからすべてのタスクを選択し、インポートをクリックして証明書のインポートウィザードを表示します。 次へをクリックして、紹介を通過します。

  7. インポートするファイル画面で、参照ボタンを押し、ファイルタイプを「X.509証明書( .cer; .crt)」から変更していることを確認します。 」から「すべてのファイル()」に移動し、保存したca-cert.pemファイルを選択します。 次に、次へをクリックします。

  8. 証明書ストア信頼されたルート証明機関に設定されていることを確認し、次へをクリックします。

  9. 完了をクリックして証明書をインポートします。

次に、次の手順でVPNを構成します。

  1. コントロールパネルを起動し、ネットワークと共有センターに移動します。
  2. 新しい接続またはネットワークのセットアップをクリックし、職場に接続するを選択します。
  3. インターネット接続(VPN)を使用するを選択します。
  4. VPNサーバーの詳細を入力します。 サーバーのドメイン名またはIPアドレスをインターネットアドレスフィールドに入力し、宛先名にVPN接続を説明するものを入力します。 次に、完了をクリックします。

PowerShellを使用したWindowsの構成

PowerShellを使用してルートCA証明書をインポートするには、最初に管理者権限でPowerShellプロンプトを開きます。 これを行うには、[スタート]メニューアイコンを右クリックして、Windows PowerShell (Admin)を選択します。 管理者としてコマンドプロンプトを開き、powershellと入力することもできます。

次に、Import-CertificatePowerShellコマンドレットを使用して証明書をインポートします。 次のコマンドでは、最初の-CertStoreLocation引数により、証明書がコンピューターの信頼されたルート証明機関ストアにインポートされ、すべてのプログラムとユーザーがVPNサーバーの証明書を検証できるようになります。 。 -FilePath引数は、証明書をコピーした場所を指している必要があります。 次の例では、パスはC:\Users\sammy\Documents\ca-cert.pemです。 使用した場所に一致するようにコマンドを編集してください。

  1. Import-Certificate `
  2. -CertStoreLocation cert:\LocalMachine\Root\ `
  3. -FilePath C:\users\sammy\Documents\ca-cert.pem

このコマンドは、次のようなものを出力します。

Output
PSParentPath: Microsoft.PowerShell.Security\Certificate::LocalMachine\Root Thumbprint Subject ---------- ------- DB00813B4087E9367861E8463A60CEA0ADC5F002 CN=VPN root CA

ここで、PowerShellを使用してVPNを構成するには、次のコマンドを実行します。 -ServerAddress行でサーバーのDNS名またはIPアドレスを置き換えます。 さまざまなフラグにより、/etc/ipsec.confで設定したオプションと一致する適切なセキュリティパラメータを使用してWindowsが正しく構成されていることが保証されます。

  1. Add-VpnConnection -Name "VPN Connection" `
  2. -ServerAddress "server_domain_or_IP" `
  3. -TunnelType "IKEv2" `
  4. -AuthenticationMethod "EAP" `
  5. -EncryptionLevel "Maximum" `
  6. -RememberCredential `

コマンドが成功した場合、出力はありません。 VPNが正しく構成されていることを確認するには、Get-VPNConnectionコマンドレットを使用します。

  1. Get-VpnConnection -Name "VPN Connection"

次のような出力が表示されます。

Output
Name : VPN Connection ServerAddress : your_server_ip AllUserConnection : False Guid : {B055A1AB-175C-4028-B4A8-D34309A2B20E} TunnelType : Ikev2 AuthenticationMethod : {Eap} EncryptionLevel : Maximum L2tpIPsecAuth : UseWinlogonCredential : False EapConfigXmlStream : #document ConnectionStatus : Disconnected RememberCredential : True SplitTunneling : False DnsSuffix : IdleDisconnectSeconds : 0

デフォルトでは、Windowsは古くて遅いアルゴリズムを選択します。 Set-VpnConnectionIPsecConfigurationコマンドレットを実行して、WindowsがIKEv2キー交換に使用する暗号化パラメーターをアップグレードし、パケットを暗号化します。

  1. Set-VpnConnectionIPsecConfiguration -Name "VPN Connection" `
  2. -AuthenticationTransformConstants GCMAES256 `
  3. -CipherTransformConstants GCMAES256 `
  4. -DHGroup ECP384 `
  5. -IntegrityCheckMethod SHA384 `
  6. -PfsGroup ECP384 `
  7. -EncryptionMethod GCMAES256

:VPN接続を削除し、別のオプションで再構成する場合は、Remove-VpnConnectionコマンドレットを実行できます。

  1. Remove-VpnConnection -Name "VPN Connection" -Force

-Forceフラグは、削除の確認を求めるプロンプトをスキップします。 このコマンドを使用してVPNを削除しようとする場合は、VPNから切断する必要があります。

VPNへの接続

証明書をインポートし、いずれかの方法を使用してVPNを構成すると、新しいVPN接続がネットワークのリストの下に表示されます。 VPNを選択し、接続をクリックします。 ユーザー名とパスワードの入力を求められます。 それらを入力し、 OK をクリックすると、接続されます。

macOSから接続する

証明書をインポートするには、次の手順に従います。

  1. 証明書ファイルをダブルクリックします。 Keychain Access は、「KeychainAccessがシステムキーチェーンを変更しようとしています。 これを許可するには、パスワードを入力してください。」
  2. パスワードを入力し、キーチェーンの変更をクリックします
  3. 新しくインポートしたVPN証明書をダブルクリックします。 これにより、信頼レベルを指定できる小さなプロパティウィンドウが表示されます。 IPセキュリティ(IPSec)常に信頼に設定すると、パスワードの入力を再度求められます。 この設定は、パスワードを入力すると自動的に保存されます。

証明書がインポートされて信頼されたので、次の手順でVPN接続を構成します。

  1. システム環境設定に移動し、ネットワークを選択します。
  2. ネットワークのリストの左下にある小さな「プラス」ボタンをクリックします。
  3. 表示されるポップアップで、InterfaceVPNに設定し、 VPNTypeIKEv2に設定して、接続に名前を付けます。
  4. サーバーおよびリモートIDフィールドに、サーバーのドメイン名またはIPアドレスを入力します。 ローカルIDは空白のままにします。
  5. 認証設定をクリックし、ユーザー名を選択して、VPNユーザー用に構成したユーザー名とパスワードを入力します。 次に、OKをクリックします。

最後に、接続をクリックしてVPNに接続します。 これで、VPNに接続されているはずです。

Ubuntuから接続する

Ubuntuマシンから接続するには、StrongSwanをサービスとしてセットアップおよび管理するか、接続するたびに1回限りのコマンドを使用できます。 両方の手順が提供されています。

StrongSwanをサービスとして管理する

StrongSwanをサービスとして管理するには、次の設定手順を実行する必要があります。

まず、aptを使用してローカルパッケージキャッシュを更新します

  1. sudo apt update

次に、StrongSwanと認証に必要なプラグインをインストールします。

  1. sudo apt install strongswan libcharon-extra-plugins

ここで、クライアントがサーバーのIDを確認できるように、/etc/ipsec.d/cacertsディレクトリにCA証明書のコピーが必要になります。 次のコマンドを実行して、ca-cert.pemファイルを所定の場所にコピーします。

  1. sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

VPNがオンデマンドでのみ実行されるようにするには、systemctlを使用して、StrongSwanが自動的に実行されないようにします。

  1. sudo systemctl disable --now strongswan-starter

次に、VPNサーバーへの認証に使用するユーザー名とパスワードを構成します。 nanoまたはお好みのエディターを使用して/etc/ipsec.secretsを編集します。

  1. sudo nano /etc/ipsec.secrets

次の行を追加し、強調表示されたユーザー名とパスワードの値を編集して、サーバーで構成した値と一致させます。

/etc/ipsec.secrets
your_username : EAP "your_password"

最後に、/etc/ipsec.confファイルを編集して、サーバーの構成と一致するようにクライアントを構成します。

/etc/ipsec.conf
config setup

conn ikev2-rw
    right=server_domain_or_IP
    # This should match the `leftid` value on your server's configuration
    rightid=server_domain_or_IP
    rightsubnet=0.0.0.0/0
    rightauth=pubkey
    leftsourceip=%config
    leftid=username
    leftauth=eap-mschapv2
    eap_identity=%identity
    auto=start

VPNに接続するには、次のように入力します。

  1. sudo systemctl start strongswan-starter

再度切断するには、次のように入力します。

  1. sudo systemctl stop strongswan-starter

charon-cmdクライアントを1回限りの接続に使用する

StrongSwanをサービスとして管理するには、次の設定手順を実行する必要があります。

まず、aptを使用してローカルパッケージキャッシュを更新します

  1. sudo apt update

次に、StrongSwanと認証に必要なプラグインをインストールします。

  1. sudo apt install strongswan libcharon-extra-plugins

ここで、クライアントがサーバーのIDを確認できるように、/etc/ipsec.d/cacertsディレクトリにCA証明書のコピーが必要になります。 次のコマンドを実行して、ca-cert.pemファイルを所定の場所にコピーします。

  1. sudo cp /tmp/ca-cert.pem /etc/ipsec.d/cacerts

この時点で、サーバーのCA証明書、VPNサーバーのIPアドレス、および構成したユーザー名を使用して、charon-cmdでVPNサーバーに接続できます。

VPNに接続するときはいつでも、次のコマンドを実行します。

  1. sudo charon-cmd --cert ca-cert.pem --host vpn_domain_or_IP --identity your_username

プロンプトが表示されたら、VPNユーザーのパスワードを入力すると、VPNに接続されます。 切断するには、端末のCTRL+Cを押して、接続が閉じるのを待ちます。

iOSから接続する

iOSデバイスでVPN接続を構成するには、次の手順に従います。

  1. ルート証明書を添付したメールを自分に送信します。
  2. iOSデバイスでメールを開き、添付の証明書ファイルをタップしてから、インストールをタップしてパスコードを入力します。 インストールしたら、完了をタップします。
  3. 設定一般 VPN に移動し、VPN構成の追加をタップします。 これにより、VPN接続構成画面が表示されます。
  4. Type をタップし、IKEv2を選択します。
  5. 説明フィールドに、VPN接続の短い名前を入力します。 これはあなたが好きなものなら何でもかまいません。
  6. サーバーおよびリモートIDフィールドに、サーバーのドメイン名またはIPアドレスを入力します。 ローカルIDフィールドは空白のままにすることができます。
  7. 認証セクションにユーザー名とパスワードを入力し、完了をタップします。
  8. 作成したVPN接続を選択し、ページ上部のスイッチをタップすると接続されます。

Androidから接続する

証明書をインポートするには、次の手順に従います。

  1. CA証明書を添付したメールを自分に送信します。 CA証明書をダウンロードフォルダに保存します。
  2. PlayストアからStrongSwanVPNクライアントをダウンロードします。
  3. アプリを開きます。 「もっと見る」アイコンをタップします( 。 。 。 )右上隅で選択します CA証明書
  4. 「もっと見る」アイコンをタップします( 。 。 。 )再び右上隅にあります。 証明書のインポートを選択します。
  5. ダウンロードフォルダー内のCA証明書ファイルを参照し、それを選択してアプリにインポートします。

証明書がStrongSwanアプリにインポートされたので、次の手順でVPN接続を構成できます。

  1. アプリで、上部にあるVPNプロファイルの追加をタップします。
  2. サーバーにVPNサーバーのドメイン名またはパブリックIPアドレスを入力します。
  3. VPNタイプとしてIKEv2EAP(ユーザー名/パスワード)が選択されていることを確認してください。
  4. サーバーで定義した資格情報をユーザー名パスワードに入力します。
  5. CA証明書セクションで自動選択の選択を解除し、CA証明書の選択をクリックします。
  6. 画面上部のIMPORTEDタブをタップし、インポートしたCAを選択します(以前に「DN」を変更しなかった場合は、「VPNルートCA」という名前になります)。
  7. 必要に応じて、プロファイル名(オプション)にわかりやすい名前を入力します。

VPNに接続する場合は、StrongSwanアプリケーションで作成したプロファイルをクリックします。

接続のトラブルシューティング

証明書をインポートできない場合は、ファイルの拡張子が.pem.txtではなく.pemであることを確認してください。

VPNに接続できない場合は、使用したサーバー名またはIPアドレスを確認してください。 サーバーのドメイン名またはIPアドレスは、証明書の作成時に共通名(CN)として構成したものと一致する必要があります。 それらが一致しない場合、VPN接続は機能しません。 たとえば、CNがvpn.example.comの証明書を設定する場合、VPNサーバーの詳細を入力するときにvpn.example.comを使用する必要があります。 証明書の生成に使用したコマンドと、VPN接続の作成時に使用した値を再確認してください。

最後に、VPN構成を再確認して、ドメイン名を使用している場合は、leftid値が@記号で構成されていることを確認します。

/etc/ipsec.conf
    leftid=@vpn.example.com

IPアドレスを使用している場合は、@記号が省略されていることを確認してください。 また、server-cert.pemファイルを生成するときに、--san @IP_addressフラグと--san IP_addressフラグの両方が含まれていることを確認してください。

結論

このチュートリアルでは、IKEv2プロトコルを使用するVPNサーバーを構築しました。 サーバーとクライアントの両方で接続のleft側とright側を制御するディレクティブについて学習しました。 また、VPNに接続するようにWindows、macOS、iOS、Android、またはLinuxクライアントを構成しました。

ユーザーを追加または削除するには、手順5に再度スキップします。 /etc/ipsec.secretsの各行は1人のユーザー用であるため、ユーザーを追加または削除したり、パスワードを変更したりするには、ファイルを編集するだけです。

これで、どこにいても、インターネットへのアクセスに使用するデバイスを使用しても、オンラインアクティビティが安全に保たれることが保証されます。