リモートアクセスサーバ:IKEv2

IPsecACによるIKEv2リモートアクセスサーバを提供する設定例。

始める前に

  • グローバルIPv4アドレスを1個、固定で割り当てられるPPPoE型のインターネット接続サービスを契約しているものとします。ここではアクセス回線にNTT フレッツ・光ネクスト、ISPにIIJ FiberAccess/F サービス(1/256C)を使用するものとします。
  • IKEv2リモートアクセスを使用するには認証局(CA)に署名されたサーバ証明書(PEM形式のX.509 証明書)を用意する必要があります。自己署名証明書は使用できません。ここでは公的な認証局に署名されたサーバ証明書を使用するものとします。
  • 公的な認証局の署名を受けずに運用する場合は、プライベート認証局を用意し、プライベート認証局に署名された証明書をコンフィグに設定し、プライベート認証局の証明書を各クライアント端末のルートCAストアに登録する必要があります。プライベート認証局を利用する場合でも本装置の設定方法は同じです。
適合ファームウェア
SEIL/X4, SEIL/x86 Ayame, SEIL CA10:ver.3.30以降

このタスクについて

  • インターネットアクセスルータ(IPv4 PPPoE)とリモートアクセスサーバを兼ねる設定例です。リモートアクセスクライアントはVPN接続時に本装置を経由してインターネットへもアクセス可能です。

構成イメージ

サンプルコンフィグ

hostname : ${hostname}
interface.pppoe0.id       : ${pppoe0_id}
interface.pppoe0.password : ${pppoe0_password}

interface.ge1.ipv4.address : ${lan_address}${lan_prefixlen}

interface.ipsecac0.ike.v2.authentication.0.type            : local
interface.ipsecac0.ike.v2.authentication.0.realm.suffix    : @${hostname}
interface.ipsecac0.ike.v2.authentication.0.user.1.name     : ${user1_name}
interface.ipsecac0.ike.v2.authentication.0.user.1.password : ${user1_password}
interface.ipsecac0.ike.v2.authentication.0.user.2.name     : ${user2_name}
interface.ipsecac0.ike.v2.authentication.0.user.2.password : ${user2_password}

interface.ipsecac0.ike.v2.config.pool.ipv4.0.type          : dynamic
interface.ipsecac0.ike.v2.config.pool.ipv4.0.address       : ${ipsecac0_pool_address}

interface.ipsecac0.ike.v2.config.dns-server.ipv4.0.address : ${ipsecac0_address}
interface.ipsecac0.ipv4.address                            : ${ipsecac0_address}

interface.ipsecac0.ike.v2.my-identifier.type: ${ipsecac0_id_type}
interface.ipsecac0.ike.v2.my-identifier.fqdn: ${ipsecac0_id_fqdn}
interface.ipsecac0.ipv4.source              : ${ipsecac0_id_address}

interface.ipsecac0.ike.v2.certificate : ${ipsecac0_certificate}
ike.v2.private-key                    : ${ipsecac0_private-key}

route.ipv4.0.destination : default
route.ipv4.0.gateway     : pppoe0

nat.ipv4.napt.0.private   : ${napt_private}
nat.ipv4.napt.0.interface : pppoe0

dns-forwarder.service                 : enable
dns-forwarder.0.address               : ipcp
dns-forwarder.listen.ipv4.0.interface : ge1
dns-forwarder.listen.ipv4.1.interface : ipsecac0

dhcp.server.service         : enable
dhcp.server.0.interface     : ge1
dhcp.server.0.pool.address  : ${pool_address}${lan_prefixlen}
dhcp.server.0.pool.count    : ${pool_count}
dhcp.server.0.dns.0.address : ${lan_address}

ntp.service          : enable
ntp.client.0.address : ${ntp_address}
 
resolver.service   : enable
resolver.0.address : ipcp

