mirror of
https://github.com/qdm12/gluetun.git
synced 2025-12-11 13:56:50 -06:00
48 lines
1.5 KiB
Go
48 lines
1.5 KiB
Go
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.MTU = userSettings.MTU
|
|
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
|
|
}
|