SEILとMPCでつくる自宅サーバ用ネットワーク

2022年12月19日 月曜日


【この記事を書いた人】
梅津 勝平

SMF系サービスの開発・運用を担当しています。趣味は自宅サーバやアマチュア無線。systemdでできることはsystemdにやらせたい派です。

「SEILとMPCでつくる自宅サーバ用ネットワーク」のイメージ

IIJ 2022 TECHアドベントカレンダー 12/19(月)の記事です】

初めまして。梅津です。2021年に新卒入社し、SMFsxMPCといったSEILを管理するためのSMF系サービスの開発、運用を担当しています。

長年趣味として自宅サーバを楽しんできましたが、回線工事ができずアパート提供のインターネットしか選択肢がなかったため自宅サーバをインターネットに出せなくなってしまいました。この問題をIIJ製のルータであるSEILと、これを管理するMPCを使うことで解消しました。

今回はその問題を解消するための設定例について紹介いたします。

また、クリスマスには少し早いですが、本記事の最後に、SEIL/x86 Ayame スタンダードエディションを50%OFFで購入できるプロモーションコードを用意いたしました!(有効期限:2023/01/09 23:59まで)
ぜひ最後までご覧ください。

背景

今ではVPSやクラウドコンピューティングなど実機を持たずともインターネットにコンテンツを公開可能な時代です。しかし、実機をいじったり、サーバのファンやHDDの駆動音で季節の移り変わりを感じられるのは自宅サーバの醍醐味です。自宅サーバの運用は高1の時、友人にMinecraftを布教されたことをきっかけに始め、就職を機に実家を出るまでの9年間続けてきました。

当然就職しても機材を移し自宅サーバの運用を続けるつもりでした。しかし、

  • 社宅のインターネットが無料インターネット(強制)であるため回線を引けない。PPPoEパススルーされずにブロックされる。
  • IPv6通信も外部から始まった通信はブロックされる。

といった課題があり自宅にサーバを置くことはかないませんでした。

実家にラズパイを置いてみたり、VPSを試してみたりしましたが

  • 設定を誤ったり、何らかの理由で接続できなくなった場合に回復するすべがない
  • これまで動かしてきたサーバ機より圧倒的に性能が低い
  • ネットワークの帯域制限があったり従量課金

といった点があり打開策を模索していました。また、業務で開発に携わるサービスやSEILに対する理解が浅いという課題を感じました。

ある時、SEILをつかって実家からDMZセグメントを延伸することで自宅サーバ環境の復活が可能ではないか、MPCを使って管理すれば開発しているサービスへの理解も深まって一石二鳥ではないかと思い立ち実際に試してみました。

自宅拠点ラック

用語の整理

SEIL

「SEIL(ザイル)」は、IIJがISPのノウハウを結集して開発した高機能ルータです。 *https://www.seil.jp より

今回は後述するMPCからSEILを管理することで遠隔地のネットワークを管理します。サービスアダプタ(SA)と呼ばれる無線LANが利用可能な製品も存在します。

SMF(v2)

SMF [SEIL Management Framework]は、ネットワークにつながるあらゆる機器の自動設定と一元管理機能を提供する次世代のマネージメントフレームワークです。SMFに対応する機器は、ケーブルをつないで電源を入れるだけで、すぐにネットワークサービスを利用できます。*https://www.smf.jp/overview/より

この仕組みによりSEILは現地でケーブルを差し込むだけでインターネットにつながるようになります。バージョンアップや管理のための操作も行うことができるため、設置場所に詳しい人がいなくても問題ありません。

MPC(IIJマルチプロダクトコントローラサービス)

IIJマルチプロダクトコントローラサービスは、IIJの高機能ルータ「SEIL(ザイル)シリーズ」をはじめとする様々なプロダクトを遠隔から一元的に管理する仕組みを提供するサービスです。 * https://www.iij.ad.jp/biz/mpc/ より

前述したSMFを使ってSEILを管理するためのサービスです。今回はコンフィグの設定や監視のために使用します。

課題の整理

今回ネットワーク構成や機材を考えるにあたって以下の課題を解決することを目標にしました。

  1. ネットワーク面
    1. 実家のDMZセグメントを自宅に延伸する
    2. 実家のネットワークは冗長性を確保する
    3. 静的経路は(管理が面倒なため)可能な限り動的経路設定を行う
  2. 運用面
    1. 遠隔地のネットワークを管理できる
    2. 機器の設定を誤って締め出されても操作できる手段を提供する