filter.ipv4.0.action              : pass
filter.ipv4.0.interface           : any
filter.ipv4.0.direction           : in
filter.ipv4.0.source.address      : 202.221.49.0/24
filter.ipv4.0.destination.address : self
filter.ipv4.0.logging             : off
filter.ipv4.2.action              : pass
filter.ipv4.2.interface           : any
filter.ipv4.2.direction           : in
filter.ipv4.2.source.address      : 202.221.50.0/23
filter.ipv4.2.destination.address : self
filter.ipv4.2.logging             : off

route.ipv4.10001.destination : 202.221.49.0/24
route.ipv4.10001.gateway     : pppoe0
route.ipv4.10001.distance    : 1
route.ipv4.10002.destination : 202.221.49.0/24
route.ipv4.10002.gateway     : discard
route.ipv4.10002.distance    : 100
route.ipv4.10003.destination : 202.221.50.0/23
route.ipv4.10003.gateway     : pppoe0
route.ipv4.10003.distance    : 1
route.ipv4.10004.destination : 202.221.50.0/23
route.ipv4.10004.gateway     : discard
route.ipv4.10004.distance    : 100

用意するパラメータ

項目 設定箇所 サンプル拠点 備考
ホスト名 ${hostname} sa01
リモートアクセスユーザ1のユーザ名 ${user1_name} user01
リモートアクセスユーザ1のパスワード ${user1_password} user01password
リモートアクセスユーザ2のユーザ名 ${user2_name} user02
リモートアクセスユーザ2のパスワード ${user2_password} user02password
トンネル終端アドレス ${ipsecac0_address} 192.168.2.1
リモートアクセスクライアント用アドレスプール(サブネット) ${ipsecac0_pool_address} 192.168.2.0/24 192.168.2.2-192.168.2.254の範囲
IKEv2自己識別子の種類(リモートアクセスサーバアドレスの種類) ${ipsecac0_id_type} fqdn(またはaddress) 証明書のCommonNameに合わせる
IKEv2自己識別子のFQDN(種類がfqdnの場合) ${ipsecac0_id_fqdn} example.seil.jp 証明書のCommonNameに合わせる
IKEv2自己識別子のIPアドレス(種類がaddressの場合) ${ipsecac0_id_address} 203.0.113.1 証明書のCommonNameに合わせる
サーバ証明書 ${ipsecac0_certificate} "(証明書の文字列)"
サーバ証明書の秘密鍵 ${ipsecac0_private-key} "(秘密鍵の文字列)"
PPPoE接続サービスから指定されたID ${pppoe0_id} s1user@s1.example.jp 置換必須
PPPoE接続サービスから指定されたパスワード ${pppoe0_password} s1passowrd 置換必須
SAのLAN側アドレス ${lan_address} 192.168.1.1
LANのサブネットマスク ${lan_prefixlen} /24
NAPT適用範囲 ${napt_private} 192.168.1.0-192.168.2.255
DHCPのアドレスプールの先頭 ${pool_address} 192.168.1.2
DHCPのアドレスプールの個数 ${pool_count} 253 192.168.1.2-192.168.1.254の範囲
NTPサーバアドレス ${ntp_address} 192.0.2.123 置換必須/無指定時はNTPが動作しない
サンプルCSV(SACMテンプレートセット向け)
【ダウンロード】

テンプレート用サンプルCSV

[name],[sa_label],hostname,user1_name,user1_password,user2_name,user2_password,ipsecac0_address,ipsecac0_pool_address,ipsecac0_id_type,ipsecac0_id_fqdn,ipsecac0_id_address,ipsecac0_certificate,ipsecac0_private-key,pppoe0_id,pppoe0_password,lan_address,lan_prefixlen,napt_private,pool_address,pool_count,ntp_address
[default],,,,,,,,,,,,,,,,,,,,,
<sa-Code>,サンプル拠点,SA01,user01,user01password,user02,user02password,192.168.2.1,192.168.2.0/24,fqdn(またはaddress),example.seil.jp,203.0.113.1,"(証明書の文字列)","(秘密鍵の文字列)",s1user@s1.example.jp,s1passowrd,192.168.1.1,/24,192.168.1.0-192.168.2.255,192.168.1.2,253,192.0.2.123
注:
<SA-Code> を実在するSAコードに書き換える必要があります。
警告:
CSV操作に関する注意
インポート操作は取り消せません。
変数や所属SAが存在するテンプレートセットにインポートするときは、必ず事前にバックアップとしてエクスポートしてください。
インポートは、当該テンプレートの所属SAのリスト全体を置き換えます。CSVに含まれないサービスアダプタは所属が解除され変数は初期化されます。

