PC, atri (enp18s0): MTU 9014
↑↓
スイッチ, karen (port 7): MTU 9216
↑↓
ルータ, RTX830 (LAN1): MTU 1500
↑↓
スイッチ, karen (port 4): MTU 9216
↑↓
NAS, yonagi (LAN4=eth3): MTU 1500
この構成だったらちゃんと通信できそうなものだが、 ping -v -M do -s 1472 は通るのに SSH や web ログインは失敗する。
atri 側で MTU 1500 にしてやると全てがうまくいく。
おかしくない?
私の理解では、どちらかのクライアントの MTU が十分低ければ (たとえば 1500 なら) TCP のハンドシェイクで MSS がちゃんと低い方の MTU に合うように合意されるから途中の経路がそれ未満でなければ問題にならないと理解していたんだけど
まさかオプショナルな VLAN タグの4バイトぶんでズレてるとかそんなオチじゃないよね?
とりあえず手元マッスィーンで
sysctl -w net.ipv4.tcp_mtu_probing=1
すると (多少時間はかかるが) 問題なく通るようになった。となると途中経路で ICMP パケット落としちゃってたりする? (そんなフィルタルール書いた記憶ないが……)
そもそも lan1 に対してフィルタかけてなかった。後でやるつもりですっかり忘れてたやつじゃん、ガバすぎるな (VLAN 間の通信が無条件に許可されてる)
これなんとなく推測が立ってきた、たぶん RTX830 が1500バイトよりデカいパケットをチェックサムエラーとかで破棄してるという結論でよさそうな気がしている。
RTX がフラグメントしてくれるのはあくまで1500バイト以内のものをそれ未満に分割することができるというだけの話と考えられそう