MikroTik RouterOSのためのCGNAT
CGNATは、各アドレスの送信元ポート空間を分け合うことで、多数のプライベートクライアントを少数のグローバルアドレスに対応づけます。Mikro Managerはその配置をあなたが本当に気にするパラメータから組み立て、書き込もうとするすべてのルールを提示します。
配置の仕組み
プライベート空間は、パブリックプレフィックスと同じ大きさの連続したブロックに区切られます。各ブロックは自分専用の送信元ポート範囲でプレフィックス全体に1:1でnetmapされるため、複数のブロックがポートで隔てられながら各グローバルアドレスを共有します。振り分けは二段のジャンプ(srcnatから/24ごとのチェイン、さらにブロックごとのチェインへ)なので、ブロックがいくつあってもルール評価は高速です。
宣言的で、冪等
各ルールには、プール全体を符号化した構造化コメントが付きます。接続時にアプリは実際のルールを読み、そのコメントからプールを復元し、望む状態と現状を突き合わせます。真実の源はMac上のファイルではなくルータであり、私たちの有効なコメントを持たないルールには決して触れません。
決定的な逆引き、フローログ不要
netmapはリース表ではなく算術なので、パブリックアドレスと送信元ポートはちょうど一つのプライベートクライアントに解決し、その逆も成り立ちます。事前の記録は要りません。abuse報告が本当に求めているのはこの答えです。
add chain=srcnat action=jump jump-target=cgnat-10.64add chain=cgnat-10.64-b3 action=netmap \ to-addresses=200.2.3.0/27 to-ports=3072-4095 \ comment="mikro:v1;pool=cgnat;blk=3;cpi=256"- 2 作成
- 67 更新
- 66 削除
何かが書き込まれる前に、あなたが計画を確認します。
プールの一生
一年後でも変更できるプール
たいていの CGNAT は一度書いたら、あとは寿命が尽きるまでルールを一本ずつ手で直していきます。ここではプールは開いて変更して再適用できるものであり続けます。設計そのものがルーターに保管されているからです。
設計する
名前を付け、プライベート側の開始アドレスと公開プレフィックスを決め、クライアント一台あたりのポート数を選びます。ブロック数、ポート範囲、ルール数は入力しながら計算されます。ルーターにはまだ何も書かれていません — バッジは「下書き」のままです。
計画を読む
書き込む予定のルールがすべて、省略なしに並びます。/27 を 32 分割すれば 133 本です。書き込むのは「適用」だけで、進行状況も一本ずつ報告されます。
ルールの山ではなくプールになる
適用すると「稼働中」に変わり、ルーター上で自分が持っているものを示します。設計はルールのコメントに入っているので、接続のたびにアプリがルーターからプールを組み立て直します。
一年後に変更する
アドレスあたりのクライアント数を半分にし、Fasttrack を有効にしてから確認します。追加 2 本、変更 67 本、削除 66 本。書き込まれるのは差分だけです。
苦情の照会に答える
公開アドレスと送信元ポートから、その背後のクライアント(プール・ブロック・ポート範囲)が計算で求まります。保存しておくフローログは要りません。
よくある質問
- これは CGNAT の計算ツールですか、それともルーターを設定しますか。
- どちらもです。入力しながらブロック数、クライアントあたりのポート、ルール数を算出し(これが計算ツールの部分です)、そのうえで REST API 経由で netmap ルールを書き込みます。自分で貼り付けたい場合はスクリプトを書き出せます。
- すでにCGNATルールがあるルータでも使えますか?
- はい。アプリが管理するのは自身の構造化コメントを持つルールだけで、手で書いたものは読み取るだけで変更も削除もしません。
- 1つのグローバルアドレスを何台のクライアントで共有できますか?
- 1から1024までの2の冪であれば何でも。この値が送信元ポート範囲の分け方を決めるので、1アドレスあたりのクライアントを増やすほど各自のポート範囲は狭くなります。
- RouterOS の CGNAT 設定をスクリプトとして生成できますか。
- できます。どのプールも、アプリが送るのと同じタグ付きコマンドを収めた .rsc ファイルとして書き出せます。/import 用にも、変更申請にも、コンソールでしか触れないルーターにも使えます。
- ルールを自分で適用したい場合は?
- プールをRouterOSスクリプトとして書き出し、ターミナルに貼り付けてください。生成されるコマンドは、アプリが送るはずだったものと同一です。
- どのクライアントがどのポートを使ったか記録しますか?
- いいえ、その必要もありません。対応関係はプールのパラメータから計算されるので、ログを一度も有効にしていなくても遡って引けます。
Mikro Manager を入手
Mac App Store で配布 — サンドボックス化され、署名済みで、自動的に更新されます。
Mac App Store に近日登場。macOS 14 以降と、REST API を有効にした RouterOS v7 デバイスが必要です。