ネットワーク構成

前述した課題を解決すべく次のようなネットワーク構成をとりました。その課題と解決方法について順に説明していきます。

なお、実家構成のSEIL X1直下はルータである必要はありませんが、ファンレスで実家においてもうるさいと苦情を言われないマネージドなL2スイッチが足りず、余っていたルータで代用しました。自宅構成でも直下のルータは基本不要ですが、実家と構成を合わせるのとDMZセグメントの拡張性のために用意しました。

1.ネットワーク面

1a. DMZセグメントを自宅に延伸する

DMZセグメントをL2TPにて転送することで対応します。SEILはSMFv2モード(MPC,SACM)で使用するとフロートリンクというVPN自動設定機能が使用でき、これと組み合わせることによってアドレス固定ではなかったり、NAT環境下であってもVPNを構成できます。

今回は自宅環境下が外部から始まった通信を受信できないため、NAT環境下であると読み替えて構成します。

1b. 冗長性を確保

ネットワーク的にはvrrpを用いてゲートウェイの冗長化を行います。

SEILの機器故障が生じた場合にはMPCのエントリとスタンバイの交換機能を用いてあらかじめ配備してある予備機と交換します。これはエントリ(稼働機)の設定をスタンバイ(予備機)に入れ替える機能です。もし機器障害が生じても機器を入れ替えて電源を入れればいいので断時間を抑えることが可能です。

1c. 動的経路設定

各拠点内はOSPF、拠点間はBGPを用いる。

2.運用面

2a. 遠隔地のネットワークを管理

今回はMPCを使用することで対応します。

2b. 機器の設定を誤って締め出されても操作できる手段

SEIL配下のルータや、ラズパイについてはコンソールサーバからシリアル通信を行うことでネットワーク設定を間違ったとしても管理できるようにします。実家拠点ではSEIL/X1を、自宅ではSA-W2を使用します。本来はSEIL/X4で組むのが適切な構成ですが、ちょうど手元にあったおもちゃ検証機器を使用したことからこのような構成になりました。

設定・構築

コンフィグの作成

MPCでは2つの形式でコンフィグを作成することができます。

  • コマンドラインコンフィグ
    • 機器に反映されてほしい最終状態を記述する基本となる書き方。起動中の機器に対して設定変更したい場合はこれ自体を書き換えて反映操作を行う。機器が新しいコンフィグの状態になるために必要なコマンドを自動で実行してくれる。もし反映後のコンフィグでMPCから管理不能な状態に陥る場合には反映操作を取り消し、管理可能だったコンフィグまで自動でロールバックする。
  • コマンドラインテンプレート  (今回はこちらを利用)
    • テンプレートからコンフィグを生成する。こちらでは機器に変数を定義することができ、テンプレートAからテンプレートBの機器Cのfoo変数を参照するようなコンフィグの生成が可能。これらの機能のためにこのモードを使用する。
    • 変数
      • システム変数
        • システムが自動で生成してくれる変数。監視設定や、契約コードなどをコンフィグに使いたいときに使用する。
      • グローバル変数
        • すべての機器から使用できる変数。相互接続するVPNの事前共有鍵など共通の値を設定する必要がある場合などに使用する。
      • ローカル変数
        • 機器固有の値。デフォルト値も設定可能。hostnameや機能の有効無効フラグなど様々な使い方ができる。

コンフィグの解説

今回はテンプレートを使ってインターフェースの基本設定、L2TP/IPsec、BGPに絞って解説します。簡単のためfilterの設定は省くので実環境では適宜設定してください。

解説するうえで登場する機器とテンプレート名の対応は以下のようになります。テンプレートには複数台の機器が所属できます。典型的なハブ&スポーク型VPNであれば、ハブとスポークの2つのテンプレートで構成するのが典型的な書き方です。

機器名 実家常用系X1 DMZ X1 自宅常用系 SA-W2
テンプレート名 common-GW DMZ-GW HOME-SAGW

自宅常用系SA-W2と対向となるDMZ X1の設定を相互に比較しながら解説を行います。これはSEIL X1を含む BPV4 , SEIL/x86 Fuji までの機種はコマンド形式で設定を記述しますが、SA-W2を含む SAシリーズやSEIL/X4,SEIL/x86 Ayame といった新しい機種ではキー・バリュー形式でコンフィグを記述するという違いが存在するためです。

なお、今回記載するコンフィグは執筆時点で最新のファームウェア(SEIL/X1 :7.08, SA-W2:5.21)での動作を確認しています。また、仕様上機能が存在するなら設定できるの精神で構築しているためトリッキーな作りであることをご承知おきください。

