wgctrl

package module
v1.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 22, 2026 License: MIT Imports: 6 Imported by: 1

README

wgctrl-go

This is a fork of WireGuard/wgctrl-go revised to support AmneziaWG (AWG).

It provides native Go control over WireGuard/AmneziaWG devices on Linux, supporting both the Kernel module and Userspace implementations (via netlink and unix sockets).

API Changes

Device Structure

The Device struct now includes an IsAmnezia flag and identifies the implementation type.

type Device struct {
    Name         string
    Type         DeviceType
    PublicKey    Key
    IsAmnezia    bool       // True if the device supports AmneziaWG obfuscation
    Peers        []Peer
    // ... other standard fields
}
Amnezia Configuration

The Config struct is extended with Amnezia-specific fields (Jc, Jmin, Jmax, S1-S4, H1-H4). You can manually set these or use the helper:

cfg := &wgtypes.Config{}
// Automatically populate Config with randomized obfuscation values to bypass DPI
cfg.GenerateAmneziaParams() 

Projects using this library

  • jwg: A lightweight CLI manager (~1k LOC) for WireGuard & AmneziaWG. Automates networking, nftables/UFW, and peer management.
  • dnsr: DNS-based selective routing tool for DPI bypass on Linux and routers.

Documentation

Overview

Package wgctrl enables control of WireGuard devices on multiple platforms.

For more information on WireGuard, please see https://www.wireguard.com/.

This package implements WireGuard configuration protocol operations, enabling the configuration of existing WireGuard devices. Operations such as creating WireGuard devices, or applying IP addresses to those devices, are out of scope for this package.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Client

type Client struct {
	// contains filtered or unexported fields
}

A Client provides access to WireGuard device information.

func New

func New() (*Client, error)

New creates a new Client.

func (*Client) Close

func (c *Client) Close() error

Close releases resources used by a Client.

func (*Client) ConfigureDevice

func (c *Client) ConfigureDevice(name string, cfg wgtypes.Config) error

ConfigureDevice configures a WireGuard device by its interface name.

Because the zero value of some Go types may be significant to WireGuard for Config fields, only fields which are not nil will be applied when configuring a device.

If the device specified by name does not exist or is not a WireGuard device, an error is returned which can be checked using `errors.Is(err, os.ErrNotExist)`.

func (*Client) Device

func (c *Client) Device(name string) (*wgtypes.Device, error)

Device retrieves a WireGuard device by its interface name.

If the device specified by name does not exist or is not a WireGuard device, an error is returned which can be checked using `errors.Is(err, os.ErrNotExist)`.

func (*Client) Devices

func (c *Client) Devices() ([]*wgtypes.Device, error)

Devices retrieves all WireGuard devices on this system.

Directories

Path Synopsis
cmd
wgctrl command
Command wgctrl is a testing utility for interacting with WireGuard via package wgctrl.
Command wgctrl is a testing utility for interacting with WireGuard via package wgctrl.
internal
wgfreebsd
Package wgfreebsd provides internal access to FreeBSD's WireGuard ioctl interface.
Package wgfreebsd provides internal access to FreeBSD's WireGuard ioctl interface.
wgfreebsd/internal/nv
Package nv marshals and unmarshals Go maps to/from FreeBSDs nv(9) name/value lists See: https://www.freebsd.org/cgi/man.cgi?query=nv&sektion=9
Package nv marshals and unmarshals Go maps to/from FreeBSDs nv(9) name/value lists See: https://www.freebsd.org/cgi/man.cgi?query=nv&sektion=9
wgfreebsd/internal/wgh
Package wgh is an auto-generated package which contains constants and types used to access WireGuard information using ioctl calls.
Package wgh is an auto-generated package which contains constants and types used to access WireGuard information using ioctl calls.
wginternal
Package wginternal contains shared internal types for wgctrl.
Package wginternal contains shared internal types for wgctrl.
wglinux
Package wglinux provides internal access to Linux's WireGuard generic netlink interface.
Package wglinux provides internal access to Linux's WireGuard generic netlink interface.
wgopenbsd
Package wgopenbsd provides internal access to OpenBSD's WireGuard ioctl interface.
Package wgopenbsd provides internal access to OpenBSD's WireGuard ioctl interface.
wgopenbsd/internal/wgh
Package wgh is an auto-generated package which contains constants and types used to access WireGuard information using ioctl calls.
Package wgh is an auto-generated package which contains constants and types used to access WireGuard information using ioctl calls.
wgtest
Package wgtest contains shared testing utilities for package wgctrl.
Package wgtest contains shared testing utilities for package wgctrl.
wguser
Package wguser provides internal access to the userspace WireGuard configuration protocol interface.
Package wguser provides internal access to the userspace WireGuard configuration protocol interface.
Package wgtypes provides shared types for the wgctrl family of packages.
Package wgtypes provides shared types for the wgctrl family of packages.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL