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

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

始める前に

  • グローバルIPv4アドレスを1個、固定で割り当てられるPPPoE型のインターネット接続サービスを契約しているものとします。ここではアクセス回線にNTT フレッツ・光ネクスト、ISPにIIJ FiberAccess/F サービス(1/256C)を使用するものとします。
  • SSTPを使用するにはサーバ証明書(PEM形式のX.509 証明書)を用意する必要があります。
適合ファームウェア
SEIL/X4, SEIL/x86 Ayame, SEIL CA10:ver.2.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.pppac0.authentication.1.user.1.name     : ${user1_name}
interface.pppac0.authentication.1.user.1.password : ${user1_password}
interface.pppac0.authentication.1.user.2.name     : ${user2_name}
interface.pppac0.authentication.1.user.2.password : ${user2_password}

interface.pppac0.ipv4.address                   : ${pppac0_address}
interface.pppac0.ipcp.pool.99.address           : ${pppac_pool_address}
interface.pppac0.ipcp.pool.99.count             : ${pppac_pool_count}
interface.pppac0.ipcp.pool.99.type              : dynamic
interface.pppac0.ipcp.dns-server.0.ipv4.address : ${pppac0_address}
interface.pppac0.sstp.service                   : enable
interface.pppac0.sstp.authentication.0.method   : mschapv2
interface.pppac0.sstp.certificate               : ${pppac0_certificate}
interface.pppac0.sstp.private-key               : ${pppac0_private-key}

interface.pppac0.l2tp.ipsec.requirement : optional

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 : pppac0

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
トンネル終端アドレス ${pppac0_address} 192.168.2.1
リモートアクセスクライアント用アドレスプールの先頭 ${pppac_pool_address} 192.168.2.10
リモートアクセスクライアント用アドレスプールの個数 ${pppac_pool_count} 200 192.168.2.10-192.168.2.210の範囲
サーバ証明書 ${pppac_certificate} "(証明書の文字列)"
サーバ証明書の秘密鍵 ${pppac_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,pppac0_address,pppac_pool_address,pppac_pool_count,pppac_certificate,pppac_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.10,200,"(証明書の文字列)","(秘密鍵の文字列)",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.pppac0.authentication...)
リモートアクセスユーザがクライアント端末に設定するユーザ名とパスワードを指定します。
リモートアクセス用アドレスプール (interface.pppac0.ipcp.pool)
リモートアクセスクライアントに割り当てるIPアドレスの範囲を設定します。
他のネットワークと重複しないアドレスを使用してください。
ここでは ...type : dynamic を指定し動的割当としています。
PPPACインタフェースのIPアドレス (interface.pppac0.ipv4.address)
VPNトンネルのトンネル終端アドレスを指定します。一般的に他のネットワークと重複しないプライベートアドレスを使用します。
ここではリモートアクセスクライアントに通知するDNSサーバアドレスとしても使用しています。
SSTPサービス (interface.pppac0.sstp...)
SSTPのPPP認証にMS-CHAPv2を使用します。
サーバ証明書と秘密鍵は、PEM形式のテキストの改行を \\n に置き換えて、1行で記述します。
用意した証明書の例:
-----BEGIN CERTIFICATE-----
MIIEFTCCA36gAwIBAgIQGV6r+gQg+EeuFZYVviCtczANBgkqhkiG9w0BAQUFADCB
~略(証明書)~
VQQLFDFUZXJtcyBvZiB1c2UgYXQgd3d3LnZlcmlzaWduLmNvbS9jcHMvdGVzdGNh
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIF4TCCBUqgAwIBAgIQDlq7+OQkCAxzJTxsrslyczANBgkqhkiG9w0BAQUFADCB8D
~略(中間証明機関の証明書)~
b3JpdHkgLSBHMjFDMEEGA1UECxM6VGVybXMgb2YgdXNlIGF0IGh0dHBzOi8vd3d3
-----END CERTIFICATE-----
  • この例は中間証明機関の証明書を含みます。
