netbirdio/netbird · error

error creating tun device: %s

Error message

error creating tun device: %s

What it means

Error "error creating tun device: %s" thrown in netbirdio/netbird.

Source

Thrown at client/iface/device/device_netstack.go:76

func (t *TunNetstackDevice) create() (WGConfigurer, error) {
	log.Info("create nbnetstack tun interface")

	// TODO: get from service listener runtime IP
	dnsAddr, err := nbnet.GetLastIPFromNetwork(t.address.Network, 1)
	if err != nil {
		return nil, fmt.Errorf("last ip: %w", err)
	}

	addresses := []netip.Addr{t.address.IP}
	if t.address.HasIPv6() {
		addresses = append(addresses, t.address.IPv6)
	}
	log.Debugf("netstack using addresses: %v", addresses)
	t.nsTun = nbnetstack.NewNetStackTun(t.listenAddress, addresses, dnsAddr, int(t.mtu))
	log.Debugf("netstack using dns address: %s", dnsAddr)
	tunIface, net, err := t.nsTun.Create()
	if err != nil {
		return nil, fmt.Errorf("error creating tun device: %s", err)
	}
	t.filteredDevice = newDeviceFilter(tunIface)
	t.net = net

	t.device = device.NewDevice(
		t.filteredDevice,
		t.bind,
		device.NewLogger(wgLogLevel(), "[netbird] "),
	)

	t.configurer = configurer.NewUSPConfigurerNoUAPI(t.device, t.name, t.bind.ActivityRecorder())
	err = t.configurer.ConfigureInterface(t.key, t.port)
	if err != nil {
		if cErr := tunIface.Close(); cErr != nil {
			log.Debugf("failed to close tun device: %v", cErr)
		}
		return nil, fmt.Errorf("error configuring interface: %s", err)
	}

View on GitHub (pinned to 93e97f4bf1)

When it happens

Trigger: Thrown at client/iface/device/device_netstack.go:76 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of netbirdio/netbird@93e97f4bf1 (2026-08-16). Data as JSON: /api/errors/e77554a49544c046. Report an issue: GitHub.