OpenWrt 21.02.rc2のmap.shでは従来から変わった点として、日本のMAP-E実装で使用されているLEGACYモードの対応について option legacymap '0' or '1' を指定することができるようになった。'0'がRFC標準仕様、'1'がDraft仕様。 これにより手動でスクリプトを書き換える必要が無くなる。 しかし私はDNATの設定の為にSNATのポートセットの範囲を制限したいので下記のカスタマイズを行う。 標準状態からの変更点についてはこのgistのRevisionsをご参照ください。 /etc/config/network のmap-e interfaceに下記のoptionを追加することでiptablesのSNATルールを範囲指定可能とした。 option snatstartps '32' (default 0) option snatendps '62' (default 4095) map-e interface にて割り当てられたportsetの内、任意のportをDNATする為に指定範囲から除外されたportsetを利用可能にする。 optionを指定しない時(または存在しない時)はdefault値の範囲でSNATされる。 default 4095 の根拠は、16port/set * 4096 = 65536 (port上限)である。 map.sh内で追加したuci optionがシステムを再起動しないと利用できなかったので一度再起動してください。 service reload や uci関連のコマンド発行でこれらの変更を適用する方法をご存知でしたら教えて下さると幸いです。 【2022.05.25 改版】 -バージョン 21.2.3 での対応を確認 -ポートセットの範囲指定を1~4096から0~4095に変更 -json_add_string extra により自由にマッチ文を書けるようになったので次の変更を追加した -iptables-mod-ipopt のインストールが必要。 -tcpについて statistic のマッチでポートセットを利用することでニチバンベンチに対応 -udp,icmp で --connlimit-mask 0 となるようにした。(なぜ32が嫌われているのか判らない) 【2022.05.26 ファイル追加】 ポートセットの範囲指定カスタマイズについて、おそらく私しか使わないと思われるのでそこだけ抜いたファイルを追加しました。 [map.sh.rangeommit]: https://gist.github.com/kurobee-dev/4107b18683e01d17a9b8678e770d272c#file-map-sh-rangeommit luciの設定保存で改変したスクリプトをバックアップに含めるには次のファイルに保存したいファイルを指定する。 #/etc/sysupgrade.conf /etc/sysupgrade.conf /lib/netifd/proto/map.sh* 新規やアップグレード時にリストアする時は先に `opkg install map` しておく事