テンプレートコンフィグの挙動

route dynamic bgp my-as-number ${local.AS_no}
route dynamic bgp router-id ${local.router-id}

テンプレートコンフィグでは変数を使用可能です。例として${local.AS_no} となっている部分ではローカル変数という機器に設定されている変数が参照されます。以下の表のようにローカル変数が設定されている場合、上記のコンフィグをそれぞれの機器で展開すると次のようになります。

実家常用系 X1 DMZ X1
AS_no 65501 65501
router-id 10.0.0.1 192.168.220.2
自宅常用系 X1
route dynamic bgp my-as-number 65501
route dynamic bgp router-id 10.0.0.1
DMZ X1
route dynamic bgp my-as-number 65501
route dynamic bgp router-id 192.168.220.2

これ以降の解説ではこのテンプレートによる変数の展開の機能を前提に解説していきます。

 

基本のネットワークの設定

SEIL/X1のIPv4,v6の設定は昨年のアドベントカレンダー記事 SEILでつくる、“最強”ご家庭用ルータ ~ひかり電話無しプラン~ で詳しく解説されているのと同じ書き方ができるため省略します。

ここではSA-W2のipv4,ipv6,ブリッジの設定を解説します。物理的な配線やブリッジの構成は以下を想定しています。今回VLAN書き換えでBridge0とBridge1を分けて設定しているのはv6アドレスの取得手段がRAで振ってくる/64であること、Bridge0のみでv6のみパススルーする構成とOSPFのかみ合わせが悪かったことによります。また、必須ではありませんがWi-Fiの設定も行います。

SA-W2の物理配線

SA-W2のブリッジ接続構成

ブリッジインターフェースの設定

SA-W2のブリッジインターフェースでも通過させるプロトコルを指定したブリッジを構成可能です。また、これに対してフィルターを適用することも可能です。X1との設定の違いとしてはブリッジの形式がブルータからブリッジ仮想インターフェースに変更された点があります。シンプルな構成ではbridge0に上流のアドレスと下流のアドレスを両方指定してもSAがルーティング時に転送先アドレスから適切なアドレスを選択するためbridge1を省略が可能です。

ブリッジにはブリッジ以外のインターフェースを所属させることが可能です。しかし、各インターフェースは複数のブリッジに所属できません。このため、一度ge1側に出力しループ接続を構成することでbridge0bridge1の接続を実現しています。

## 上流からのRAを流すためにv6通信は通過させるが他の通信は分離する
## このインターフェースをMPCとの通信に使用する
interface.bridge0.description : v6pass
interface.bridge0.forward.ipv4 : disable
interface.bridge0.forward.ipv6 : enable
interface.bridge0.forward.pppoe : disable
interface.bridge0.forward.other : disable
interface.bridge0.member.0.interface : ge0
interface.bridge0.member.1.interface : vlan0
interface.bridge0.ipv4.address : dhcp
interface.bridge0.ipv6.address : router-advertisement

## ローカルネットワークブリッジ
interface.bridge1.description : local-bridge
interface.bridge1.member.0.interface : vlan1
interface.bridge1.member.2.interface : wlan4
interface.bridge1.ipv4.address: 10.0.0.1/24

## bridge0とbridge1を接続するため
interface.vlan0.description : bridge-conv
interface.vlan0.vid : 2
interface.vlan0.over : ge1

## ローカルネットワーク相当
interface.vlan1.description : base
interface.vlan1.vid : 1
interface.vlan1.over : ge1

## DMZ
interface.vlan10.description : DMZ
interface.vlan10.vid : 250
interface.vlan10.over : ge1

## DMZブリッジ
interface.bridge10.description : DMZ-bridge
interface.bridge10.member.0.interface : vlan10
interface.bridge10.member.10.interface : wlan5

## ge1側ポートのVLAN所属設定
interface.ge1p0.port : access
interface.ge1p0.vid : 1
interface.ge1p1.port : access
interface.ge1p1.vid : 1
## bridge0
interface.ge1p2.port : access
interface.ge1p2.vid : 2
## DMZL2
interface.ge1p3.port : access
interface.ge1p3.vid : 250
Wi-Fi設定

