The guest OS is a Debian Buster 64 with 512Mb of RAM. I am using the Guest Additions on the guest. Its version is 6.1.6.
According to my tests, the MSS set in the SYN packet of the TCP handshake that leaves the host is the host's MTU, and not the guest's MTU. This happens even if the latter is set lower than the host MTU.
I run the following tests:
1) Guest and host default MTU
- * Settings:
- - Guest eth0 MTU: 1500
- Host eth0 MTU: 1500
- - Guest eth0 SYN MSS: 1460
- Host eth0 SYN MSS: 1460
- - Guest eth0 MTU: 1500
- * Settings:
- - Guest eth0 MTU: 1400
- Host eth0 MTU: 1400
- - Guest eth0 SYN MSS: 1360
- Host eth0 SYN MSS: 1360
- - Guest eth0 MTU: 1400
- * Settings:
- - Guest eth0 MTU: 1400
- Host eth0 MTU: 1500
- - Guest eth0 SYN MSS: 1360
- Host eth0 SYN MSS: 1460
- - Guest eth0 MTU: 1400
- * Settings:
- - Guest eth0 MTU: 1500
- Host eth0 MTU: 1400
- - Guest eth0 SYN MSS: 1460
- Host eth0 SYN MSS: 1360
- - Guest eth0 MTU: 1500
The MSS clamping behavior for test 4 is expected because the host cannot provide the MSS that the guest expects.
I however think that the behavior of test 3 is incorrect because it increases the packet size received by the guest which may cause problems on the guest itself or in a virtualized network.
I already posted a bug report on the tracker about this problem but I read on this bug report that it is better to post on the forums.
This problem seems to be related to an existing bug report.
I am not using URLs here because I am not allowed to but I will try to edit my post later.
I can provide the Vagrantfile and/or the pcap files if needed.