= MTU = 二段重ねのトンネル(IPv4 over IPv6 over IPv4)のMTUが両方とも1280になっていてフラグメントが発生する件についての調査を行った。 * RFCでIPv6のMTUは1280オクテット以上が必須、推奨は1500オクテット以上と決まっている * IPv4はそうでもない。576オクテット以上 IPv6の部分のMTUを1480に引き上げればいいのではないかと考えたが、 VPS側のFreeBSDの6to4トンネルインターフェイスであるstfがどうやら1280にしか対応していない事が判明した。 (学内はMTU1480でも通信できているように見える) 仕方ないのでIPv4 over IPv6の方でMTUを1280よりも小さく設定する事を考えたのだが、 MTUを設定しようとするとinvalid valueを言われてしまう。 {{{ $ sudo ifconfig gif1 mtu 1200 ifconfig: ioctl (set mtu): Invalid argument }}} gif(4)によれば {{{ If the outer protocol is IPv6, path MTU discovery for encapsulated pack- ets may affect communication over the interface. The first bigger-than- pmtu packet may be lost. To avoid the problem, you may want to set the interface MTU for gif to 1240 or smaller, when the outer header is IPv6 and the inner header is IPv4. }}} とあり、MTUを1240以下に設定できるように思わせる記述があるのだがどうなっているのだろう。 また、gif1からIPv6アドレスを削除することも試みたが効果がなかった。 [[http://www.mail-archive.com/freebsd-stable@freebsd.org/msg102374.html|IPv6 gif(4) MTU: manpage vs src inconsistency?]] という話もありソースを読んでみる必要がありそうだ。 場合によってはカーネルにパッチかねぇ