RouterOSにおけるRFC3021の裏技的な設定方法

MikroTik

本記事の内容

MikroTik RouterOSにて、RFC3021で規定された動作をする機器と通信する方法の記録。
2023年8月現在、RouterOS v7においてRFC3021は正式にサポートされていないものの、裏技的な設定を行うことでRFC3021と等価な動作をさせることができます[2]。当該方法について、日本では検証報告がないようなので備忘録を兼ねて記載します。
本方法は正式にサポートされた設定方法ではないので、アップデート等により動作しなくなる・環境によっては正常に動作しない可能性等があることをご了承下さい。

RFC3021とは

IPv4を用いてポイントツーポイントリンクを構成する場合、従来では30bitプレフィックス(/30)のセグメントが用いられます。しかし、この方法では1つのポイントツーポイントリンクに4個のIPv4アドレスを消費することになり、アドレスの利用効率は50%となってしまいます。これは、IPv4アドレス空間の効率的な運用が求められている今日においては望ましくありません。

そのため、31bitプレフィックス(/31)のセグメントを特別にポイントツーポイントリンクに用いるRFC3021(Using 31-Bit Prefixes on IPv4 Point-to-Point Links)という方法が提案されています[1]。

One such change, proposed by this document, is to halve the amount of address space assigned to point-to-point links (common throughout theInternet infrastructure) by allowing the use of 31-bit subnet masks in a very limited way.

[1] https://www.ietf.org/rfc/rfc3021.html

検証環境

  • CCR2004-16G-2S+
  • RouterOS 7.10.2 (stable)
    ※7.12.1でも動作確認済

Mikrotik RouterOSにおける31bitプレフィックスの設定方法

記事文頭にて述べたように、記事投稿時点においてRouterOSはRFC3021をサポートしていませんが、裏技的な設定[2]を行うことでRFC3021で規定された動作する機器と通信することができます。

具体的には、以下の様にローカルアドレスを/32でインターフェースに割り当て、リモートアドレスをnetworkに設定します。
※インターフェースはether1、ローカルアドレスが10.10.10.10/31,リモートアドレスが10.10.10.11/31の場合を想定

/ip address add address=10.10.10.10/32 network=10.10.10.11 interface=ether1

打ち間違いかと疑いたくなる設定ですが、これで動作します。ゴリ押し…
なお、プレフィックス長に/31を設定した場合には期待通りの動作をしません。
MikroTikも上記設定が裏技的に機能することについては認知している様です[3]。

一応、上記の方法で非公式ながらも31bitプレフィックスが設定された機器と通信できます。

本方法はMikroTikが推奨している方法ではないので、バージョンアップなどで突然使用不可能になる可能性も十分あります。MikroTikの公式フォーラムを見る限りでは10年以上前からfeature requestされ続けており[3]、MikroTik側も要望があることは把握しているはずなのでいつか正式にサポートしてくれると嬉しいのですが…。

なお、以前IPIPv6インタフェースに本設定方法を用いた所、特定の長さのパケットが消失するトラブルに遭遇しました。GREインタフェースで本設定を用いた際にはその様なトラブルは起きなかったのですが…。今の所、私の環境ではEthernetインターフェースに直接本設定を適用する分には問題なく動作しています。
※IPIPv6インタフェース自体に問題がある可能性も考えられますが、対向ルータが私の所有設備ではなかったことに加えて復旧を急いでいたこともあり、上記事象については詳細な検証・原因の切り分けが十分にできていません。何にせよ、非公式な設定方法であることには間違いないので、本設定を使用される際には十分な検証のもとで自己責任でお願いします。

参考文献

[1] IETF – Request for Comments: 3021 “Using 31-Bit Prefixes on IPv4 Point-to-Point Links”
https://www.ietf.org/rfc/rfc3021.html
[2] MikroTik – forum “Point-to-point (/31) addresses”
https://forum.mikrotik.com/viewtopic.php?t=32935#p161412
[3] MikroTik – forum “Support RFC3021 /31 Point to Point on any ROS version ?”
https://forum.mikrotik.com/viewtopic.php?p=974199&hilit=RFC+3021#p974763

コメント