SA-W2ではWi-Fiを飛ばすことが可能なため設定します。また、延伸してきたDMZも手持ちのノートPCで接続しやすいようにWi-Fiへも飛ばします。これによりケーブルをわざわざ刺さなくともDMZ側のメンテナンスが可能になります。なお、幣宅では2.4GHz帯のみ対応の機器は存在しないため5GHz帯のみ使用します。SA-W2では各周波数帯ごとに最大4アクセスポイント設定可能です。

## ローカル側Wi-Fi
interface.wlan4.description : local
interface.wlan4.service : enable
interface.wlan4.mode : 11acvht40
interface.wlan4.ssid : ${local.AP_basename}
interface.wlan4.security : wpa-psk-tkip
interface.wlan4.country-code : jp
interface.wlan4.channel : indoor
interface.wlan4.wpa-passphrase : ${local.AP_password}

## DMZメンテ用Wi-Fi
interface.wlan5.description : DMZ
interface.wlan5.service : enable
interface.wlan5.mode : 11acvht40
interface.wlan5.ssid : ${local.AP_basename}-DMZ
interface.wlan5.security : wpa-psk-tkip
interface.wlan5.country-code : jp
interface.wlan5.channel : indoor
interface.wlan5.wpa-passphrase : ${local.AP_password}

BGP共通設定

BGPの共通設定です。OSPFやコネクト経路を対向拠点に再配布する設定を行います。

DMZ X1
route dynamic bgp my-as-number ${local.AS_no}
route dynamic bgp router-id ${local.router-id}
route dynamic bgp enable route dynamic redistribute ospf-to-bgp enable
route dynamic redistribute connected-to-bgp enable
route dynamic redistribute bgp-to-ospf enable
自宅常用系 SA-W2
bgp.my-as-number : ${local.AS_no}
bgp.router-id : ${local.router-id}
bgp.ipv4.redistribute-from.connected.redistribute : enable
bgp.ipv4.redistribute-from.ospf.redistribute : enable

 

フロートリンクを使ったL2TPのための共通設定

X1ではフロートリンクを使ってVPNを張るためには1行目が必ず必要です。IPsecの場合には不要ですが、L2TPを張るためにはl2tp hostnamel2tp router-idの指定が必要です。

SA-W2では各接続ごとにフロートリンクやL2TP hostnameの設定が可能であるため共通設定として必要な項目はありません。

DMZ X1
floatlink name-service add https://floatlink.sacm.jp/address

l2tp hostname ${local.hostname}
l2tp router-id ${local.router-id}

対向拠点との通信設定

テンプレートではforeachが使用できます。このループ中では ${loopCount}変数でループカウンタが使用できます。今回は台数が少なく、接続用途も異なることからインタフェース名を決め打ちにしていますが、本来はループカウンタ設定が可能です。また、foreachのループ中ではテンプレートに所属する他のSAに設定された変数の参照が可能です。IPsecの事前共有鍵やfloatlink-keyといった、接続する機器間で同じ値を使用するものはグローバル変数を使用。ルータIDといった機器固有の値はローカル変数を使用しています。これにより個々の値を確認しながら設定したり、ある機器の一つの値に変更が生じたときに関連する複数のコンフィグを直す不要となります。テンプレートコンフィグを使用した場合、変数を修正してから関連する機器にコンフィグ反映操作をするだけで変更が反映されます。

DMZ X1

実家拠点ではIPv6の通信に制限はありません。そのためこちらが自宅拠点からの接続を待ち受ける形となります。

#foreach(${sa} in ${DMZ-SAGW})
  interface ipsec200 floatlink my-node-id ${system.sa_code}
  interface ipsec200 floatlink peer-node-id ${sa.system.sa_code}
  interface ipsec200 floatlink preshared-key ${global.ike_key}
  interface ipsec200 floatlink ipv6 enable
  interface ipsec200 floatlink floatlink-key ${global.floatlink-key}
  interface ipsec200 floatlink my-address lan1 
  interface ipsec200 floatlink address-family ipv6
  interface ipsec200 floatlink nat-traversal enable
  interface ipsec200 add 172.16.1.1/30 remote 172.16.1.2 
  interface ipsec200 mtu 1400
  route dynamic bgp neighbor add 172.16.1.2 remote-as ${sa.AS_no} 
  interface l2tp200 floatlink my-node-id ${system.sa_code}-l2
  interface l2tp200 floatlink peer-node-id ${sa.system.sa_code}
  interface l2tp200 floatlink preshared-key ${global.ike_key}
  interface l2tp200 floatlink floatlink-key ${global.floatlink-key}
  interface l2tp200 floatlink my-address lan1
  interface l2tp200 floatlink address-family ipv6
  interface l2tp200 floatlink nat-traversal enable
  l2tp add dmz hostname ${sa.hostname} router-id ${sa.router-id}
  interface l2tp200 l2tp dmz remote-end-id DMZ-L2 bridge
  interface l2tp200 group pass 
