2021-08-22 14:58:39 -07:00
|
|
|
package utils
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"net"
|
|
|
|
|
|
2022-01-06 06:40:23 -05:00
|
|
|
"github.com/qdm12/gluetun/internal/configuration/settings"
|
2021-08-22 14:58:39 -07:00
|
|
|
"github.com/qdm12/gluetun/internal/models"
|
|
|
|
|
"github.com/qdm12/gluetun/internal/wireguard"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func BuildWireguardSettings(connection models.Connection,
|
2022-09-06 12:16:29 +00:00
|
|
|
userSettings settings.Wireguard, ipv6Supported bool) (settings wireguard.Settings) {
|
2022-01-06 06:40:23 -05:00
|
|
|
settings.PrivateKey = *userSettings.PrivateKey
|
2021-08-22 14:58:39 -07:00
|
|
|
settings.PublicKey = connection.PubKey
|
2022-01-06 06:40:23 -05:00
|
|
|
settings.PreSharedKey = *userSettings.PreSharedKey
|
2021-08-22 14:58:39 -07:00
|
|
|
settings.InterfaceName = userSettings.Interface
|
2022-09-06 12:16:29 +00:00
|
|
|
settings.IPv6 = &ipv6Supported
|
2021-08-22 14:58:39 -07:00
|
|
|
|
2021-08-28 20:59:39 +00:00
|
|
|
const rulePriority = 101 // 100 is to receive external connections
|
|
|
|
|
settings.RulePriority = rulePriority
|
2021-08-22 14:58:39 -07:00
|
|
|
|
|
|
|
|
settings.Endpoint = new(net.UDPAddr)
|
|
|
|
|
settings.Endpoint.IP = make(net.IP, len(connection.IP))
|
|
|
|
|
copy(settings.Endpoint.IP, connection.IP)
|
|
|
|
|
settings.Endpoint.Port = int(connection.Port)
|
|
|
|
|
|
2021-08-28 20:59:39 +00:00
|
|
|
for _, address := range userSettings.Addresses {
|
2021-08-28 18:43:23 +00:00
|
|
|
addressCopy := new(net.IPNet)
|
|
|
|
|
addressCopy.IP = make(net.IP, len(address.IP))
|
|
|
|
|
copy(addressCopy.IP, address.IP)
|
|
|
|
|
addressCopy.Mask = make(net.IPMask, len(address.Mask))
|
|
|
|
|
copy(addressCopy.Mask, address.Mask)
|
|
|
|
|
settings.Addresses = append(settings.Addresses, addressCopy)
|
|
|
|
|
}
|
2021-08-22 14:58:39 -07:00
|
|
|
|
|
|
|
|
return settings
|
|
|
|
|
}
|