summaryrefslogtreecommitdiff
path: root/internal/wireguard/wireguard.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/wireguard/wireguard.go')
-rw-r--r--internal/wireguard/wireguard.go53
1 files changed, 3 insertions, 50 deletions
diff --git a/internal/wireguard/wireguard.go b/internal/wireguard/wireguard.go
index 5db588e..8ffe794 100644
--- a/internal/wireguard/wireguard.go
+++ b/internal/wireguard/wireguard.go
@@ -33,9 +33,9 @@ import (
"strings"
"git.theodohertyfamily.com/wg-wrap/internal/namespace"
+ "git.theodohertyfamily.com/wg-wrap/internal/network"
"git.theodohertyfamily.com/wg-wrap/internal/paths"
"git.theodohertyfamily.com/wg-wrap/pkg/wgconf"
- "github.com/vishvananda/netlink"
"golang.org/x/sys/unix"
"golang.zx2c4.com/wireguard/conn"
"golang.zx2c4.com/wireguard/device"
@@ -117,8 +117,8 @@ func StartTunnel(pm *paths.PathManager, profile string, cfg *wgconf.Config, dnsS
return nil, fmt.Errorf("failed to bring up WireGuard device: %w", err)
}
- // 4. Configure network interface using netlink
- if err := configureInterface(tunName, cfg.Address, mtu); err != nil {
+ // 4. Configure network interface
+ if err := network.ConfigureInterface(tunName, cfg.Address, mtu); err != nil {
return nil, fmt.Errorf("failed to configure network interface %s: %w", tunName, err)
}
@@ -201,53 +201,6 @@ func buildUAPIConfig(cfg *wgconf.Config) (string, error) {
return sb.String(), nil
}
-// configureInterface uses netlink to set address, MTU, and default routing table.
-func configureInterface(name, address string, mtu int) error {
- link, err := netlink.LinkByName(name)
- if err != nil {
- return fmt.Errorf("failed to find link %s: %w", name, err)
- }
-
- if err := netlink.LinkSetMTU(link, mtu); err != nil {
- return fmt.Errorf("failed to set MTU %d on link %s: %w", mtu, name, err)
- }
-
- if err := netlink.LinkSetUp(link); err != nil {
- return fmt.Errorf("failed to bring up link %s: %w", name, err)
- }
-
- addr, err := netlink.ParseAddr(address)
- if err != nil {
- return fmt.Errorf("invalid IP address %s: %w", address, err)
- }
- if err := netlink.AddrAdd(link, addr); err != nil {
- if !strings.Contains(err.Error(), "file exists") {
- return fmt.Errorf("failed to add address %s to link %s: %w", address, name, err)
- }
- }
-
- var dst *net.IPNet
- if addr.IP.To4() != nil {
- _, dst, _ = net.ParseCIDR("0.0.0.0/0")
- } else {
- _, dst, _ = net.ParseCIDR("::/0")
- }
-
- route := &netlink.Route{
- Scope: netlink.SCOPE_UNIVERSE,
- LinkIndex: link.Attrs().Index,
- Dst: dst,
- }
-
- if err := netlink.RouteAdd(route); err != nil {
- if err := netlink.RouteReplace(route); err != nil {
- return fmt.Errorf("failed to configure default route via %s: %w", name, err)
- }
- }
-
- return nil
-}
-
// GetTunnelLocalIP extracts the local IP address (without CIDR) from the config.
func GetTunnelLocalIP(cfg *wgconf.Config) (string, error) {
if cfg.Address == "" {