| ■ |
NAT多段使用時のMTU障害について。 |
 |
 |
 |
| ■ |
現象 |
| |
WAN側にPPPoEなどのLAN側よりも小さいMTU値を持つ回線を使用した場合、ルーター配下にPCを直結した場合には問題ないが、ブロードバンドルーター(NAT)を設置すると大きなサイズのメールの送信ができなくなる場合があります。 |
 |
| |
原因 |
| |
これはRFC1191にて定義されているPathMTUDiscovery(PMTUD・経路MTU検出)のフローが正常に動作していないことが原因です。
MTUとはネットワークの物理的な種類によって決まるパラメーターで、一回に送信できるパケットのサイズを示します。
フレッツサービス等で使用されるPPPoE は、Ethernet上で認証を行うため、通常のEthenetフレームにPPPヘッダが含まれる分、運搬可能なパケットサイズが若干小さくなります。
具体的に言いますと、EthernetでのMTU値は1500ですが、PPPoEでのMTU値は1492になります。ただし、NTTのフレッツサービスでは、1454が使用されます。
通常、端末が送信するパケットのMTU値は、使用される物理インターフェイスに依存します。
一般的なEthernet では1500の値が使用され、送信パケットのMTUは全て1500 に設定されます。
そして送信元の端末は、接続先サーバーまでの間に異なるMTU値が存在するかどうかを、自発的に調べることはしません。
PMTUDにおけるパケットのMTU値取得の手順を簡単に解説すると下記の様なフローになります。 |
 |
| |
| (1) |
端末がインターフェイスに指定されたMTU値(1500)でパケットを送信します。 |
| (2) |
MTU値が異なるセグメントを繋ぐルーターがパケットを受信すると、パケットのサイズを調べ、もしそのパケットサイズが宛先インターフェイスのMTU 値よりも大きかった場合、受信したパケットがフラグメント(細分化)可能かどうかを調べます。(TCPのフラグメントビットのフラグが立っているかを確認します。) |
| (3) |
もし、パケットサイズが宛先インターフェイスのMTU値よりも小さかった場合や、大きくてもフラグメントが許可されているのであれば、ルーターはパケットをフラグメントしてWAN側に送信します。 |
| (4) |
もし、フラグメントが許可されていなければ、ルーターはそのパケットを一度破棄し、その発信元アドレスに対して正しいパケットサイズをICMP/Destination Unreacheable(DU)/Fragmentation Needed(FN)パケットにて通知します。 |
| (5) |
パケット発信元端末は、ルーターからのICMPパケットを受信すると、そこに含まれる正しいMTU値を読み取り、先ほどのパケットを正しいMTU値に変更・細分化して再送信します。 |
| (6) |
項目(2)に戻ります |
|
 |
| |
問題になるのは、この項目(4)で使用されるICMPパケットが正しく発信元に届かない場合です。
つまり、正しいMTU値をパケットを発信した端末が取得できない場合には、その後に続くパケットも全てオーバーサイズのMTU値で送信されてしまうので、それらのパケットは全てルーターにて「不正パケット」として破棄されてしまいます。 |
 |
| |
このような現象はPMTUD Blackhole と呼ばれ、RFC2923にて定義されており、具体的には以下のような状況で発生します。
・ MTU値の異なるセグメントを繋ぐルーターがICMPを送信しない。
・ 途中経路にあるルーターやFirewallがICMP/DU/FNを透過しない。
・ 途中経路にNATが存在し、ICMP/DU/FNが正しく転送されない。
この現象の発生時には、今回のケース以外にも下記の様な症状が現れます。
HTTP:特定のサイトがうまく表示されない。
FTP:コネクトはでき、ファイルが少ないディレクトリのList表示はできるが、大きなサイズのファイルをGETしようとするとフリーズしてしまう。
本現象の見分け方としては、通常は問題なく使用できるにも関わらず、大きなデーターが送られるタイミングで、そのコネクションが止まってしまうという点です。
|
 |
| |
対処方法 |
| |
Fiber Bitにて使用しているルーターはPMTUD機能に対応していますので、問題のあるパケットを受信したとき、そのインターフェイスに対して、自動的にICMPパケットを送信します。
よって、対処方法としては、MTUサイズ変更のためのICMPパケットが正しく発信元の端末まで届くようにするか、Fiberbitマンションルーターの届くパケットのMTU
値そのものを変更する必要があります。
ただし、ユーザーが宅内で使用しているような一般的なブロードバンドルーターのNAT機能では、外部(この場合はFiber Bitマンションルーター)からのICMPパケットを内部に転送することはまずありませんので、実質的には端末そのもののMTU値を直接変更するか、ユーザーが使用しているブロードバンドルーターでMTU値を変更するしかありません。
|