用意した秘密鍵の例:
-----BEGIN RSA PRIVATE KEY-----
MIIBOQIBAAJBALNlZuPvzVKkCAdewNi87lRFh/rVexQINBwj8lQBEU5Jn2Y+G/V/
~略~
71ia1aotw6M1j6LvLPVpj+vBvAG7bf/nm4JXRvA=
-----END RSA PRIVATE KEY-----
これらをそれぞれ次のように記述します。
interface.pppac0.sstp.certificate : "-----BEGIN CERTIFICATE-----\\nMIIEFTCCA36gAwIBAgIQGV6r+gQg+EeuFZYVviCtczANBgkqhkiG9w0BAQUFADCB\\n~略(証明書)~\\nVQQLFDFUZXJtcyBvZiB1c2UgYXQgd3d3LnZlcmlzaWduLmNvbS9jcHMvdGVzdGNh\\n-----END CERTIFICATE-----\\n-----BEGIN CERTIFICATE-----\\nMIIF4TCCBUqgAwIBAgIQDlq7+OQkCAxzJTxsrslyczANBgkqhkiG9w0BAQUFADCB8D\\n~略(中間証明機関の証明書)~\\nb3JpdHkgLSBHMjFDMEEGA1UECxM6VGVybXMgb2YgdXNlIGF0IGh0dHBzOi8vd3d3\\n-----END CERTIFICATE-----\\n"
interface.pppac0.sstp.private-key : "-----BEGIN RSA PRIVATE KEY-----\\nMIIBOQIBAAJBALNlZuPvzVKkCAdewNi87lRFh/rVexQINBwj8lQBEU5Jn2Y+G/V/\\n~略~\\n71ia1aotw6M1j6LvLPVpj+vBvAG7bf/nm4JXRvA=\\n-----END RSA PRIVATE KEY-----\\n"
L2TP/IPsecサービス (interface.pppac0.l2tp.ipsec.requirement : optional)
PPPAC機能のコンフィグは、書式上デフォルトでIPsec事前共有鍵の設定が必須とされています。
しかしSSTPはIPsecを使用しないため、L2TP/IPsecを併用しない場合は ...l2tp.ipsec.requirement : optional を設定し書式エラーを回避します。
これは interface.pppac0.l2tp.ipsec.preshared-key に任意の文字列(ダミー)を設定することでも同様に回避できます。
PPPoE (interface.pppoe0...)
IDとパスワードを設定するのみで接続可能です。設定が反映され次第接続を開始し、接続状態を維持します。
サービスから払い出されるIPアドレスが1個のサービスでは接続時にIPアドレスを自動取得可能なため、PPPoEインタフェースにアドレスを設定する必要はありません。
静的経路 (route.ipv4...)
デフォルト経路を設定し、ゲートウェイにPPPoEインタフェースを指定します。
サンプルでは末尾にSMFv2サービスの通信要件に当たる経路を記載していますが、デフォルト経路とゲートウェイが同一のため省略できます。
LANインタフェース (interface.ge1...)
LANのプライベートアドレスを設定します。
NAPT (nat.ipv4.napt...)
指定範囲に一致するプライベートアドレスを送信元とするパケットをPPPoEインタフェースから送信するときNAPTが適用されます。
SA自身がPPPoEインタフェースから送信する自発パケットは、送信元アドレスはPPPoEインタフェースのIPアドレスとなるため通常は適用されません。
ここではLANのプライベートアドレスとリモートアクセスクライアント用のアドレスプールを包含する指定しています。
DNS中継 (dns-forwarder...)
LAN内のホストからDNSクエリを受信し中継することができます。キャッシュ機能は持ちません。
PPPoE接続サービスではアドレス情報をIPCPで取得できるため、それによって取得したDNSを中継先に使用します。
リモートアクセスクライアント向けにも提供するため、リクエストを受け付けるインタフェースにpppac0を追加しています。
DHCPサーバ (dhcp.server...)
LAN内のホストがアドレス設定を自動構成するための情報を提供します。
アドレスプールの個数は、払い出す先頭のアドレスからブロードキャストアドレスを含まない範囲を指定します。
NTPクライアント (ntp...)
システムの時刻合わせによりログ等の確認がしやすくなります。
ここではNTPクライアント機能のみ使用しNTPサーバ機能は無効化(デフォルト)しています。
注: NTPサーバ機能を有効化する場合はオープンNTPとならないよう適切なフィルタリングを設定する必要があります。
リゾルバ (resolver)
SA自身が名前解決に使用します。
SMFv2モードでは必ず設定しなければなりません。
注: リゾルバの設定誤りはSMFv2モードでモジュール同期が失敗する原因になります。
IPフィルタ (filter.ipv4...)
サンプルではSMFv2サービスの通信要件に当たるネットワークを明示的にパスしていますが、これを含む範囲をブロックするフィルタを設定しない場合は省略できます。
LAN側ネットワークはプライベートアドレスであり、かつ、NAPTを適用しているため、基本的にWAN側が起点となる通信はLAN側へ到達しません。