Wireguard support for Mullvad and Windscribe (#565)
- `internal/wireguard` client package with unit tests - Implementation works with kernel space or user space if unavailable - `WIREGUARD_PRIVATE_KEY` - `WIREGUARD_ADDRESS` - `WIREGUARD_PRESHARED_KEY` - `WIREGUARD_PORT` - `internal/netlink` package used by `internal/wireguard`
This commit is contained in:
34
internal/provider/utils/wireguard.go
Normal file
34
internal/provider/utils/wireguard.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"net"
|
||||
|
||||
"github.com/qdm12/gluetun/internal/configuration"
|
||||
"github.com/qdm12/gluetun/internal/models"
|
||||
"github.com/qdm12/gluetun/internal/wireguard"
|
||||
)
|
||||
|
||||
func BuildWireguardSettings(connection models.Connection,
|
||||
userSettings configuration.Wireguard) (settings wireguard.Settings) {
|
||||
settings.PrivateKey = userSettings.PrivateKey
|
||||
settings.PublicKey = connection.PubKey
|
||||
settings.PreSharedKey = userSettings.PreSharedKey
|
||||
settings.InterfaceName = userSettings.Interface
|
||||
|
||||
const routePriority = 101 // 100 is to receive external connections
|
||||
settings.RulePriority = routePriority
|
||||
|
||||
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)
|
||||
|
||||
address := new(net.IPNet)
|
||||
address.IP = make(net.IP, len(userSettings.Address.IP))
|
||||
copy(address.IP, userSettings.Address.IP)
|
||||
address.Mask = make(net.IPMask, len(userSettings.Address.Mask))
|
||||
copy(address.Mask, userSettings.Address.Mask)
|
||||
settings.Addresses = append(settings.Addresses, address)
|
||||
|
||||
return settings
|
||||
}
|
||||
Reference in New Issue
Block a user