Hi. I have the following topology:
[U1] -------- [R1] -------- [R2] -------- [R3] -------- [U2]
All links have an MTU of 1500. I've been testing Path MTU Discovery with Ubuntu, and Ubuntu is ignoring a fragmentation needed packet if that ICMP doesn't come from it's local gateway.
An example. U1 is directly connected to R1 with an MTU of 1500. U2 is a client requesting data via HTTP. PMTUD is on by default and so when U1 responds, that packet will have the DF-bit set in it's outgoing packets. Those packets will use the local MTU of 1500. If I drop the MTU between R1 and R2 and do the same thing, R1 will drop that packet and send an ICMP packet stating destination unreachable, fragmentation needed. That ICMP packet will also have the MTU of 1400 inside the packet. U1 then caches this information and reorignates packets with an MTU of 1400.
The above so far all works perfcectly fine. If I now push the R1-R2 link back up to MTU 1500 and drop the R2-R3 link to MTU 1400 it no longer works. R2 is dropping the packet and sending the ICMP packet as expected. Via tcpdump I can see U1 is receicing fragmentation needed packets from R2, but it's ignoring them. U1 is continuing to send packets with MTU 1500 onto the link. R2 is constantly dropping and informing U1. The result is U2 get no data at all.
If I reverse the server and client above, U2 acts on ICMP messages from R3, but ignores them from R2. Even though they are receiving those messages.
If I swap the servers with Windows 2012 servers, or Debian 7 servers, it works perfectly fine.
I've tried with both Ubuntu 14.04 and 13.10.
Clean install with apache2. Nothing else installed. No iptables rules.
Any ideas?
Bookmarks