#end
自宅常用系 SA-W2

自宅からは外から始まった通信は上位のルーターによってブロックされてしまいます。IPv6通信も同様です。そのためNAT traversalを使用してこの制限を回避します。SA-W2では接続ごとにフロートリンクで使用するネームサーバーやインターフェースを選択することが可能です。このため、仕様上はIIJのWANサービスであるOmunibusなどので管理されているSEIL,SAとフロートリンクを使用した接続が可能です。

#foreach(${sa} in ${DMZ-GW})
  interface.ipsec0.floatlink.name-service : https://floatlink.sacm.jp/address
  interface.ipsec0.floatlink.my-address : bridge0
  interface.ipsec0.floatlink.address-family : ipv6
  interface.ipsec0.floatlink.key : ${global.floatlink-key}
  interface.ipsec0.floatlink.my-node-id : ${system.sa_code}
  interface.ipsec0.floatlink.peer-node-id : ${sa.system.sa_code}
  interface.ipsec0.preshared-key : ${global.ike_key}
  interface.ipsec0.passive-mode : disable
  interface.ipsec0.nat-traversal : force
  interface.ipsec0.ipv4.address : 172.16.1.2/30 
  interface.ipsec0.ipv4.remote : 172.16.1.1
  interface.ipsec0.mtu : 1400

  bgp.neighbor.0.address : 172.16.1.1
  bgp.neighbor.0.remote-as : ${sa.AS_no}
  bgp.neighbor.0.weight : 100

  interface.l2tp0.floatlink.name-service : https://floatlink.sacm.jp/address
  interface.l2tp0.floatlink.my-address : bridge0
  interface.l2tp0.floatlink.address-family : ipv6
  interface.l2tp0.floatlink.key : ${global.floatlink-key}
  interface.l2tp0.floatlink.my-node-id : ${system.sa_code}
  interface.l2tp0.floatlink.peer-node-id : ${sa.system.sa_code}-l2
  interface.l2tp0.ipsec-preshared-key : ${global.ike_key}
  interface.l2tp0.ipsec-nat-traversal : force
  interface.l2tp0.local-hostname : ${local.hostname}
  interface.l2tp0.remote-hostname : ${sa.hostname}
  interface.l2tp0.local-router-id : ${local.router-id}
  interface.l2tp0.remote-router-id : ${sa.router-id}
  interface.l2tp0.remote-end-id : DMZ-L2
  interface.bridge10.member.1.interface : l2tp0
#end

コンフィグの反映

コンフィグの反映画面から機器を選んで反映操作をするだけです。電源が入っていない機器の場合は「次回起動時に反映」を選んで反映操作を行うと、サーバ上にコンフィグが保存されます。これで機器を設置する準備ができました。

設置、構築

SEILのDIPスイッチをSMFv2モードに設定してケーブルを指し、電源を入れるだけでネットワークが完成します。何かあっても現地ではケーブルの抜き差しだけしてもらえればトラブルシュートを行うことができるのでネットワークに詳しくない両親に電話するだけで対応可能です。また、今回の紹介することはできませんでしたがMPCには監視とその通知機能があります。これを使用すれば指定のIPアドレスに対し定期的にping監視を行なったり、インターフェースの状態監視ができ、変化があったら自動的にメールを投げさせることも可能です。

構築した実家拠点ラック

終わりに

以上が今回のネットワーク刷新の肝であるDMZセグメントのL2延伸のあらましです。SEILには遠隔地からネットワークを設定管理するための機能が豊富に入っているため、遠隔地のネットワークでも安心して設定・管理することができます。また、今回の作業でグローバルに直接接続可能な自由なネットワークを得ることができました。これで好き勝手出来るようになったので、自宅サーバを再開していろいろ遊んでいきたいと思います。

SEIL/x86 Ayame スタンダードエディション 割引コードプレゼント

本記事をご覧頂いた方へ、SEIL/x86 Ayame スタンダードエディションを50%OFFで購入できるプロモーションコードをプレゼント!この機会にどうぞご利用ください。

プロモーションコード:SEILAYAME22W

