Advanced network configuration under FreeBSD

🕐 2 minutes

📅 2022-01-29

Wi-Fi setup

If we have installed FreeBSD via Ethernet, and we want to set up the Wi-Fi connection, we carry out the following steps.

To display the Wi-Fi interface, we enter the following command:

$: sysctl net.wlan.devices

Output => net.wlan.devices: iwn0

Enable wireless networking in rc.conf (country depends on your actual location):

$: doas sysrc cloned_interfaces+=iwm0
$: doas sysrc wlans_iwm0=wlan0
$: doas sysrc ifconfig_wlan0="WPA DHCP country de"

Modify /etc/wpa_supplicant.conf to contain your network, example:

$: doas nano /etc/wpa_supplicant.conf =>


Enable the IPv6 data protection extension

By default, the IPv6 Privacy Extension mode is not activate — here is how we activate it:

$: doas sysrc ipv6_privacy=YES

DHCP in the background during startup

By default, the DHCP client pauses the startup until it receives an address (or times out). To avoid this, we do the following:

$: doas sysrc background_dhclient=YES

Failover between wired network card and Wi-Fi

This configuration enables a quick change between the wired network (priority) and Wi-Fi.

We will first test our WPA configuration before setting up this example (an Intel iwn0 Wi-Fi card and an em0 Ethernet card will be used).

We start by specifying the MAC address of the Ethernet card and configure the Wi-Fi card with the same MAC address (which means that the same address displayed regardless of the interface used):

$: doas setenv MACETH `ifconfig em0 | grep hwaddr | cut -d `` -f 2`
$: doas sysrc wlans_iwn0 = wlan0
$: doas sysrc ifconfig_em0 = up
$: doas sysrc ifconfig_wlan0 = "WPA powersave"
$: doas sysrc create_args_wlan0 = "wlanaddr $ MACETH country DE regdomain ETSI"
$: doas sysrc cloned_interfaces = lagg0
$: doas sysrc ifconfig_lagg0 = "up laggproto failover laggport em0 laggport wlan0 DHCP"
$: doas sysrc ifconfig_lagg0_ipv6 = "inet6 accept_rtadv"

A simple “doas service netif restart” may not be sufficient; if our wlan0 interface has already configured: a restart maybe required.