arch-wiki-md-repo
Version:
All arch-wiki articles in markdown format, updated every two days.
153 lines (103 loc) • 6.25 kB
Markdown
Related articles
* [Network configuration](/index.php/Network_configuration "Network configuration")
* [Wireless network configuration](/index.php/Wireless_network_configuration "Wireless network configuration")
* [Software access point](/index.php/Software_access_point "Software access point")
* [Internet sharing](/index.php/Internet_sharing "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](/index.php/Internet_sharing "Internet sharing").
## Contents
* [1 Requirements](#Requirements)
* [2 Wifi link layer](#Wifi_link_layer)
* [2.1 Manual method](#Manual_method)
* [2.2 WPA supplicant](#WPA_supplicant)
* [3 Network configuration](#Network_configuration)
* [4 Tips and tricks](#Tips_and_tricks)
* [4.1 Using NetworkManager](#Using_NetworkManager)
* [4.2 Custom systemd service (with wpa_supplicant and static IP)](#Custom_systemd_service_.28with_wpa_supplicant_and_static_IP.29)
* [5 See also](#See_also)
## Requirements
* A [nl80211 compatible](https://wireless.wiki.kernel.org/en/users/drivers%7C) wireless device (e.g. ath9k) on all devices which will connect to the network
## Wifi link layer
Since IBSS network is a peer-to-peer network, the steps necessary to set up the wifi link layer should be the same on all devices.
**Tip:** It is possible to create complex network topologies, see [Linux Wireless documentation](http://wireless.kernel.org/en/users/Documentation/iw/vif) for advanced examples.
### Manual method
**Warning:** This method creates **unencrypted** ad-hoc network. See [#WPA supplicant](#WPA_supplicant) for method using WPA encryption.
See [Wireless network configuration#Manual setup](/index.php/Wireless_network_configuration#Manual_setup "Wireless network configuration") for a better explanation of the following commands. Make sure that [iw](https://www.archlinux.org/packages/?name=iw) is [installed](/index.php/Pacman "Pacman").
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](https://en.wikipedia.org/wiki/List_of_WLAN_channels#Interference_Concerns "wikipedia: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](https://www.archlinux.org/packages/?name=wpa_supplicant) is [installed](/index.php/Pacman "Pacman"), and create a configuration file for it (see [WPA supplicant](/index.php/WPA_supplicant "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](/index.php/Network_configuration#Static_IP_address "Network configuration") for details.
* Running DHCP server on one device. See [dhcpd](/index.php/Dhcpd "Dhcpd") or [dnsmasq](/index.php/Dnsmasq "Dnsmasq") for details.
* Running *avahi-autoipd*. See [Avahi#Obtaining IPv4LL IP address](/index.php/Avahi#Obtaining_IPv4LL_IP_address "Avahi") for details.
If you want to share an internet connection to the ad-hoc network, see [Internet sharing](/index.php/Internet_sharing "Internet sharing").
## Tips and tricks
### Using NetworkManager
If you use [NetworkManager](/index.php/NetworkManager "NetworkManager"), you can use *nm-applet* for ad-hoc network configuration instead of the manual method described above. See [NetworkManager#Ad-hoc](/index.php/NetworkManager#Ad-hoc "NetworkManager") for details.
**Note:** NetworkManager does not support WPA encryption in ad-hoc mode.
### 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](https://help.ubuntu.com/community/WifiDocs/Adhoc)
* [Manual about creating an Ad-Hoc network on UbuntuGeek](http://www.ubuntugeek.com/creating-an-adhoc-host-with-ubuntu.html)
* [Share your 3G Internet connection over wifi](http://go2linux.garron.me/linux/2011/03/share-your-3g-internet-connection-over-wifi-linux-ipod-touch-925)