友人数人に以前から「お前のサーバにつながらない」とは言われていた。君たちが使ってるのはYahoo!BBだし、気のせいじゃねーのぐらいに思っていたのだが、試しに「Yahoo!BB 自宅サーバ タイムアウト」でググるとPath MTU Discovery Black Holeという現象らしいことがわかった。
MTUとは…Maximum Transmission Unitの略で「送受信するときのパケットサイズの最大値」であるらしい。
- 私のサーバではこれが1500となっていた
- これはYahoo!BBなどのADSL回線で利用されている1454よりも大きい。
- そうすると受け手側のルータは送り手側である私のサーバに「おまえさぁ、送ってくんのでけぇよ。もっと小さくしろよ。」と文句を垂れる。
- 文句を言われたサーバは「おおそうか。わりぃわりぃ。じゃ、これでどうよ。」とクライアント側の要求どおりに小さいサイズで送りなおす。
- ところが、この文句はICMPと言う奴で送られる。
- 私のサーバは、インターネットからの通信はTCP/IPしか受け取らない。つまり、文句が届かない。
- このようにして私のサーバはデータを送ったつもりのまま、受け手側は再度データが来るもんだと思い込む。
で、タイムアウトが発生するわけだ。
なるほどねぇ。
で、どうするかと言うことなんだが私のサーバにインターネットからのICMPは廻せない。ルータがそのように作られていない。
なので「これなら大丈夫だろう」というサイズでMTUを決め打ちする。許容量より小さい分にはみんな受け取ってくれるらしい。
と言うことでルータとサーバの両方でMTUを1454に修正。これでダメなら、もっと小さくするってことだね。
サーバ側のMTUは ifconfig eth0 MTU=1454 とコマンドと、ifcfg-eth0にMTU=1454と書き足すことでO.K.
さて、どうなるかな??