※SEIL/x86 Ayameスタンダードエディション購入時に利用できるプロモーションコードです。(購入手続き画面で本コードを適用ください)
※SEIL/x86 AyameスタンダードエディションはAmazonでご購入いただけます。
– プロモーションコード有効期限:2023/01/09 23:59まで
– 本キャンペーンで購入した商品の転売行為は禁止いたします。

SEIL/x86 Ayame(ザイル・エックスハチロク アヤメ)とは?
仮想環境にインストールすることができる高機能ソフトウェアルータです。IPsec、L2TPv3 over IPsec、L2TP/IPsec等のVPN機能、OSPF、RIP、BGPなどの各種ダイナミックルーティング、ファイアウォール、IPv4ポリシールーティングなどの豊富な機能を利用できます。

SEIL/x86 Ayameの詳細はこちら
https://www.seil.jp/product/x86ayame.html

付録

解説で使用したテンプレートコンフィグです。filter及びSEILより下流にあるルーター以下のネットワークに依存する部分は省きます。

DMZ-GW

hostname ${local.hostname} 
timezone Japan 

## SEIL自身の名前解決に使う 
resolver enable 
resolver address add dhcp 

## 統計を取りたい 
option statistics access on 

bridge group add pass
bridge interface lan1 group pass
bridge interface lan2 group pass

interface lan0 address 192.168.220.2/25
interface lan1 add dhcp 
interface lan1 add router-advertisement 
interface lan1 mtu 1460 
interface lan2 add 10.0.0.1/24 

route add default dhcp 
route6 add default router-advertisement
 
interface lan1 dns forwarder enable 
dns forwarder add dhcp
 
route dynamic ospf router-id ${local.router-id} 
route dynamic ospf area add 0.0.0.0 
route dynamic ospf link add lan2 area 0.0.0.0 
route dynamic ospf area add 192.168.250.0
route dynamic ospf default-route-originate enable 
route dynamic ospf enable 

## BGP共通設定 ## BGPとOSPF、コネクテッド経路の再配布を行う
route dynamic bgp my-as-number ${local.AS_no} 
route dynamic bgp router-id ${local.router-id} 
route dynamic bgp enable 
route dynamic redistribute ospf-to-bgp enable 
route dynamic redistribute connected-to-bgp enable 
route dynamic redistribute bgp-to-ospf enable 

## フロートリンクのネームサーバのURL。機種によって異なる。 
floatlink name-service add https://floatlink.sacm.jp/address 
l2tp hostname ${local.hostname} 
l2tp router-id ${local.router-id} 

#foreach(${sa} in ${HOME-SAGW}) 
  interface ipsec200 floatlink my-node-id ${system.sa_code} 
  interface ipsec200 floatlink peer-node-id ${sa.system.sa_code} 
  interface ipsec200 floatlink preshared-key ${global.ike_key} 
  interface ipsec200 floatlink ipv6 enable 
  interface ipsec200 floatlink floatlink-key ${global.floatlink-key} 
  interface ipsec200 floatlink my-address lan1
  interface ipsec200 floatlink address-family ipv6 
  interface ipsec200 floatlink nat-traversal force 
  interface ipsec200 add 172.16.1.1/30 remote 172.16.1.2

  route dynamic bgp neighbor add 172.16.1.2 remote-as ${sa.AS_no} weight 100 

  interface l2tp200 floatlink my-node-id ${system.sa_code}-l2 
  interface l2tp200 floatlink peer-node-id ${sa.system.sa_code}
  interface l2tp200 floatlink preshared-key ${global.ike_key} 
  interface l2tp200 floatlink floatlink-key ${global.floatlink-key} 
  interface l2tp200 floatlink my-address lan1 
  interface l2tp200 floatlink address-family ipv6 
  interface l2tp200 floatlink nat-traversal force 
  l2tp add dmz hostname ${sa.hostname} router-id ${sa.router-id} 
  interface l2tp200 l2tp dmz remote-end-id DMZ-L2 bridge 
  interface l2tp200 group pass
#end
vrrp lan0 add vrid 220 address 192.168.220.126/25 priority 100 preempt on enable ## slave

dhcp enable
dhcp mode server
dhcp interface lan0 enable
dhcp interface lan0 pool 192.168.220.10/25 100
dhcp interface lan0 gateway 192.168.220.126
dhcp interface lan0 dns add 192.168.220.126
dhcp interface lan0 ntp add 192.168.220.126

route6 add default router-advertisement interface lan1
dhcp6 client enable
dhcp6 client multiple enable
dhcp6 client interface lan1
dhcp6 client interface lan1 enable
dhcp6 client interface lan1 prefix-delegation add lan1 sla-id 0x1 enable
dhcp6 client interface lan1 prefix-delegation add lan2 sla-id 0x2 enable
dhcp6 server interface lan2 disable
dhcp6 server interface lan2 dns add dhcp6

