はじめに
A virtual private network, or VPN, allows you to securely encrypt traffic as it travels through untrusted networks, such as those at the coffee shop, a conference, or an airport.
Internet Key Exchange v2、またはIKEv2は、サーバーとクライアント間の直接IPSecトンネリングを可能にするプロトコルです。IKEv2 VPNの実装では、IPSecがネットワークトラフィックの暗号化を提供します。IKEv2は、一部のプラットフォーム(OS X 10.11以上、iOS 9.1以上、およびWindows 10)でネイティブにサポートされており、追加のアプリケーションは必要ありません。また、クライアントのヒックアップを非常にスムーズに処理します。
このチュートリアルでは、Ubuntu 22.04サーバー上でStrongSwanを使用してIKEv2 VPNサーバーを設定します。その後、Windows、macOS、Ubuntu、iOS、Androidのクライアントでそれに接続する方法を学びます。
前提条件
このチュートリアルを完了するには、次のものが必要です:
- Ubuntu 22.04サーバー1台。これは、Ubuntu 22.04初期サーバー設定ガイドに従って構成されており、
sudo
非ルートユーザーとファイアウォールが設定されています。
ステップ1 — StrongSwanのインストール
まず、VPNサーバーとして設定するオープンソースのIPSecデーモンであるStrongSwanをインストールします。また、インフラストラクチャの資格情報を提供するために証明書機関(CA)を作成できるように、公開鍵インフラストラクチャ(PKI)コンポーネントもインストールします。
まず、ローカルパッケージキャッシュを更新します:
次に、次のように入力してソフトウェアをインストールします:
追加のlibcharon-extauth-plugins
パッケージは、さまざまなクライアントが共有のユーザー名とパスフレーズを使用してサーバーに認証できるようにするために使用されます。 libstrongswan-extra-plugins
パッケージは、StrongSwanがCurve25519
暗号スイートを使用する楕円曲線暗号スイートをサポートするように含まれています。
すべてがインストールされたので、次は証明書の作成に移ります。
ステップ2 — 証明書機関の作成
IKEv2サーバーには、クライアントに自己を識別するための証明書が必要です。必要な証明書を作成するために、strongswan-pki
パッケージには、証明書機関(CA)とサーバー証明書を生成するためのユーティリティであるpki
が付属しています。
最初に、作業するすべてのアセットを保存するためのいくつかのディレクトリを作成します。 ディレクトリ構造は、/etc/ipsec.d
内のいくつかのディレクトリに一致し、最終的に作成したすべてのアイテムを移動します。
次に、他のユーザーによってプライベートファイルが見られないように、アクセス権を厳密に制限します。
すべてを保存するディレクトリ構造ができたので、ルートキーを生成できます。 これは、ルート証明書機関証明書に署名するために使用される4096ビットのRSAキーです。
以下のコマンドを実行してキーを生成します。
その後、作成したキーを使用してルート証明書機関を作成し、ルート証明書に署名できます。
--lifetime 3650
フラグは、証明書機関のルート証明書が10年間有効であることを保証するために使用されます。 通常、権限のある証明書機関のルート証明書は変更されません。 なぜなら、それを依存するすべてのサーバーとクライアントに再配布する必要があるためです。 したがって、10年は安全なデフォルトの有効期限値です。
インフラストラクチャに何かを一致させる必要はないので、識別名(DN)値を他の値に変更できます。
これで、ルート証明書機関が稼働しているので、VPNサーバーが使用する証明書を作成できます。
ステップ3 — VPNサーバーの証明書の生成
これで、VPNサーバーの証明書とキーを作成します。この証明書を使用すると、クライアントが以前に生成したCA証明書を使用してサーバーの正当性を検証できます。
まず、次のコマンドでVPNサーバーの秘密鍵を作成します。
次に、以前のステップで作成した認証局のキーを使用してVPNサーバー証明書を作成し、署名します。次のコマンドを実行しますが、Common Name(CN)とSubject Alternate Name(SAN)フィールドをVPNサーバーのDNS名またはIPアドレスに変更してください。
注意: DNS名の代わりにIPアドレスを使用している場合、複数の--san
エントリを指定する必要があります。以前のコマンドブロックで識別名(--dn ...
)を指定する行を、次の抜粋された行のように変更する必要があります。
--dn "CN=IPアドレス" --san @IPアドレス --san IPアドレス \
この追加の--san @IPアドレス
エントリの理由は、一部のクライアントが、サーバーの識別を検証する際に、TLS証明書にサーバーのDNSエントリとIPアドレスエントリの両方があるかどうかを確認することです。
--flag serverAuth
オプションは、暗号化されたトンネルが確立される前に、証明書が明示的にサーバー認証に使用されることを示すために使用されます。 --flag ikeIntermediate
オプションは、古いmacOSクライアントをサポートするために使用されます。
StrongSwanが必要とするすべてのTLS/SSLファイルを生成したので、ファイルを/etc/ipsec.d
ディレクトリに移動させることができます。次のように入力してください:
このステップでは、クライアントとサーバー間の通信を保護するために使用される証明書ペアが作成されました。また、CAキーで証明書に署名したため、クライアントはCA証明書を使用してVPNサーバーの正当性を検証できます。これらの証明書がすべて準備できたので、StrongSwanの構成に移る準備が整いました。
ステップ4 — StrongSwanの構成
StrongSwanにはいくつかの例が含まれたデフォルトの構成ファイルがありますが、ほとんどの構成は自分で行う必要があります。ゼロから始める前に、参照用にファイルをバックアップしましょう:
好みのテキストエディタを使用して新しい空白の構成ファイルを作成して開きます。ここでは、nano
を使用します。
注意: VPNのサーバー部分を構成するこのセクションを進めるにあたり、接続の左側と右側を参照する設定に遭遇します。IPSec VPNを扱う際に、左側は慣例に従って、設定しているローカルシステム、この場合はサーバーを指します。これらの設定の右側ディレクティブは、電話や他のコンピューターなどのリモートクライアントを指します。
後でこのチュートリアルの後半でクライアントを構成する際には、クライアント構成ファイルはさまざまな左側ディレクティブを使用して自身を参照し、サーバーは右側の用語を使用して参照されます。
まず、StrongSwanにデーモンの状態をデバッグするためのログを記録するように指示し、重複する接続を許可するようにします。次の行をファイルに追加します:
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
次に、VPNの構成セクションを作成します。また、StrongSwanにIKEv2 VPNトンネルを作成し、起動時にこの構成セクションを自動的にロードするよう指示します。次の行をファイルに追加します:
. . .
conn ikev2-vpn
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
また、クライアントが予期せず切断された場合に任意の “ぶら下がり” 接続をクリアするために、デッドピア検出を構成します。次の行を追加します:
. . .
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
追加する最後の「left」側オプションは、サーバーの背後に到達可能なサブネットについてクライアントに通知します。この場合、0.0.0.0/0
はIPv4アドレスの全体セットを表し、サーバーはクライアントに対してデフォルトですべてのトラフィックをVPN経由で送信するよう指示します。
関連するすべての「left」側オプションに慣れたので、次のようにすべてをファイルに追加します:
. . .
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サーバーがドメイン名で識別される場合にのみ、@
文字を含めます:
. . . leftid=@vpn.example.com
. . .
サーバーがそのIPアドレスで識別される場合は、単にIPアドレスを入力します:
. . .
leftid=your_server_ip
. . .
次に、クライアントの「right」側のIPSecパラメーターを設定できます。以下の各パラメーターは、クライアントがサーバーに接続する方法、クライアントがサーバーに認証する方法、およびクライアントが使用するプライベートIPアドレス範囲とDNSサーバーをサーバーに伝えます。これらが何であり、なぜ使用されるかに精通したら、/etc/ipsec.conf
ファイルにこれらの設定を追加してください:
right=%any
接続のright
側の%any
オプションは、サーバーがどのリモートクライアントからの着信接続も受け入れるように指示します。rightid=%any
このオプションにより、サーバーは暗号化トンネルが確立される前にアイデンティティを提供するクライアントからの接続を拒否しません。rightauth=eap-mschapv2
このオプションは、クライアントがサーバーに認証するための認証方法を構成します。ここでは、Windows、macOS、およびAndroidデバイスなどのクライアントをサポートするためにeap-mschapv2
が使用されています。rightsourceip=10.10.10.0/24
このオプションは、サーバーに指定された10.10.10.0/24
のIPプールからクライアントにプライベートIPアドレスを割り当てるように指示します。rightdns=8.8.8.8,8.8.4.4
これらのIPアドレスはGoogleのパブリックDNSリゾルバーです。これらは他のパブリックリゾルバー、VPNサーバーのリゾルバー、またはクライアントが到達できる任意のリゾルバーに変更できます。rightsendcert=never
このオプションは、クライアントが自分自身を認証するために証明書を送信する必要がないことをサーバーに指示します。
これでVPNの必要な「right」サイドオプションに慣れましたので、次の行を/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にクライアントが接続する際にユーザー資格情報を要求するよう指示します。
. . .
conn ikev2-vpn
. . .
eap_identity=%identity
最後に、Linux、Windows、macOS、iOS、およびAndroidクライアントをサポートするために次の行を追加します。これらの行は、StrongSwanが異なるクライアントが使用することを許可するさまざまな鍵交換、ハッシュ化、認証、および暗号化アルゴリズム(一般的にCipher Suitesと呼ばれる)を指定しています。
. . .
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!
各サポートされているCipher Suiteは、他のものからコンマで区切られます。たとえば、chacha20poly1305-sha512-curve25519-prfsha512
は1つの組み合わせであり、aes256gcm16-sha384-prfsha384-ecp384
は別の組み合わせです。ここにリストされているCipher Suiteは、Windows、macOS、iOS、Android、およびLinuxクライアント間で最も広範囲の互換性を確保するために選択されています。
完全な構成ファイルは次のようになります:
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 + X
、Y
、ENTER
を押してください。
VPNのパラメータを設定したので、ユーザーがサーバーに接続できるようにアカウントを作成できます。
ステップ5 — VPN認証の設定
VPNサーバーは、クライアント接続を受け入れるように設定されましたが、まだ資格情報が設定されていません。特別な設定ファイルであるipsec.secrets
をいくつか設定する必要があります。
- StrongSwanにサーバー証明書の秘密鍵の場所を教える必要があります。これにより、サーバーがクライアントを認証できるようになります。
- VPNに接続することが許可されるユーザーのリストも設定する必要があります。
まず、編集するためにシークレットファイルを開きましょう。
まず、StrongSwanに秘密鍵の場所とその解析方法を教えます。
: RSA "server-key.pem"
行が:
文字で始まり、その後にスペースがあることを確認して、行全体が: RSA "server-key.pem"
になるようにします。
次に、ユーザーの資格情報を定義します。ユーザー名やパスワードの組み合わせは、任意のものを使用できます。
your_username : EAP "your_password"
ファイルを保存して閉じます。VPNパラメータの作業が完了したので、VPNサービスを再起動して設定を適用します。
VPNサーバーがサーバーオプションとユーザー資格情報の両方で完全に設定されたので、次に進んでファイアウォールを設定する時です。
ステップ6 — ファイアウォールとカーネルIPフォワーディングの設定
StrongSwanの設定が完了したら、VPNトラフィックを許可し、転送するためにファイアウォールを設定する必要があります。
前提条件としての初期サーバー設定チュートリアルに従っている場合、UFWファイアウォールが有効になっているはずです。 まだUFWを設定していない場合は、現在のセッションが終了しないように、ファイアウォールを有効にする前にSSH接続を許可するルールを追加する必要があります:
次に、ファイアウォールを有効にしてください:
次に、UDPトラフィックを標準のIPSecポート、500
および4500
に許可するルールを追加します:
次に、UFWの設定ファイルを開いて、IPSecパケットのルーティングと転送のためのいくつかの低レベルポリシーを追加します。 ただし、これを行う前に、サーバーでインターネットアクセスに使用されるネットワークインターフェイスを見つける必要があります。 デフォルトルートに関連するデバイスをクエリして、このインターフェイスを見つけてください:
公開インターフェースは「dev」に続く単語に従う必要があります。 たとえば、この結果はeth0
という名前のインターフェースを示しており、次の例で強調されています:
Outputdefault via your_server_ip dev eth0 proto static
パブリックネットワークインターフェースがある場合は、テキストエディタで/etc/ufw/before.rules
ファイルを開きます。このファイルのルールは、通常の入力および出力ルールの残りの部分よりも前にファイアウォールに追加されます。これらはネットワークアドレス変換(NAT)を構成するために使用されます。これにより、サーバーがクライアントとインターネット間の接続を正しくルーティングできます。
ファイルの上部に(*filter
行の前に)、次の構成ブロックを追加します。上記の構成の各インスタンスのeth0
をip route
で見つけたインターフェース名に変更してください。*nat
行は、ファイアウォールがVPNクライアントとインターネット間のトラフィックを正しくルーティングおよび操作できるようにするルールを作成します。*mangle
行は、特定のVPNクライアントでの潜在的な問題を防ぐために、最大パケットセグメントサイズを調整します。
*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つの構成ブロックを追加します:
. . .
*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
これらの行は、ファイアウォールにESP(Encapsulating Security Payload)トラフィックを転送するように指示します。これにより、VPNクライアントが接続できるようになります。 ESPは、VPNパケットが信頼されていないネットワークを通過する際に追加のセキュリティを提供します。
完了したら、各行を正しく追加したことを確認したら、ファイルを保存して閉じます。 nano
を使用した場合は、CTRL + X
、Y
、ENTER
を押してください。
ファイアウォールを再起動する前に、サーバー上のVPNと公開ネットワークインターフェース間でトラフィックが移動できるように、いくつかのネットワークカーネルパラメータを変更する必要があります。これらの設定を制御するファイルは/etc/ufw/sysctl.conf
と呼ばれます。ファイル内でいくつかの設定を構成する必要があります。
まず、IPv4パケットの転送を有効にして、VPNと公開ネットワークインターフェース間でトラフィックを移動できるようにする必要があります。次に、パケットの断片化問題を防ぐために、Path MTU探索を無効にします。最後に、中間者攻撃を防ぐために、ICMPリダイレクトを受け入れないようにし、ICMPリダイレクトを送信しません。
好きなテキストエディタ(nano
など)を使用してUFWのカーネルパラメータ構成ファイルを開きます:
次に、次の設定net/ipv4/ip_forward=1
をファイルの末尾に追加して、インターフェース間のパケット転送を有効にします:
. . .
net/ipv4/ip_forward=1
次に、次の行をファイルの末尾に追加して、ICMPリダイレクトパケットの送信と受信をブロックします:
. . .
net/ipv4/conf/all/accept_redirects=0
net/ipv4/conf/all/send_redirects=0
最後に、次の行をファイルの末尾に追加して、Path MTU探索をオフにします:
. . .
net/ipv4/ip_no_pmtu_disc=1
変更が完了したら、ファイルを保存します。これで、ファイアウォールを無効にしてから再度有効にすることで、すべての変更を有効にすることができます。UFWは再起動時にこれらの設定を適用します:
プロセスを確認するように求められます。新しい設定でUFWを再度有効にするには、Y
を入力してください。
ステップ7 — Windows、macOS、Ubuntu、iOS、およびAndroidでのVPN接続のテスト
すべての準備が整ったので、試してみる時が来ました。まず、VPNに接続するクライアントデバイスに作成したCA証明書をコピーしてインストールする必要があります。これを行う最も簡単な方法は、サーバーにログインして証明書ファイルの内容を出力することです。
次のような出力が表示されます:
Output-----BEGIN CERTIFICATE-----
MIIFNDCCAxygAwIBAgIIHCsidG5mXzgwDQYJKoZIhvcNAQEMBQAwODELMAkGA1UE
. . .
H2YUdz8XNHrJHvMQKWFpi0rlEcMs+MSXPFWE3Q7UbaZJ/h8wpSldSUbQRUlphExJ
dJ4PX+MUJO/vjG1/ie6Kh25xbBAc3qNq8siiJZDwrg6vjEK7eiZ1rA==
-----END CERTIFICATE-----
この出力をコンピューターにコピーし、-----BEGIN CERTIFICATE-----
および-----END CERTIFICATE-----
の行を含め、ca-cert.pem
などの認識しやすい名前のファイルに保存します。作成するファイルに.pem
の拡張子があることを確認してください。
あるいは、ファイルをコンピューターに転送するためにSFTPを使用することもできます。
Windowsからの接続
ルート証明書をインポートしてWindowsをVPNに接続する方法は複数あります。最初の方法では、各ステップにグラフィカルツールを使用します。2番目の方法では、VPN構成に合わせてスクリプト化および変更できるPowerShellコマンドを使用します。
注意:これらの手順は、バージョン1903および1909を実行しているWindows 10インストールでテストされています。
グラフィカルツールを使用してWindowsを構成する
まず、次の手順に従ってルート証明書をインポートします:
-
WINDOWS+R
を押して実行ダイアログを表示し、mmc.exe
を入力してWindows Management Consoleを起動します。 -
ファイルメニューから、スナップインの追加または削除に移動し、利用可能なスナップインのリストから証明書を選択し、追加をクリックします。
-
VPNを任意のユーザーで使用できるようにしたいので、コンピューターアカウントを選択して次へをクリックします。
-
ローカルコンピューターで構成しているので、ローカルコンピューターを選択し、完了をクリックします。
-
コンソール ルートノードの下で、証明書(ローカルコンピューター)エントリを展開し、信頼されたルート証明機関を展開し、次に証明書エントリを選択します:
-
アクションメニューからすべてのタスクを選択し、インポートをクリックして、証明書インポートウィザードを表示します。イントロダクションをスキップするには次へをクリックします。
-
インポートするファイル画面で、参照ボタンを押し、ファイルの種類を「X.509証明書(.cer;.crt)」から「すべてのファイル(.)」に変更し、保存した
ca-cert.pem
ファイルを選択します。その後、次へをクリックします。 -
証明書ストアが信頼されたルート証明機関に設定されていることを確認し、次へをクリックしてください。
-
証明書をインポートするには完了をクリックしてください。
その後、VPNを次の手順で設定してください:
- コントロールパネルを起動し、ネットワークと共有センターに移動します。
- 新しい接続またはネットワークの設定をクリックし、職場への接続を選択します。
- インターネット接続(VPN)を使用を選択します。
- VPNサーバーの詳細を入力します。インターネットアドレスフィールドにサーバーのドメイン名またはIPアドレスを入力し、宛先名にVPN接続を説明するものを入力します。その後、完了をクリックしてください。
PowerShellを使用してWindowsを構成
PowerShellを使用してルートCA証明書をインポートするには、まず管理者特権を持つPowerShellプロンプトを開きます。そのためには、スタートメニューアイコンを右クリックしてWindows PowerShell(管理者)
を選択します。または、管理者としてコマンドプロンプトを開いてpowershell
と入力することもできます。
次に、Import-Certificate
PowerShellコマンドレットを使用して証明書をインポートします。次のコマンドでは、最初の-CertStoreLocation
引数が、証明書をコンピュータの信頼されたルート証明機関ストアにインポートし、すべてのプログラムとユーザーがVPNサーバーの証明書を検証できるようにします。-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アドレスを置換します。さまざまなフラグは、Windowsが適切なセキュリティパラメータで正しく構成されるようにします。これらは/etc/ipsec.conf
で設定したオプションと一致します。
コマンドが成功した場合、出力はありません。VPNが正しく構成されていることを確認するには、Get-VPNConnection
コマンドレットを使用します:
以下のような出力が得られます:
OutputName : 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 は古いおよび遅いアルゴリズムを選択します。 IKEv2 キー交換に Windows が使用する暗号化パラメータをアップグレードし、パケットを暗号化するには、Set-VpnConnectionIPsecConfiguration
コマンドレットを実行します:
注意: 異なるオプションで VPN 接続を削除して再構成する場合は、Remove-VpnConnection
コマンドレットを実行できます。
-Force
フラグを使用すると、削除を確認するプロンプトが表示されません。このコマンドを使用して削除しようとする場合は、VPN から切断されている必要があります。
VPN への接続
証明書をインポートし、いずれかの方法を使用して VPN を構成した後、新しい VPN 接続はネットワークのリストの下に表示されます。 VPN を選択して接続をクリックします。 ユーザー名とパスワードが求められます。 入力して、OKをクリックして接続します。
macOS からの接続
証明書をインポートする手順は次のとおりです:
- 証明書ファイルをダブルクリックします。 キーチェーンアクセスが表示され、「キーチェーンアクセスはシステムキーチェーンを変更しようとしています。これを許可するにはパスワードを入力してください。」というダイアログが表示されます。
- パスワードを入力し、キーチェーンの変更をクリックします。
- 新しくインポートされたVPN証明書をダブルクリックします。これにより、信頼レベルを指定できる小さなプロパティウィンドウが表示されます。 IPセキュリティ(IPSec)を常に信頼に設定し、再度パスワードが求められます。この設定は、パスワードを入力した後、自動的に保存されます。
今、証明書がインポートされ、信頼されたので、次の手順でVPN接続を構成します。
- システム環境設定に移動し、ネットワークを選択します。
- ネットワークのリストの左下にある小さな「プラス」ボタンをクリックします。
- 表示されるポップアップウィンドウで、インターフェースをVPNに設定し、VPNの種類をIKEv2に設定し、接続に名前を付けます。
- サーバーおよびリモートIDフィールドに、サーバーのドメイン名またはIPアドレスを入力します。 ローカルIDを空白のままにします。
- 認証設定をクリックし、ユーザー名を選択し、VPNユーザーのユーザー名とパスワードを入力します。その後、OKをクリックします。
最後に、接続をクリックしてVPNに接続します。これでVPNに接続されました。
Ubuntuからの接続
Ubuntuマシンから接続するには、StrongSwanをサービスとして設定および管理するか、接続するたびにワンオフのコマンドを使用できます。両方の手順について説明します。
StrongSwanをサービスとして管理する
StrongSwanをサービスとして管理するには、以下の設定手順を実行する必要があります。
まず、apt
を使用してローカルパッケージキャッシュを更新します。
次に、StrongSwanと認証に必要なプラグインをインストールします。
次に、クライアントがサーバーの正体を検証できるように、CA証明書のコピーが/etc/ipsec.d/cacerts
ディレクトリに必要です。次のコマンドを実行してca-cert.pem
ファイルをコピーします。
VPNが必要な時のみ実行されるようにするには、systemctl
を使用してStrongSwanが自動的に実行されないようにします。
次に、VPNサーバーに認証するために使用するユーザー名とパスワードを設定します。お好みのエディター(nanoなど)を使用して/etc/ipsec.secrets
を編集します。
以下の行を追加し、ハイライト表示されたユーザー名とパスワードの値を、サーバーで設定した値と一致するように編集します。
your_username : EAP "your_password"
最後に、/etc/ipsec.conf
ファイルを編集して、クライアントをサーバーの構成に合わせます。
config setup
conn ikev2-rw
right=server_domain_or_IP
# これは、サーバーの構成の`leftid`値と一致する必要があります
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に接続するには、次のように入力します。
再度切断するには、次のように入力します。
ワンオフの接続にcharon-cmd
クライアントを使用
StrongSwanをサービスとして管理するには、以下の構成手順を実行する必要があります。
まず、apt
を使用してローカルパッケージキャッシュを更新します。
次に、StrongSwanと認証に必要なプラグインをインストールします。
次に、クライアントがサーバーの正体を確認できるように、CA証明書のコピーを/etc/ipsec.d/cacerts
ディレクトリに用意する必要があります。次のコマンドを実行して、ca-cert.pem
ファイルをコピーします。
この段階で、charon-cmd
を使用してVPNサーバーに接続できます。接続には、サーバーのCA証明書、VPNサーバーのIPアドレス、および構成したユーザー名が必要です。
VPNに接続するには、次のコマンドを実行します。
プロンプトが表示されたら、VPNユーザーのパスワードを入力し、VPNに接続されます。切断するには、端末でCTRL+C
を押して接続が閉じるのを待ちます。
iOSからの接続
iOSデバイスでVPN接続を構成するには、以下の手順に従います。
- ルート証明書を添付して自分宛にメールを送信します。
- iOSデバイスでメールを開き、添付された証明書ファイルをタップし、インストールをタップしてパスコードを入力します。インストールが完了したら、完了をタップします。
- 設定に移動し、一般、VPNをタップして、VPN構成の追加をタップします。これによりVPN接続構成画面が表示されます。
- タイプをタップして、IKEv2を選択します。
- 説明欄に、VPN接続の短い名前を入力します。これは好きなものを入力できます。
- サーバーとリモートID欄に、サーバーのドメイン名またはIPアドレスを入力します。ローカルID欄は空白のままにしておきます。
- 認証セクションにユーザー名とパスワードを入力し、完了をタップします。
- 作成したばかりのVPN接続を選択し、ページ上部のスイッチをタップすると、接続されます。
Androidから接続する
証明書をインポートする手順は以下の通りです:
- 自分宛にCA証明書を添付したメールを送信します。CA証明書をダウンロードフォルダーに保存します。
- PlayストアからStrongSwan VPNクライアントをダウンロードします。
- アプリを開きます。右上隅の「もっと」アイコン(…)をタップし、CA証明書を選択します。
- 上部右隅の「もっと見る」アイコンをタップします(. . .)。証明書のインポートを選択します。
- ダウンロードフォルダ内のCA証明書ファイルに移動し、それをアプリにインポートするために選択します。
StrongSwanアプリに証明書がインポートされたので、次の手順でVPN接続を構成できます:
- アプリで、上部にあるVPNプロファイルの追加をタップします。
- サーバーに、VPNサーバーのドメイン名またはパブリックIPアドレスを入力します。
- VPNタイプとしてIKEv2 EAP(ユーザー名/パスワード)が選択されていることを確認してください。
- ユーザー名とパスワードに、サーバーで定義した資格情報を入力します。
- CA証明書セクションで自動選択を解除し、CA証明書を選択をクリックします。
- 画面の上部にあるIMPORTEDタブをタップし、インポートしたCAを選択します(「DN」を以前に変更していない場合、「VPNルートCA」という名前になります)。
- 必要な場合は、プロファイル名(任意)により記述的な名前を入力します。
VPNに接続する場合は、StrongSwanアプリで作成したプロファイルをクリックします。
接続のトラブルシューティング
証明書をインポートできない場合は、ファイルが.pem
拡張子であることを確認し、.pem.txt
ではないことを確認してください。
VPNに接続できない場合は、使用したサーバー名またはIPアドレスを確認してください。サーバーのドメイン名またはIPアドレスは、証明書を作成する際に共通名(CN)として構成したものと一致している必要があります。一致しない場合、VPN接続は機能しません。たとえば、CNがvpn.example.com
の証明書を設定した場合は、VPNサーバーの詳細を入力する際にvpn.example.com
を使用する必要があります。証明書を生成するために使用したコマンドとVPN接続を作成する際に使用した値を再確認してください。
最後に、ドメイン名を使用している場合は、VPN構成でleftid
値が@
記号で構成されていることを確認してください。
leftid=@vpn.example.com
IPアドレスを使用している場合は、@
記号が省略されていることを確認してください。また、server-cert.pem
ファイルを生成する際に、--san @IPアドレス
および--san IPアドレス
フラグの両方を含めたことを確認してください。
結論
このチュートリアルでは、IKEv2プロトコルを使用するVPNサーバーを構築しました。サーバーおよびクライアントの接続のleft
およびright
側を制御するディレクティブについて学びました。また、Windows、macOS、iOS、Android、またはLinuxクライアントをVPNに接続するために構成しました。
/etc/ipsec.secrets
内の各行は1人のユーザーに対応していますので、ユーザーの追加や削除、またはパスワードの変更はファイルを編集するだけで済みます。
これで、どこにいてもインターネットにアクセスするために使用するデバイスに関係なく、オンライン活動が安全であることを保証できます。