BootcampでGoの講義を担当したり、SMFsxやMPCといったSEILを管理するためのSMF系サービスの開発、運用を担当しています。N100という省電力&高性能なCPUが発売され話題になりました。そんな時にネットショップを眺めているとNICが4Portついていてメモリやストレージを拡張できるミニPCを見つけました。面白そうなので2台購入し自宅や実家のGWとして活用してみました。複数台を温かみのある手作業でデプロイするのは面倒なのでAnsibleで構築しました。AyameとSA-W2による拠点間VPNの接続、OCIとのサイト間VPNの接続について紹介します。スタンダード版半額のキャンペーンで後押ししてもらいました。その際、せっかくだからと2ライセンス購入しましたがしばらく持て余していました。Ayame,X4,CA10に搭載された機能が使いたくなるなど試さない理由がなくなりました。そのため、自宅ネットワーク更新の際に置き換えを実施し、ソフトウェアルータに入門してみました。AyameをミニPCに導入するここからAyameを導入してソフトウェアルータとして準備していきます。始めに使用する機材について説明します。機材スペック機材はAliexpressで購入しました。ファンレスかつ省電力のため使いやすいです。/X1より小さいため、そのまま置き換えました。半年ほど常用していますが安定しています。CPU温度は通常使用で60°C、負荷試験(20分)実施時に75°C程度でした。今回は表の構成で母艦を構築します。Ayameの対応ハイパーバイザはVMware,KVM,Hyper-Vです。可能な限りOSSなもので自宅インフラを構築したいので今回のハイパーバイザはKVMを使用します。streamを使用します。SELinuxは有効とします。KVM機材外形NICの割り振り物理NICとの通信を設計するにあたり以下の要件を求めました。母艦もWANと管理用ネットワークに対する疎通を持つAyameの構築失敗時に制御できなくなることを防ぐためLAN/DMZ側との接続はLAGに対応する本来はAyameに直接NICを触らせた方が性能は出ます。以下の要件を満たすために、母艦Linux側でbridgeやbondingを構成します。この副次効果として内部ネットワーク構成を柔軟に変更可能となります。インタフェース構成図Ansibleを使用したAyameのデプロイこれまでの要件をもとにAnsibleを使用してAyameをデプロイしていきます。今後出現するアドレスは基本的に例示用アドレスを使用します。(例外:VPN設定における対向との通信に使用するアドレス)実際に試す際には実環境のアドレスに読み替えてください。サンプルはこちらです。NIC周りの設定変更について、特筆すべき事項はないため飛ばします。注意すべき点として、初期状態からIPアドレスの付け替えが生じるため、NICの構成が完了するためにはSSH先アドレスを変更しながら2度実施する必要があります。この問題に関しては今後の課題とします。Ayameのデプロイと設定この前に事前準備としてAyameのイメージファイルを取得する必要があります。今回はKVM形式を使用します。IIJマルチプロダクトコントローラサービスをご利用の方で試す場合は提供OVAイメージをKVM形式に変換する。KVMで構築している部分をVMwareの手順に読み替えてください。今回は、SEIL公式サイトで配布しているKVM形式のイメージにプロダクトキーをインストールする方法で説明します。入手したイメージはfiles/var/lib/libvirt/images/seilx86.qcow2に配置してください。ポイントについて説明します。リソースの割り当てです。正式な動作環境、条件についてはこちらを参照してください。2に緩和されました(D00486)。メモリについては2GB割り当てます。これは、要件として1CPUでメモリが1GB、8CPUで3GBというものがあり、余裕をもって2GBとしました。この値は使用する機能によって変化します。cpuset='0-1'>2</vcpu>-->次にプロダクトキーのインストールと動作モードに関する記述です。これによってデプロイ後にプロダクトキーを入力する手間が省けます。MPCサービスなどSMFv2に対応したサービスをお使いの場合は、MODE=smfv2とするだけでコンフィグの投入、ファームウェアバージョンの管理、サービス管理画面からの各種管理操作、メトリックの確認を行うことができます。</chassis></sysinfo>次にイーサネットインタフェースの定義です。実際に使用する構成に合わせて変更してください。Ayameは最大10個まで認識可能です。本当はオプションを指定してきちんとチューニングすべきでしたが、その前に実通信に組み込んでしまったため適当です。7月中旬に機材がそろい、お盆に帰省した際に設置する都合から十分な検証期間を取れなかったのが敗因でした。function='0x0'/></interface>あとはAnsibleを実行してデプロイします。デプロイ後の設定方法SMFv2に対応したサービスをご利用の方はこの工程は不要です。各サービスより操作可能な状態になっています。standaloneモードで起動した場合、工場出荷時のコンフィグが読み込まれます。この場合、ge0に192.168.0.1/24のアドレスがついているため、ETH0からこれにアクセスすればSSHやtelnetで操作が可能です。今回は楽をするため、cockpitに含まれる仮想マシン管理機能のVNCコンソールより初期設定を実行していきます。一度ホストへSSHし、cockpitを起動してください。今回の構成では、cockpitへの接続はeth1からのみ受け付けます。詳細なスタンドアローンモードでの使用方法はこちらを参照ください。SEILには以下のようなコンフィグの投入方法があります。UIやSSH接続より本格的なコンフィグを投入します。UIを立ち上げていきます。UIの立ち上げ手順は使えることを優先します。詳細はこちらを参照ください。UI立ち上げに必要な手順がそろうまではエラーが出てひるみますが、気にせず進めてください。UIを立ち上げていきます。UIの立ち上げ手順は使えることを優先します。詳細はこちらを参照ください。UI立ち上げに必要な手順がそろうまではエラーが出てひるみますが、気にせず進めてください。UIからはCPU、メモリ、トラフィック流量、ログの確認とファームウェア更新、コンフィグの変更が行えます。コンフィグ変更は図のように一般的な入力画面のほか、コンフィグをアップロードすることも可能です。この画面ではコンフィグの形式確認ができます。エラー行と理由がわかるため、SEILのコンフィグ体系に慣れやすいです。昨年の記事で紹介した構成から拡張を行いました。機器が操作不能になったり、ネットワーク障害を起こしても距離があるためすぐに対処することはできません。そのため、以下のコンセプトで設計を行いました。Ayame・実家常用系SA-W2にはRAによる/64のアドレスしか受け取れません。このため、両方の場合における設定例を解説します。紹介されているため省略します。DHCPv6この場合のアドレス情報の流れは以下の通りです。1で受け取ったDNSアドレスを再配布するポイントとしてはge2につけるIPv6アドレスはDHCPv6にて委任されたアドレスである点です。用いることで、RAで配るアドレスをインタフェースから自動で決めてくれます。203.0.113.0-203.0.113.254RA+NAT66によるGWRAで受け取ったアドレスは/64であるため分割できません。ブリッジで素通しにすることも考えましたが、DMZ側のルーティングを考えると不適です。今回はRAでULAを配布して、NAT66でケアすることにしました。アドレス管理が面倒RA周りはDHCPv6とほぼ変わらないため説明は省略します。NAT系の設定はデフォルト値として、WANとの境界インターフェースのアドレス、プレフィクスがグローバル側のものとして指定されます。有効にしないと外部との通信ができなかったため有効としています。&BGPフロートリンクはSEILが使用できるVPN自動設定機能の一つです。これにより両方のアドレスが動的に変化しうる環境下でもVPNを構成できます。仮にアドレスが変更された場合でも対向に変更後のアドレスがフロートリンクサーバを経由して通知されるため、アドレスの変更に追従できます。私の環境ではこの条件に合致するため、フロートリンクを使用します。注意点としてフロートリンクの利用にはフロートリンクサーバのアドレスが必要です。ご利用のサービスにて提供されているアドレスをご利用ください。force`としている点があります。本来、直接NGNに接続するため不要な設定です。実家に配置されているONUはESPパケットの転送性能が低く、IPsec経由の通信が20MB/Sec程度しか出ません。この問題を回避するためNATトラバーサルを強制的に有効とし、UDPでカプセル化しています。通信性能は最後に評価します。&BGPOCIを使用し始めたため自宅ネットワークとサイト間VPNにて接続しました。OCIのサイト間VPNはIPv4による接続のみ対応であること。私の環境のIPv4通信はNAT配下であることから設定にハマりどころがありました。始めにCPEとして機器を登録します。CPEとはOCIにおける顧客構内機器(今回はSEIL)です。ベンダーはOtherとし、各機器のグローバル側から見えるIPv4アドレスを指定します。最初はこれが分からず、プライベートアドレスを指定してつながらないなぁとかやっていました。OCIのサイト間接続はCPEに紐づき、変更ができません。このため、グローバルアドレスが変更された場合にはCPEの登録からやり直す必要があります。私の環境はIPアドレスが変わりうるため、復旧のためには全行程の再設定が必要となります。続いてサイト間VPNのIPsec接続を作成していきます。ここのポイントは以下の通りです。ASNはSEILが所属するAS番号を入力してください。トンネルのアドレスはOCIで/32が使用できないため/30の適当なアドレスを使用します。これ以外は初期値とします。上で設定したIPsec接続と実際に接続します。特別に設定が必要な項目は各ライフタイムのみです。この設定はSEIL,SA-W2共通で使用できます。最後にOCIの設定名称とSEILのコンフィグキーの対応です。bgp.neighbor.[].remote-asDDNS自身のドメインを所有していますが、固定IP環境ではないためDDNSサービスを利用しています。この機能はSEILの中でも好きな機能です。この機能の挙動は一定時間ごとやインタフェースのアドレスが変更された際に指定したURLを叩くものです。<ipv4>、<ipv6>は指定したインタフェースのアドレスに展開されます。そのため、グローバルアドレスを自動判別するDDNSサービスだけではなく、明示的に指定が必要なサービスでも利用できます。ge0性能試験Ayameには簡易的な通信測定としてiperf3が使用できます。目安ですが、これを用いてVPN性能を測定してみました。8192iperf3のUDPモードを使用して測定を実施しました。Ayameへの通信をUpload、この逆をDownloadとします。パケット長を変化させたとき、Uploadであれば長いパケットのほうが性能が出ていました。Downloadでは1378Byteよりも長い場合にはパケットが落ちる現象が見られました。この境界となる1378Byte自体はNAT-Tを有効にしたIPsecのオーバーヘッドを考えれば妥当な値です。速度が出なくなる原因としてフラグメントが発生していると推測していますが、Uploadで速度が出てしまっているのは予想外の結果でした。長いLengthを指定したDownloadでは網のどこかでパケットが落ちてしまい、パケット自体が届いていないような挙動がありました。詳しい挙動については今後見ていきたいです。Ayameを自宅ネットワークに組み込んで使ってみました。今回は時間が取れずほとんどチューニングできませんでしたが十分実用できる性能が出て驚きました。SEIL/X4はこの4倍以上の性能が出ますが、チューニングだけではなく仮想化のオーバーヘッドや暗号エンジンの搭載の有無といった点が影響しているようでした。ルータとして設計された製品と、汎用機器では違いがあることを実感できました。この取り組みで仮想環境周りの知識のなさが浮き彫りになったので、今後学習していきたいと考えています。Ayameは手軽に使えるソフトウェアルータなので、皆さんもぜひ試してみてください。blog読者プレゼントキャンペーンXのフォロー&条件付きツイートで、「IoT米」と「バリーくんシール」のセットを抽選でプレゼント!応募期間は2023/12/01~2023/12/31まで。詳細はこちらをご覧ください。水曜日SMF系サービスの開発・運用を担当しています。趣味は自宅サーバやアマチュア無線。systemdでできることはsystemdにやらせたい派です。今年も無事、稲作が終わりました。IIJの農業IoTは5年前、静岡県のとある田んぼの水管理からはじまりました。ネットワーク技術部の竹﨑です。気になるのが人情というものです。木曜日IIJの今年の新卒エンジニアのおうちを紹介してみる。こんにちは、はじめまして。GIOナレッジクラウドサービスの現場から、様々なナレッジをお届け。