mirror of
https://github.com/qdm12/gluetun.git
synced 2026-06-22 20:07:38 +02:00
Path MTU discovery fixes and improvements (#3109)
- Existing option `WIREGUARD_MTU` , if set, disables PMTUD and is used - New option `PMTUD_ICMP_ADDRESSES=1.1.1.1,8.8.8.8` and `PMTUD_TCP_ADDRESSES=1.1.1.1:443,8.8.8.8:443` - ICMP PMTUD now targets external-by-default IP addresses - New TCP PMTUD (binary search only) as a second MTU confirmation and fallback mechanism. - Force set TCP MSS to MTU - IP header - TCP base header - "magic 20 bytes" 🎆 - Fix #3108
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
//go:build !darwin
|
||||
|
||||
package tcp
|
||||
|
||||
import (
|
||||
"github.com/qdm12/gluetun/internal/pmtud/constants"
|
||||
)
|
||||
|
||||
func stripIPv4Header(reply []byte) (result []byte, ok bool) {
|
||||
if len(reply) < int(constants.IPv4HeaderLength) {
|
||||
return nil, false // not an IPv4 packet
|
||||
}
|
||||
|
||||
version := reply[0] >> 4 //nolint:mnd
|
||||
const ipv4Version = 4
|
||||
if version != ipv4Version {
|
||||
return nil, false
|
||||
}
|
||||
// For IPv4 we need to skip the IP header, which is at least
|
||||
// 20B and can be up to 60B.
|
||||
// The Internet Header Length is the lower 4 bits of the first byte and
|
||||
// represents the number of 32-bit words of the header length.
|
||||
const ihlMask byte = 0x0F
|
||||
const bytesInWord = 4
|
||||
headerLength := int((reply[0] & ihlMask)) * bytesInWord
|
||||
if len(reply) < headerLength {
|
||||
return nil, false // not enough data for full IPv4 header
|
||||
}
|
||||
return reply[headerLength:], true
|
||||
}
|
||||
Reference in New Issue
Block a user