diff options
Diffstat (limited to 'internal/wireguard')
| -rw-r--r-- | internal/wireguard/wireguard.go | 53 |
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 == "" { |