dns forwarder enable
dns forwarder add dhcp6
dns forwarder add dhcp
nat napt add private 192.168.100.0-192.168.100.255 interface lan1 
nat napt add private 192.168.200.0-192.168.200.255 interface lan1 
nat napt add private 192.168.251.0-192.168.251.255 interface lan1 
nat napt add private 10.0.0.0-10.255.255.255 interface lan1 

${system.mpc_base_config}

 

HOME-SAGW

hostname : ${local.hostname}
hostname : ${local.hostname}
option.timezone : JST

option.ipv4.update-connected-route.service           : enable
option.ipv6.update-connected-route.service           : enable
option.ipv6.router-advertisement.fast-switch.service : enable

resolver.service   : enable
resolver.0.address : dhcp6
resolver.1.address : dhcp
resolver.2.address : 8.8.8.8

## ローカル側Wi-Fi
interface.wlan4.description           : local
interface.wlan4.service               : enable
interface.wlan4.mode                  : 11acvht40
interface.wlan4.ssid                  : ${local.AP_basename}
interface.wlan4.security              : wpa-psk-tkip
interface.wlan4.country-code          : jp
interface.wlan4.channel               : indoor
interface.wlan4.wpa-passphrase        : ${local.AP_password}

## DMZメンテ用Wi-Fi
interface.wlan5.description           : DMZ
interface.wlan5.service               : enable
interface.wlan5.mode                  : 11acvht40
interface.wlan5.ssid                  : ${local.AP_basename}-DMZ
interface.wlan5.security              : wpa-psk-tkip
interface.wlan5.country-code          : jp
interface.wlan5.channel               : indoor
interface.wlan5.wpa-passphrase        : ${local.AP_password}

## 上流からのRAを流したいが他の通信は分離する
## このインターフェースをMPCとの通信に使用する
interface.bridge0.description         : v6pass
interface.bridge0.forward.ipv4        : disable
interface.bridge0.forward.ipv6        : enable
interface.bridge0.forward.pppoe       : disable
interface.bridge0.forward.other       : disable
interface.bridge0.member.0.interface  : ge0
interface.bridge0.member.1.interface  : vlan0
interface.bridge0.ipv4.address        : dhcp
interface.bridge0.ipv6.address        : router-advertisement

## ローカルネットワークブリッジ
interface.bridge1.description         : local-bridge
interface.bridge1.member.0.interface  : vlan1
interface.bridge1.member.2.interface  : wlan4
interface.bridge1.ipv4.address: 10.0.0.1/24

## bridge0とbridge1を接続するため
interface.vlan0.description           : bridge-conv
interface.vlan0.vid                   : 2
interface.vlan0.over                  : ge1

## ローカルネットワーク相当
interface.vlan1.description           : base
interface.vlan1.vid                   : 1
interface.vlan1.over                  : ge1

## DMZ
interface.vlan10.description           : DMZ
interface.vlan10.vid                   : 250
interface.vlan10.over                  : ge1

## DMZブリッジ
interface.bridge10.description         : DMZ-bridge
interface.bridge10.member.0.interface  : vlan10
interface.bridge10.member.10.interface  : wlan5

## ge1側ポートのVLAN所属設定
interface.ge1p0.port                  : access
interface.ge1p0.vid                   : 1
interface.ge1p1.port                  : access
interface.ge1p1.vid                   : 1
interface.ge1p2.port                  : access
interface.ge1p2.vid                   : 2
interface.ge1p3.port                  : access
interface.ge1p3.vid                   : 250

## BGP全体設定
bgp.my-as-number                                  : ${local.AS_no}
bgp.router-id                                     : ${local.router-id}
bgp.ipv4.redistribute-from.connected.redistribute : enable
bgp.ipv4.redistribute-from.ospf.redistribute      : enable

