ルーターconfigの最適化

ヤマハルーターのconfigを見直したところ、通信速度が速くなりました。

自宅でブロードバンドルーターとしてヤマハのFWX120を使っています。2017年10月に発売されたRTX830に乗り換えるべく、導入前の準備作業として、configを見直しました。理由としては、

・フィルター定義がごちゃごちゃして見づらく、RTX830乗り換えにあたってconfigをすっきりさせたい。
・RTX830未対応の入力遮断フィルターをIPパケットフィルターに置き換えたい。

といったものでしたが、config見直し後、思いがけず通信速度が速くなりました。なおインターネット回線はIIJmioひかり(IPoEオプション契約あり)で、IPv4(PPPoE)、IPv4(DS-Lite)、IPv6(IPoE)の3種類が使えるようになっています。

IPv4(PPPoE)については深夜早朝など回線の空いている時間帯で速くても600Mbps程度だったのが700Mbps超の速度が出るようになり、IPv4(DS-Lite)については270Mbps台止まりだったのが300Mbps超の速度が出るようになりました。すなわち、IPv4(PPPoE)にしてもIPv4(DS-Lite)にしても、通信速度が10%以上速くなったことになります。

config見直しに伴って通信速度が速くなった本当の理由はわからないものの、ルーターも内部構造はコンピューターそのものであり、コンピューターの処理速度向上のためのソフトウェア(プログラム)最適化の考えはルータにも準用でき、「おそらくこの修正が通信速度高速化に寄与したのでは?」と推測することはできるので、その推測をまじえつつ修正内容をまとめたいと思います。ルーターconfigの最適化の一助にしてもらえれば幸いです。(ルーターconfigの最適化というとコンピューター用語っぽい言い方なので、ヤマハですし、クルマやバイクになぞらえて(エンジンのROMチューンならぬ)「ヤマハルーターのconfigチューン」と言ってもいいかもしれません。)

(1)IPパケットフィルターを見直す
見直し前のIPパケットフィルターの件数です。

(IPv4 IPパケットフィルター(静的・動的) 54件)
ip filter 12件
ip filter dynamic 6件
ip inbound filter 36件
(IPv6 IPパケットフィルター(静的・動的) 13件)
ipv6 filter 6件
ipv6 filter dynamic 7件

見直しによって、IPパケットフィルターの件数は以下のようになりました。
(IPv4 IPパケットフィルター(静的・動的) 23件)
ip filter 16件
ip filter dynamic 7件
ip inbound filter 0件
(IPv6 IPパケットフィルター(静的・動的) 13件)
ipv6 filter 6件
ipv6 filter dynamic 7件

入力遮断フィルタ(ip inbound filter)はRTX830では対応していないので削除して、すべてIPパケットフィルター(ip filter/ip filter dynamic)に置き換え、IPv4用のIPパケットフィルターは半分以下の23件になりました。見直し項目の大半がこのパケットフィルタの見直しだったので、パケットフィルタの見直しで通信速度が速くなったことになります。

一度IPパケットフィルターで処理されたフローのパケットはファストパスを使って高速に動作するものの、フローの最初のパケットはノーマルパスでフィルターを実際に走査して処理されるわけであり、走査するフィルターの多寡は当然処理速度に影響するものと推測されます。ファストパス内部で使われるフローテーブルのサイズは有限ですし、かつフローテーブルはIDS他さまざまな処理でも使われているので、ルーターが多数のパケットを処理していくうちにフローテーブルがいっぱいになってしまって他のフローで上書きされてしまい、ファストパスで処理されていたフローのパケットが再びノーマルパスでIPパケットフィルターを走査するところからやり直し、という状況も珍しくないのではと考えられます。

IPパケットフィルターを最適化して減らした方が、ノーマルパスでフィルターを実際に走査して処理する際の処理速度向上につながります。それだけではありません。ルーター、すなわちコンピューターのCPUはキャッシュ機能が働いているため、広範囲にメモリアクセスするよりも、局所的な範囲をひたすらメモリアクセスする方が、より高速にメモリアクセスしやすい、という特徴があります。IPパケットフィルターを最適化して減らすことでIPパケットフィルターのルーチンが小さくなれば、このCPUのキャッシュ機能がより働きやすくなり、結果として処理速度の向上につながるものと推測されます。

IPパケットフィルターをどのようにして見直していったのかを説明する前に、IPパケットフィルターがどこで働くのかをおさらいしましょう。

この図は、ヤマハRTシリーズのFAQ「IPパケット・フィルタリング機能がどこで働くかわからない。」の図表を基に、IPv4(PPPoE)+IPv4(DS-Lite)+IPv6(IPoE)環境用に再構成したものです。

IPv4(PPPoE)の場合のパケットフィルタリングが働く場所はNATの内側となります。またIPv4(DS-Lite)の場合のパケットフィルタリングが働く場所は、カプセル化が解除された(もしくはカプセル化される直前の)IPv4パケットとなります。

configの修正に先立ち、まずはLAN1、LAN2、PP#1、TUNNEL#1、LAN1/1など各インターフェースのIN側とOUT側に必要なフィルタをリストアップします。リストアップしたものを見ながら、configを修正していきます。

1.1 フィルターを使いまわす
同じフィルターが複数のインターフェースで使われることがあります。例えば、

ip filter 100 reject * * * * *
ip filter 101 pass * * * * *

のように、「すべて遮断する」「すべて通す」といったフィルターは、頻繁に使われます。複数のインターフェースで使われるフィルターは、ひとつだけ定義して、使い回しましょう。どういうことなのかを説明します。

ip filter 100 reject * * * * *
ip filter 200 reject * * * * *
ip pp secure filter in 100
ip lan2 secure filter in 200

