package utils import ( "net/netip" "github.com/qdm12/gluetun/internal/configuration/settings" "github.com/qdm12/gluetun/internal/models" "github.com/qdm12/gluetun/internal/wireguard" ) func BuildWireguardSettings(connection models.Connection, userSettings settings.Wireguard, ipv6Supported bool, ) (settings wireguard.Settings) { settings.PrivateKey = *userSettings.PrivateKey settings.PublicKey = connection.PubKey settings.PreSharedKey = *userSettings.PreSharedKey settings.InterfaceName = userSettings.Interface settings.Implementation = userSettings.Implementation settings.AmneziaWG = buildAmneziaWgSettings(userSettings.AmneziaWG) if *userSettings.MTU > 0 { settings.MTU = *userSettings.MTU } else { // The default is 1320 which is NOT the wireguard-go default // of 1420 because this impacts bandwidth a lot on some // VPN providers, see https://github.com/qdm12/gluetun/issues/1650. // It has been lowered to 1320 following quite a bit of // investigation in the issue: https://github.com/qdm12/gluetun/issues/2533. const defaultMTU = 1320 settings.MTU = defaultMTU } settings.IPv6 = &ipv6Supported const rulePriority = 101 // 100 is to receive external connections settings.RulePriority = rulePriority settings.Endpoint = netip.AddrPortFrom(connection.IP, connection.Port) settings.Addresses = make([]netip.Prefix, 0, len(userSettings.Addresses)) for _, address := range userSettings.Addresses { if !ipv6Supported && address.Addr().Is6() { continue } addressCopy := netip.PrefixFrom(address.Addr(), address.Bits()) settings.Addresses = append(settings.Addresses, addressCopy) } settings.AllowedIPs = make([]netip.Prefix, 0, len(userSettings.AllowedIPs)) for _, allowedIP := range userSettings.AllowedIPs { if !ipv6Supported && allowedIP.Addr().Is6() { continue } settings.AllowedIPs = append(settings.AllowedIPs, allowedIP) } settings.PersistentKeepaliveInterval = *userSettings.PersistentKeepaliveInterval return settings } func buildAmneziaWgSettings(s settings.AmneziaWg) wireguard.AmneziaSettings { return wireguard.AmneziaSettings{ JunkPacketCount: *s.JunkPacketCount, JunkPacketMin: *s.JunkPacketMin, JunkPacketMax: *s.JunkPacketMax, PaddingS1: *s.PaddingS1, PaddingS2: *s.PaddingS2, PaddingS3: *s.PaddingS3, PaddingS4: *s.PaddingS4, HeaderH1: *s.HeaderH1, HeaderH2: *s.HeaderH2, HeaderH3: *s.HeaderH3, HeaderH4: *s.HeaderH4, InitPacketI1: *s.InitPacketI1, InitPacketI2: *s.InitPacketI2, InitPacketI3: *s.InitPacketI3, InitPacketI4: *s.InitPacketI4, InitPacketI5: *s.InitPacketI5, } }