#foreach(${sa} in ${DMZ-GW})
  interface.ipsec0.floatlink.name-service    : https://floatlink.sacm.jp/address
  interface.ipsec0.floatlink.my-address      : bridge0
  interface.ipsec0.floatlink.address-family  : ipv6
  interface.ipsec0.floatlink.key             : ${global.floatlink-key}
  interface.ipsec0.floatlink.my-node-id      : ${system.sa_code}
  interface.ipsec0.floatlink.peer-node-id    : ${sa.system.sa_code}
  interface.ipsec0.preshared-key             : ${global.ike_key}
  interface.ipsec0.passive-mode              : disable
  interface.ipsec0.nat-traversal             : force
  interface.ipsec0.ipv4.address              : 172.16.1.2/30 
  interface.ipsec0.ipv4.remote               : 172.16.1.1
  interface.ipsec0.mtu                       : 1400

  bgp.neighbor.0.address                       : 172.16.1.1
  bgp.neighbor.0.remote-as                     : ${sa.AS_no}
  bgp.neighbor.0.weight                        : 100

  interface.l2tp0.floatlink.name-service    : https://floatlink.sacm.jp/address
  interface.l2tp0.floatlink.my-address      : bridge0
  interface.l2tp0.floatlink.address-family  : ipv6
  interface.l2tp0.floatlink.key             : ${global.floatlink-key}
  interface.l2tp0.floatlink.my-node-id      : ${system.sa_code}
  interface.l2tp0.floatlink.peer-node-id    : ${sa.system.sa_code}-l2
  interface.l2tp0.ipsec-preshared-key       : ${global.ike_key}
  interface.l2tp0.ipsec-nat-traversal       : force
  interface.l2tp0.local-hostname            : ${local.hostname}
  interface.l2tp0.remote-hostname           : ${sa.hostname}
  interface.l2tp0.local-router-id           : ${local.router-id}
  interface.l2tp0.remote-router-id          : ${sa.router-id}
  interface.l2tp0.remote-end-id             : DMZ-L2
  interface.bridge10.member.1.interface      : l2tp0
#end

#foreach(${sa} in ${common-GW})
  interface.ipsec10.floatlink.name-service    : https://floatlink.sacm.jp/address
  interface.ipsec10.floatlink.my-address      : bridge0
  interface.ipsec10.floatlink.address-family  : ipv6
  interface.ipsec10.floatlink.key             : ${global.floatlink-key}
  interface.ipsec10.floatlink.my-node-id      : ${system.sa_code}
  interface.ipsec10.floatlink.peer-node-id    : ${sa.system.sa_code}
  interface.ipsec10.preshared-key             : ${global.ike_key}
  interface.ipsec10.passive-mode              : disable
  interface.ipsec10.nat-traversal             : force
  interface.ipsec10.ipv4.address              : 172.16.2.2/30 
  interface.ipsec10.ipv4.remote               : 172.16.2.1
  interface.ipsec10.mtu                       : 1400

  bgp.neighbor.1.address                       : 172.16.2.1
  bgp.neighbor.1.remote-as                     : ${sa.AS_no}
  bgp.neighbor.1.weight                        : 200
#end

route.ipv4.0.destination    : default
route.ipv4.0.gateway        : dhcp
route.ipv6.0.destination    : default
route.ipv6.0.gateway        : router-advertisement

## OSPF コネクト経路とBGPからの経路を再配布する
ospf.router-id                             : ${local.router-id}
ospf.default-route-originate.originate     : enable
ospf.redistribute-from.bgp.redistribute    : enable
ospf.link.0.interface                      : bridge1
ospf.link.0.area                           : 0.0.0.0

dhcp6.client.service        : enable
dhcp6.client.0.interface    : bridge0

## ローカルネット側でのみDNSフォワーダーを動作させる
dns-forwarder.service            : enable
dns-forwarder.0.address          : dhcp6
dns-forwarder.1.address          : dhcp
dns-forwarder.2.address          : 8.8.8.8
dns-forwarder.listen.0.interface : bridge1

## bridge0のアドレスでNAPTする
nat.ipv4.napt.0.interface  : bridge0
nat.ipv4.napt.1.interface  : bridge0
nat.ipv4.napt.0.private    : 192.168.100.0-192.168.100.255
nat.ipv4.napt.1.private    : 10.0.0.0-10.255.255.255

${system.mpc_base_config}
IIJ Engineers blog読者プレゼントキャンペーン

Twitterフォロー&条件付きツイートで、「IoT米」と「バリーくんストラップ」と「バリーくんシール」のセットを抽選でプレゼント!
応募期間は2022/12/01~2022/12/31まで。詳細はこちらをご覧ください。
今すぐツイートするならこちら→ フォローもお忘れなく!

梅津 勝平

2022年12月19日 月曜日

SMF系サービスの開発・運用を担当しています。趣味は自宅サーバやアマチュア無線。systemdでできることはsystemdにやらせたい派です。

Related
関連記事