Jump to content

# Ad-hoc networking

2 languages

- 日本語
- 中文（简体）

From ArchWiki

Related articles

- Network configuration
- Wireless network configuration
- Software access point
- Internet sharing

An IBSS (Independent Basic Service Set) network, often called an ad-hoc network, is a way to have a group of devices talk to each other wirelessly, without a central controller. It is an example of a peer-to-peer network, in which all devices talk directly to each other, with no inherent relaying.

For example, ad-hoc networking may be used to share an internet connection.

## Requirements

- An nl80211 compatible wireless device (e.g. ath9k) on all devices which will connect to the network

## Wi-Fi link layer

Since IBSS network is a peer-to-peer network, the steps necessary to set up the Wi-Fi link layer should be the same on all devices.

Tip: It is possible to create complex network topologies, see Linux Wireless documentation for advanced examples.

### Manual method

Warning: This method creates unencrypted ad-hoc network. See #wpa_supplicant for method using WPA encryption.

See Wireless network configuration#iw for a better explanation of the following commands. Make sure that iw is installed.

Set the operation mode to ibss:

    # iw interface set type ibss

Bring the interface up (an additional step like `rfkill unblock wifi` might be needed):

    # ip link set interface up

Now you can create an ad-hoc network. Replace your_ssid with the name of the network and frequency with the frequency in MHz, depending on which channel you want to use. See the Wikipedia page List of WLAN channels for a table showing frequencies of individual channels.

    # iw interface ibss join your_ssid frequency

### wpa_supplicant

Ensure that wpa_supplicant is installed, and create a configuration file for it (see wpa_supplicant for details).

    /etc/wpa_supplicant-adhoc.conf

    ctrl_interface=DIR=/run/wpa_supplicant GROUP=wheel

    # use 'ap_scan=2' on all devices connected to the network
    # this is unnecessary if you only want the network to be created when no other networks are available
    ap_scan=2

    network={
        ssid="MySSID"
        mode=1
        frequency=2432
        proto=RSN
        key_mgmt=WPA-PSK
        pairwise=CCMP
        group=CCMP
        psk="secret passphrase"
    }

Run wpa_supplicant on all devices connected to the network with the following command:

    # wpa_supplicant -B -i interface -c /etc/wpa_supplicant-adhoc.conf -D nl80211,wext

## Network configuration

The final step is to assign an IP address to all devices in the network. There are multiple ways to do this:

- Assign static IP addresses. See Network configuration#Static IP address for details.
- Running DHCP server on one device. See Router#DNS and DHCP for details.
- Running avahi-autoipd. See Avahi#Obtaining IPv4LL IP address for details.

If you want to share an internet connection to the ad-hoc network, see Internet sharing.

## Tips and tricks

### Using NetworkManager

If you use NetworkManager, you can use nm-applet for ad-hoc network configuration instead of the manual method described above. See NetworkManager#Sharing internet connection over Wi-Fi for details.

### Custom systemd service (with wpa_supplicant and static IP)

You can use the following templates to enable wireless ad-hoc networking:

    /etc/conf.d/network-wireless-adhoc@interface

    addr=192.168.0.2
    mask=24

    /etc/systemd/system/network-wireless-adhoc@.service

    [Unit]
    Description=Ad-hoc wireless network connectivity (%i)
    Wants=network.target
    Before=network.target
    BindsTo=sys-subsystem-net-devices-%i.device
    After=sys-subsystem-net-devices-%i.device

    [Service]
    Type=oneshot
    RemainAfterExit=yes
    EnvironmentFile=/etc/conf.d/network-wireless-adhoc@%i

    # perhaps rfkill is not needed for you
    ExecStart=/usr/bin/rfkill unblock wifi
    ExecStart=/usr/bin/ip link set %i up
    ExecStart=/usr/bin/wpa_supplicant -B -i %i -D nl80211,wext -c /etc/wpa_supplicant-adhoc.conf
    ExecStart=/usr/bin/ip addr add ${addr}/${mask} dev %i

    ExecStop=/usr/bin/ip addr flush dev %i
    ExecStop=/usr/bin/ip link set %i down

    [Install]
    WantedBy=multi-user.target

## See also

- Ubuntu community wiki WifiDocs/Adhoc
- Manual about creating an Ad-Hoc network on UbuntuGeek
- Share your 3G Internet connection over wifi

Category:

- Wireless networking