コンフィグの説明

認証レルム
interface.ipsecac0.ike.v2.authentication.0.type            : local
interface.ipsecac0.ike.v2.authentication.0.realm.suffix    : @${hostname}
interface.ipsecac0.ike.v2.authentication.0.user.1.name     : ${user1_name}
interface.ipsecac0.ike.v2.authentication.0.user.1.password : ${user1_password}
ローカル認証レルムとし、ユーザがクライアント端末に設定するユーザ名とパスワードを直接コンフィグに記述します。
ここでは例として認証レルムにサフィックスを設定し、サフィックス文字列にホスト名を流用しているため、ユーザがVPN設定に入力するべきユーザ名は「user01@sa01」のようになります。
認証レルムを1つのみ設定する場合はサフィックスの設定を省略できます。認証レルムを1つのみ設定する場合は、サフィックスの有無またはサフィックスで認証レルムを識別できるように設定する必要があります。
リモートアクセス用アドレスプール
interface.ipsecac0.ike.v2.config.pool.ipv4.0.type          : dynamic
interface.ipsecac0.ike.v2.config.pool.ipv4.0.address       : ${ipsecac0_pool_address}
リモートアクセスクライアントに割り当てるIPアドレスの範囲を、ネットワークアドレスとサブネットマスク形式で設定します。
他のネットワークと重複しない範囲を使用してください。
ここでは ...type : dynamic を指定し動的割当としています。
IPsecACインタフェースのIPアドレス (interface.ipsecac0.ipv4.address)
VPNトンネルのトンネル終端アドレスを指定します。一般的に他のネットワークと重複しないプライベートアドレスを使用します。
ここではアドレスプール内から割り当てています。
クライアントに通知するDNS(interface.ipsecac0.ike.v2.config.dns-server.ipv4.0.address)
ここではDNS中継機能を使用するため、トンネル終端アドレスを指定しています。
証明書証明書と秘密鍵
サーバ証明書と秘密鍵は、PEM形式のテキストの改行を \\n に置き換えて、1行で記述します。
用意した証明書の例:
-----BEGIN CERTIFICATE-----
MIIEFTCCA36gAwIBAgIQGV6r+gQg+EeuFZYVviCtczANBgkqhkiG9w0BAQUFADCB
~略~
VQQLFDFUZXJtcyBvZiB1c2UgYXQgd3d3LnZlcmlzaWduLmNvbS9jcHMvdGVzdGNh
-----END CERTIFICATE-----
  • 中間証明機関の証明書を含めることはできません。
用意した秘密鍵の例:
-----BEGIN RSA PRIVATE KEY-----
MIIBOQIBAAJBALNlZuPvzVKkCAdewNi87lRFh/rVexQINBwj8lQBEU5Jn2Y+G/V/
~略~
71ia1aotw6M1j6LvLPVpj+vBvAG7bf/nm4JXRvA=
-----END RSA PRIVATE KEY-----
これらをそれぞれ次のように記述します。
interface.ipsecac0.ike.v2.certificate : "-----BEGIN CERTIFICATE-----\\nMIIEFTCCA36gAwIBAgIQGV6r+gQg+EeuFZYVviCtczANBgkqhkiG9w0BAQUFADCB\\n~略~\\nVQQLFDFUZXJtcyBvZiB1c2UgYXQgd3d3LnZlcmlzaWduLmNvbS9jcHMvdGVzdGNh\\n-----END CERTIFICATE-----\\n
ike.v2.private-key                    : "-----BEGIN RSA PRIVATE KEY-----\\nMIIBOQIBAAJBALNlZuPvzVKkCAdewNi87lRFh/rVexQINBwj8lQBEU5Jn2Y+G/V/\\n~略~\\n71ia1aotw6M1j6LvLPVpj+vBvAG7bf/nm4JXRvA=\\n-----END RSA PRIVATE KEY-----\\n"
  • 秘密鍵の1行目が "BEGIN PRIVATE KEY" となっている場合は "BEGIN RSA PRIVATE KEY" と書き換えてください。