上記例のようにインターフェース毎に同じ処理内容のフィルターを定義していたとします。同じ処理内容のフィルターはひとつだけ定義することとして、

ip filter 100 reject * * * * *
ip pp secure filter in 100
ip lan2 secure filter in 100

のように複数のインターフェースで使い回せば、フィルターを減らすことができます。

1.2 フィルター番号の付け方を工夫する
例えば、ip filterは100番台、ip filter dynamicは200番台、ipv6 filterは300番台、ipv6 filter dynamicは400番台、といったように分けると、configが読みやすくなります。さらに言うならば、前述のよく使われる「すべて遮断する」「すべて通す」フィルターは、

ip filter 100 pass (通すパケットの詳細)
ip filter 101 pass (通すパケットの詳細)
ip filter 102 pass (通すパケットの詳細)
ip filter 103 reject (遮断するパケットの詳細)
ip filter 104 reject (遮断するパケットの詳細)
ip filter 105 reject (遮断するパケットの詳細)
ip filter 198 reject * * * * * (すべて遮断する)
ip filter 199 pass * * * * * (すべて通す)

ip lan2 secure filter in 100 101 102 198
ip lan1 secure filter in 103 104 105 199

のように、各番台の最後に配置した方が、フィルターを追加・削除した際に、番号を変更せずに済みますし、ip interface secure filterコマンドでフィルターを適用する際のフィルター番号の並びがきれいになり、configが読みやすくなります。

1.3 複数のIPアドレス、プロトコルやポート番号をまとめて指定する
NetBIOS関連の通信を遮断するために使われるフィルターとして、

ip filter 100 reject * * tcp * 135
ip filter 101 reject * * tcp * netbios_ns-netbios_ssn
ip filter 102 reject * * tcp * 445
ip filter 103 reject * * udp * 135
ip filter 104 reject * * udp * netbios_ns-netbios_ssn
ip filter 105 reject * * udp * 445

ip filter 106 reject * * tcp 135 *
ip filter 107 reject * * tcp netbios_ns-netbios_ssn *
ip filter 108 reject * * tcp 445 *
ip filter 109 reject * * udp 135 *
ip filter 110 reject * * udp netbios_ns-netbios_ssn *
ip filter 111 reject * * udp 445 *

といったフィルターがありますが、このフィルターは

ip filter 100 reject * * tcp,udp * 135,netbios_ns-netbios_ssn,445
ip filter 101 reject * * tcp,udp 135,netbios_ns-netbios_ssn,445 *

とまとめて書くことができます。また宛先がプライベートIPアドレスのパケットをフィルタリングするために

ip filter 100 reject * 10.0.0.0/8 * * *
ip filter 101 reject * 172.16.0.0/12 * * *
ip filter 102 reject * 192.168.0.0/16 * * *

といったフィルターを使うことがありますが、このフィルターも

ip filter 100 reject * 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 * * *

とまとめて書くことができます。まとめて書くことで、フィルタ定義の行数が少なくなってconfigが読みやすくなります。通信速度にはたぶん影響しないです、

1.4 WAN側のフィルターは単純化できるかも
ヤマハルーターをブロードバンドルーターとしてしか使っておらず、パソコンやタブレット、スマホでネットが使えればよく、リモートアクセスやゲーム、自宅サーバーのためのポート開放などが不要であれば、WAN側インターフェースのIPv4用フィルター設定は単純化できます。

ip filter 100 reject 10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 * * * *
ip filter 101 pass * * icmp 3,11 *
ip filter 102 reject * * * * *
ip filter 103 pass * * * * *
ip filter dynamic 200 * * domain
ip filter dynamic 201 * * www
ip filter dynamic 202 * * ftp
ip filter dynamic 203 * * smtp
ip filter dynamic 204 * * pop3
ip filter dynamic 205 * * tcp
ip filter dynamic 206 * * udp

ip pp secure filter in 100 101 102
ip pp secure filter out 103 dynamic 200 201 202 203 204 205 206
ip pp intrusion detection in on reject=on
ip filter source-route on
ip filter directed-broadcast on

外から入ってくるパケットは一部のICMPを除いてすべて遮断、外へ出ていくパケットはすべて通過、その戻りパケットも通過、IDSは効かせる、との設定で事足りるはずです。(ip filter 100のフィルタは、IPアドレス・スプーフィング攻撃(ip spoofing)対策のフィルタです。ICMPについては、Path MTU Discoveryブラックホール等に起因する通信不能に陥らないよう、Type 3″Destination Unreachable”とType 11″Time Exceeded”の2種類を通します。)

1.5 不要なフィルターは削除する
おそらくですが、フィルターは定義しているだけでルーター内のメインメモリ(主記憶)上に展開されるはずであり、使わないフィルターを定義しておくのはメモリ・CPUリソースの浪費につながる可能性があります。使っていないフィルター定義は、思い切って削除しましょう。

(2)設定値の最適化
MTUの設定は通信速度に大きく影響するので、忘れずに設定しましょう。MTUの推奨値は、IPv6(IPoE)は1500、IPv4(DS-Lite/MAP-E)は1460、IPv4(PPPoE)は1454、となります。

ipv6 lan2 mtu 1500
ip tunnel mtu 1460
ip pp mtu 1454

参考までに、MTU値の根拠も書いておきます。東日本電信電話株式会社 『IP通信網サービスのインタフェース 第三分冊(第35版)』の19頁目と20頁目に以下の記述があります。

19頁目:フレッツ光ネクストではIP通信網におけるIPv4通信のMTU値は1454byteです。
20頁目:IP通信網におけるIPv6(IPoE)通信のMTUの値は1500byteです。

スポンサーリンク