フロートリンクによる多拠点型IPsec-VPN(IPv4 メッシュ型)
コンフィグテンプレートを使用し多拠点間のメッシュ型VPNをシンプルに構成する設定例。
始める前に
- SMFv2サービスのサービスアダプタとして登録する必要があります。
- コンフィグテンプレートを使用します。
- IPsec VPNおよびフロートリンクの基本的な利用方法の理解が必要です。
このタスクについて
- テンプレートの条件分岐マクロにより、一つのテンプレートでPPPoEまたはDHCPによるWAN接続に対応します。PPPoEを利用する実網テストやルータ配下のDHCP環境でのテストに応用できます。
- テンプレートのループ処理マクロにより対向拠点毎の個別設定を自動生成します。拠点数の増減時ににコンフィグを編集する必要がありません。
- 拠点間の通信にVPNを使用し、それ以外のインターネットアクセスは直接WAN回線を使用します。
- ここでは3拠点分のサンプルパラメータを用意していますが、追加拠点も容易に設定できます。
- IPsec NAT Traversalが働きますが、対向毎に一方はNAT配下でない必要があります。
- 拠点間通信がNATを経由しないプライベートネットワーク内でのテストも可能です。但しサービスホストへの到達性は必要です。
構成イメージ
設定例
サンプルコンフィグ
- テンプレート名
IPv4_IPsecVPN_fullMesh
#if( ${wan_interface} == "ge0" )
interface.ge0.ipv4.address : dhcp
route.ipv4.0.destination : default
route.ipv4.0.gateway : dhcp
#else
interface.pppoe0.id : ${pppoe0_id}
interface.pppoe0.password : ${pppoe0_password}
route.ipv4.0.destination : default
route.ipv4.0.gateway : pppoe0
#end
#foreach( ${peer} in ${IPv4_IPsecVPN_fullMesh} )
#if ( ${system.sa_code} != ${peer.system.sa_code} )
interface.ipsec${loopCount}.floatlink.address-family : ipv4
interface.ipsec${loopCount}.floatlink.my-address : ${wan_interface}
interface.ipsec${loopCount}.floatlink.key : *floatlinkGroupKey*
interface.ipsec${loopCount}.floatlink.name-service : *https://floatlinkurl*
interface.ipsec${loopCount}.floatlink.my-node-id : ${system.sa_code}
interface.ipsec${loopCount}.floatlink.peer-node-id : ${peer.system.sa_code}
interface.ipsec${loopCount}.preshared-key : *preSharedKey*
route.ipv4.10.destination : ${peer.lan_prefixlen}.0/24
route.ipv4.10.gateway : ipsec${loopCount}
#end
#end
interface.ge1.ipv4.address : ${lan_prefixlen}.1/24
nat.ipv4.napt.0.private : ${lan_prefixlen}.0-${lan_prefixlen}.1.255
nat.ipv4.napt.0.interface : ${wan_interface}
dhcp.server.service : enable
dhcp.server.0.interface : ge1
dhcp.server.0.pool.address : ${lan_prefixlen}.101/24
dhcp.server.0.pool.count : 150
dhcp.server.0.dns.0.address : ${lan_prefixlen}.1
dns-forwarder.service : enable
dns-forwarder.0.address : dhcp
dns-forwarder.1.address : ipcp
dns-forwarder.listen.ipv4.0.interface : ge1
resolver.service : enable
resolver.0.address : dhcp
resolver.1.address : ipcp
コンフィグ内の置換必須箇所
サンプルコンフィグをそのままテンプレートコンフィグ入力フォームにコピー&ペーストできますが、下線箇所は置換が必須です。設定項目 | 置換必須箇所 | 書式 |
---|---|---|
IKEの事前共有鍵 | *preSharedKey* |
秘匿すべき任意文字列の鍵 |
フロートリンクのネームサーバ | *https://floatlinkurl* |
サービスから指定されたURL |
フロートリンクのグループキー | *floatlinkGroupKey* |
任意文字列のグループ識別子 |
用意するパラメータ
設定項目 | テンプレート変数 | 拠点1の例 | 拠点2の例 | 拠点3の例 | 備考 |
---|---|---|---|---|---|
LANのネットワークプレフィックス | ${lan_prefixlen} | 192.168.1 | 192.168.2 | 192.168.3 | |
使用するWANインタフェース | ${wan_interface} | ge0 | ge0 | pppoe0 | ge0またはpppoe0 |
PPPoEのID | ${pppoe0_id} | user03@example.jp | pppoe0の場合必須 | ||
PPPoEのパスワード | ${pppoe0_password} | user02passowrd | pppoe0の場合必須 |
テンプレート用サンプルCSV
[name],[sa_label],lan_prefixlen,wan_interface,pppoe0_id,pppoe0_password
[default],,,,,
<sa-Code>,拠点1の例,192.168.1,ge0,,
<sa-Code>,拠点2の例,192.168.2,ge0,,
<sa-Code>,拠点3の例,192.168.3,pppoe0,user03@example.jp,user02passowrd
注:
<SA-Code>
を実在するSAコードに書き換える必要があります。
警告:
- CSV操作に関する注意
- インポート操作は取り消せません。
マクロコマンドとマクロ内の変数
- ${lan_prefixlen}
- IPアドレスのネットワーク部のみ変数化し、複数のIPアドレス指定箇所に使用します。拠点個別の設定自由度が下がりますが、拠点追加時の設定誤りを避けることができます。
- #if( ${wan_interface} == "ge0" ) ~ #else ~ #end
- #if() ~ #end は条件分岐を行うマクロコマンドです。対象拠点のWANインタフェースが
ge0
に一致する(==)ことを条件にDHCPによるWAN接続を設定し、そうでない(pppoe0
)の場合は #else 以降のPPPoE接続を設定します。 - #foreach( ${peer} in ${IPv4_IPsecVPN_fullMesh} ) ~ #end
- #foreach() ~ #end はループ処理を行うマクロコマンドです。
- #if ( ${system.sa_code} != ${peer.system.sa_code} ) ~ #end
- ここでは左辺と右辺が一致しない(!=)ことを条件にマクロ内のコンフィグを展開します。
- ipsec${loopCount}
- ${loopCount}はループ位置(回数)の数値に置き換わるシステム定義変数です。0から始まりループするたびインクリメントされます。
- floatlink.my-node-id : ${system.sa_code}-pppoe0
- システム定義変数を利用してSAコードを自身のノードIDとしています。
その他のコンフィグの説明
- NAPT (nat.ipv4.napt...)
- NAPTの適用範囲と適用インタフェースにテンプレート変数を使用しています。
- DHCPサーバ (dhcp.server...)
- NAPTと同様にアドレスプールの範囲等にテンプレート変数を使用しています。
- DNS中継 (dns-forwarder...)
- DNSアドレスの取得にIPCPとDHCPを両方指定しています。DNS中継ではいずれか取得可能であったDNSを使用するため、条件分岐マクロを記述する必要はありません。
- リゾルバ (resolver)
- DNS中継と同様に、DNSアドレスの取得にIPCPとDHCPを両方指定しています。
- IPフィルタ (filter.ipv4...)
- このサンプルではコンフィグをシンプルにするためIPフィルタの設定を省いていますが、実際の運用では適切なフィルタを設定してください。