サンプルコンフィグ
- テンプレート名
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の場合必須 |
マクロコマンドとマクロ内の変数
- ${lan_prefixlen}
- IPアドレスのネットワーク部のみ変数化し、複数のIPアドレス指定箇所に使用します。拠点個別の設定自由度が下がりますが、拠点追加時の設定誤りを避けることができます。
- サンプルでは "192.168.1" から次の値が展開されます。
- ge0 のIPアドレス (192.168.1.1/24)
- ge0 のネットワークアドレス (192.168.1.0/24)
- NAPT適用範囲 (192.168.1.0-192.168.1.255)
- DHCPアドレスプールの先頭 (192.168.1.101/24)
- #if( ${wan_interface} == "ge0" ) ~ #else ~ #end
- #if() ~ #end は条件分岐を行うマクロコマンドです。対象拠点のWANインタフェースが
ge0
に一致する(==)ことを条件にDHCPによるWAN接続を設定し、そうでない(pppoe0
)の場合は #else 以降のPPPoE接続を設定します。
- インタフェースに依存するデフォルト経路もここで設定します。
- #foreach( ${peer} in ${IPv4_IPsecVPN_fullMesh} ) ~ #end
- #foreach() ~ #end はループ処理を行うマクロコマンドです。
- IPv4_IPsecVPN_fullMesh はテンプレート名を記述します。任意の文字列を使用できますが、テンプレート名と一致する必要があります。
- このテンプレートに所属する先頭のSAの変数セットを${peer}に代入します。この値はループするたび次のSAの変数セットに置き換わります。
peer
は任意の文字列を使用できます。
- #if ( ${system.sa_code} != ${peer.system.sa_code} ) ~ #end
- ここでは左辺と右辺が一致しない(!=)ことを条件にマクロ内のコンフィグを展開します。
- ${system.sa_code} はシステム定義変数です。このテンプレートの展開対象のSAコードに置き換わります。
- ${peer.system.sa_code} は現在ループ処理中のSAの変数セット(
peer
)からSAコードを取り出します。つまり対向拠点のSAコードにあたります。
- ループ処理の対象はテンプレートに所属する全SAが含まれるため、テンプレート展開対象のSAコードと対向拠点のSAコードが同じ場合にはコンフィグを展開しません。
- また、
...floatlink.my-node-id :
と ...floatlink.peer-node-id :
にそれぞれ指定しVPN対向を定義しています。
- さらに、対向拠点のネットワークアドレスを ${peer.lan_prefixlen}.0/24 のように展開し、IPsecインタフェースをゲートウェイとする静的経路を設定します。
- 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フィルタの設定を省いていますが、実際の運用では適切なフィルタを設定してください。