IKEv2の折衝
interface.ipsecac0.ike.v2.my-identifier.type: ${ipsecac0_id_type}
interface.ipsecac0.ike.v2.my-identifier.fqdn: ${ipsecac0_id_fqdn}
interface.ipsecac0.ipv4.source              : ${ipsecac0_id_address}
証明書のCommonNameがFQDN形式の場合は...my-identifier.typefqdnを指定し、...my-identifier.typeにFQDNを指定します。...ipv4.sourceは省略できます。クライアント端末がVPN接続先に指定し名前解決可能なFQDNである必要があります。
証明書のCommonNameがIPアドレス形式の場合は...my-identifier.typeaddressを指定し、...ipv4.sourceにIPアドレスを指定します。...my-identifier.typeは省略できます。クライアント端末がVPN接続先に指定し到達可能なIPアドレスである必要があります。

IPsecACに関する設定項目は以上です。以下の項目は基本的なインターネット接続やLANに関する設定です。

PPPoE (interface.pppoe0...)
IDとパスワードを設定するのみで接続可能です。設定が反映され次第接続を開始し、接続状態を維持します。
サービスから払い出されるIPアドレスが1個のサービスでは接続時にIPアドレスを自動取得可能なため、PPPoEインタフェースにアドレスを設定する必要はありません。
静的経路 (route.ipv4...)
デフォルト経路を設定し、ゲートウェイにPPPoEインタフェースを指定します。
サンプルでは末尾にSMFv2サービスの通信要件に当たる経路を記載していますが、デフォルト経路とゲートウェイが同一のため省略できます。
LANインタフェース (interface.ge1...)
LANのプライベートアドレスを設定します。
NAPT (nat.ipv4.napt...)
指定範囲に一致するプライベートアドレスを送信元とするパケットをPPPoEインタフェースから送信するときNAPTが適用されます。
本装置自身がPPPoEインタフェースから送信する自発パケットは、送信元アドレスはPPPoEインタフェースのIPアドレスとなるため通常は適用されません。
ここではLANのプライベートアドレスとリモートアクセスクライアント用のアドレスプールを包含する指定しています。
DNS中継 (dns-forwarder...)
LAN内のホストからDNSクエリを受信し中継することができます。キャッシュ機能は持ちません。
PPPoE接続サービスではアドレス情報をIPCPで取得できるため、それによって取得したDNSを中継先に使用します。
リモートアクセスクライアント向けにも提供するため、リクエストを受け付けるインタフェースにipsecac0を追加しています。
DHCPサーバ (dhcp.server...)
LAN内のホストがアドレス設定を自動構成するための情報を提供します。
アドレスプールの個数は、払い出す先頭のアドレスからブロードキャストアドレスを含まない範囲を指定します。
NTPクライアント (ntp...)
システムの時刻合わせによりログ等の確認がしやすくなります。
ここではNTPクライアント機能のみ使用しNTPサーバ機能は無効化(デフォルト)しています。
注:
NTPサーバ機能を有効化する場合はオープンNTPとならないよう適切なフィルタリングを設定する必要があります。
リゾルバ (resolver)
本装置自身が名前解決に使用します。
IPフィルタ (filter.ipv4...)
サンプルではSMFv2サービスの通信要件に当たるネットワークを明示的にパスしていますが、これを含む範囲をブロックするフィルタを設定しない場合は省略できます。
LAN側ネットワークはプライベートアドレスであり、かつ、NAPTを適用しているため、基本的にWAN側が起点となる通信はLAN側へ到達しません。