netctl
| Summary |
|---|
| A guide to configuring the network using netctl and network profile scripts. |
| Overview |
Arch Linux provides netctl for network management. netctl supports wired connections on desktops and servers, as well as wireless setups and roaming for mobile users, facilitating easy management of network profiles. NetworkManager and Wicd are popular third-party alternatives.
|
| Related |
| Bridge with netctl |
netctl is a CLI-based tool used to configure and manage network connections via profiles. It is a native Arch Linux project that replaces the old netcfg utility.
Contents |
Installation
The netctl package is available in the official repositories. Installing netctl will replace netcfg.
netctl and netcfg are conflicting packages. You will be potentially connectionless after installing netctl if your profiles are misconfigured.
Required reading
It is advisable to read the following man pages before using netctl:
Configuration
netctl uses profiles to manage network connections, profile files are stored in /etc/netctl/. Example configuration files are provided for the user to assist them in configuring their network connection. These example profiles are located in /etc/netctl/examples/. The common configurations include:
- ethernet-dhcp
- ethernet-static
- wireless-wpa
- wireless-wpa-static
To use an example profile, simply copy one of them from /etc/netctl/examples/ to /etc/netctl/ and configure it to your needs:
# cp /etc/netctl/examples/wireless-wpa /etc/netctl/profile
Once you have created your profile, make an attempt to establish a connection using the newly created profile by running:
# netctl start profile
If issuing the above command results in a failure, then use journalctl -xn and netctl status profile in order to obtain a more in depth explanation of the failure. Make the needed corrections to the failed configuration and retest.
Automatic operation
If you use only one profile (per interface) or want to switch profiles manually, the Basic method will do. Most common examples are servers, workstations, routers etc.
If you need to switch multiple profiles frequently, use Automatic switching of profiles. Most common examples are laptops.
Basic method
With this method, you can statically start only one profile per interface. First manually check that the profile can be started successfully, then it can be enabled using
# netctl enable profile
This will create and enable a systemd service that will start when the computer boots. Changes to the profile file will not propagate to the service file automatically. After such changes, it is necessary to reenable the profile:
# netctl reenable profile
Automatic switching of profiles
netctl provides two special systemd services for automatic switching of profiles:
- For wired interfaces:
netctl-ifplugd@interface.service. Using this netctl profiles change as you plug the cable in and out. - For wireless interfaces:
netctl-auto@interface.service. Using this netctl profiles change as you move from range of one network into range of other network.
First install required packages:
- Package wpa_actiond is required to use
netctl-auto@interface.service. - Package ifplugd is required to use
netctl-ifplugd@interface.service.
Now configure all profiles that netctl-auto@interface.service or netctl-ifplugd@interface.service can start.
If you want some wireless profile not to be started automatically by netctl-auto@interface.service, you have to explicitly add ExcludeAuto=yes to that profile. You can use Priority= to set priority of some profile when multiple profiles are available. netctl-ifplugd@interface.service will prefer profiles, which use DHCP. To prefer a profile with a static IP, you can use AutoWired=yes. See netctl.profile(5) for details.
Once your profiles are set and verified to be working, simply enable these services using systemctl:
# systemctl enable netctl-auto@interface.service # systemctl enable netctl-ifplugd@interface.service
Since netctl 1.3, it possible to manually control an interface otherwise managed by netctl-auto without having to stop the netctl-auto service. This is done using the netctl-auto command. To have a list of available actions just run:
# netctl-auto --help
Migrating from netcfg
netctl uses /etc/netctl/ to store its profiles, not /etc/network.d/ (used by netcfg).
In order to migrate from netcfg, at least the following is needed:
- Disable the netcfg service:
systemctl disable netcfg.service. - Uninstall netcfg and install netctl.
- Move network profile files to the new directory.
- Rename variables therein according to
netctl.profile(5)(Most variable names have onlyUpperCamelCasei.eCONNECTIONbecomesConnection). - For static IP configuration make sure the
Addressvariables have a netmask after the IP (e.g.Address=('192.168.1.23/24' '192.168.1.87/24')in the example profile). - If you setup a wireless profile according in the
wireless-wpa-configsectionexample, note that this overrideswpa_supplicantoptions defined above the brackets. For a connection to a hidden wireless network, addscan_ssid=1to the options in thewireless-wpa-configsection;Hidden=yesdoes not work there. - Unquote interface variables and other variables that don't strictly need quoting (this is mainly a style thing).
- Run
netctl enable profilefor every profile in the oldNETWORKSarray. last doesn't work this way, seenetctl.special(7). - Use
netctl listand/ornetctl start profileinstead of netcfg-menu. wifi-menu remains available. - Unlike netcfg, by default netctl fails to bring up a NIC when it is not connected to another powered up NIC. To solve this problem, add
SkipNoCarrier=yesat the end of your/etc/netctl/profile.
Passphrase obfuscation (256-bit PSK)
Users not wishing to have the passphrase to their wireless network stored in plain text have the option of storing the corresponding 256-bit pre-shared key (PSK) instead, which is calculated from the passphrase and the SSID using standard algorithms.
- Method 1: Use
wifi-menu -oto generate a config file in/etc/netctl/ - Method 2: Manual settings as follows.
For both methods it is suggested to chmod 600 /etc/netctl/<config_file> to prevent user access to the password.
Calculate your 256-bit PSK using wpa_passphrase:
$ wpa_passphrase your_essid passphrase
network={
ssid="your_essid"
#psk="passphrase"
psk=64cf3ced850ecef39197bb7b7b301fc39437a6aa6c6a599d0534b16af578e04a
}
In a second terminal window, copy the example file wireless-wpa from /etc/netctl/examples to /etc/netctl:
# cp /etc/netctl/examples/wireless-wpa /etc/netctl/wireless-wpa
You will then need to edit /etc/netctl/wireless-wpa using your favorite text editor and add the pre-shared key, that was generated earlier using wpa_passphrase, to the Key variable of this profile.
Once completed your network profile wireless-wpa containing a 256-bit PSK should resemble:
/etc/netctl/wireless-wpa
Description='A simple WPA encrypted wireless connection using 256-bit PSK' Interface=wlp2s2 Connection=wireless Security=wpa IP=dhcp ESSID=your_essid Key=\"64cf3ced850ecef39197bb7b7b301fc39437a6aa6c6a599d0534b16af578e04a
Tips and tricks
Replace 'netcfg current'
If you used netcfg current in the past, you can use # netctl-auto current as a replacement for connections started with netctl-auto (feature since netctl-1.3).
To manually parse the connections, you can also use:
# netctl list | awk '/*/ {print $2}'
Eduroam
Some universities use a system called "Eduroam" to manage their wireless networks. For this system, a WPA config-section profile with the following format is often useful:
/etc/netctl/wlan0-eduroam
Description='Eduroam-profile for <user>' Interface=wlan0 Connection=wireless Security=wpa-configsection IP=dhcp WPAConfigSection=( 'ssid="eduroam"' 'proto=RSN' 'key_mgmt=WPA-EAP' 'pairwise=CCMP' 'auth_alg=OPEN' 'eap=PEAP' 'identity="<user>"' 'password="<password>"' )
For TTLS and certified universities this setup works:
/etc/netctl/wlan0-eduroam
Description='Eduroam university'
Interface=wlan0
Connection=wireless
Security=wpa-configsection
IP=dhcp
ESSID=eduroam
WPAConfigSection=(
'ssid="eduroam"'
'key_mgmt=WPA-EAP'
'eap=TTLS'
'group=TKIP'
'anonymous_identity="anonymous@domain_university"'
'identity="XXX@domain_university"'
'password="XXX"'
'ca_cert="Path/to/the/certificate"'
'phase2="auth=PAP"'
)
Bonding
From kernel documentation:
- The Linux bonding driver provides a method for aggregating multiple network interfaces into a single logical "bonded" interface. The behavior of the bonded interfaces depends on the mode. Generally speaking, modes provide either hot standby or load balancing services. Additionally, link integrity monitoring may be performed.
Load balancing
To use bonding with netctl, additional package from official repositories is required: ifenslave.
Copy /etc/netctl/examples/bonding to /etc/netctl/bonding and edit it, for example:
/etc/netctl/bonding
Description='Bond Interface'
Interface='bond0'
Connection=bond
BindsToInterfaces=('eth0' 'eth1')
IP=dhcp
IP6=stateless
Now you can disable your old configuration and set bonding to be started automatically. Switch to the new profile, for example:
# netctl switch-to bonding
Wired to wireless failover
This example describes how to use bonding to fallback to wireless when the wired ethernet goes down. The presence of network connection on each interface is detected and dhcpcd is started when connection on either or both interfaces is established.
You'll need additional packages from the official repositories: ifplugd, ifenslave and wpa_supplicant.
First configure the bonding driver to use active-backup:
/etc/modprobe.d/bonding.conf
options bonding mode=active-backup options bonding miimon=100 options bonding primary=eth0 options bonding max_bonds=0
The max_bonds option avoids the Interface bond0 already exists error.
Next, configure a netctl profile to enslave the two hardware interfaces:
/etc/netctl/failover
Description='A wired connection with failover to wireless'
Interface='bond0'
Connection=bond
BindsToInterfaces=('eth0' 'wlan0')
IP='no'
SkipNoCarrier='no'
Enable the profile on startup.
# netctl enable failover
Configure wpa_supplicant to associate with known networks. This can be done with a netctl profile (remember to use IP='no') and a wpa_supplicant service running constantly, or on-demand with wpa_cli. Ways to do this are covered on the wpa_supplicant page.
Create an ifplugd action for automatic DHCP assignment on the bonded interface:
/etc/ifplugd/bond_dhcp.action
#!/bin/sh
case "$2" in
up)
systemctl start "dhcpcd@$1.service" && exit 0
;;
down)
systemctl stop "dhcpcd@$1.service" && exit 0
;;
*)
echo "Wrong arguments" > /dev/stderr
;;
esac
exit 1
and make it executable
# chmod +x /etc/ifplugd/bond_dhcp.action
Then create the systemd service which starts ifplugd for bond0:
/etc/systemd/system/net-auto-bonded@.service
[Unit] Description=Provides automatic dhcp resolution for bonded failover connection Requires=netctl@failover.service After=netctl@failover.service [Service] ExecStart=/usr/bin/ifplugd -i %i -r /etc/ifplugd/bond_dhcp.action -fIns [Install] WantedBy=multi-user.target
Enable the net-auto-bonded service and reboot:
# systemctl enable net-auto-bonded@bond0.service # reboot
If you have a wired and wireless connection to the same network, you can probably now disconnect and reconnect the wired connection without losing connectivity. In most cases, even streaming music won't skip!
Remove old dhcpcd lease
# rm /var/lib/dhcpcd/dhcpcd-wlan0.lease
DHCP timeout issues
If you are having timeout issues when requesting leases via DHCP you can set the timeout value higher than netctl's 10 seconds by default. Create a file in /etc/netctl/hooks/ or /etc/netctl/interfaces/, add TimeoutDHCP=30 to it for a timeout of 30 seconds and make the file executable.
See also
- Official announcement thread
- There is a cinnamon applet available in the AUR: cinnamon-applet-netctl-systray-menu