Ad-hoc networking (简体中文)
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Independent Basic Service Set(独立基本服务集),缩写是 IBSS,也被称为自组网络,是一种不使用中心控制节点,就能让一组设备相互通讯的方法。是点对点网络的一种,网络中的设备直接通讯,不需要中转。自组网络可以用来进行 网络共享。
要求
所有要连接到网络的设备都具有兼容 [1] 的无线网卡。
Wifi 链路层
因为 IBSS 网络是点对点网络,所有设备都应该使用相同的 wifi 连接设置。
提示: 可以设置更复杂的网络拓扑,Linux 无线文档 包含更高级的示例。
手动设置
警告: 此方法创建的是 非加密 自组网络,要创建加密网络,请参考 #wpa_supplicant.
详细信息请参考 [Network configuration/Wireless#iw]]。请先安装 软件包 iw。
设置操作模式为 ibss:
# iw interface set type ibss
启动接口(可能需要额外的 rfkill unblock wifi
):
# ip link set interface up
现在可以创建自组网络了,将 your_ssid 替换为实际的网络,frequency 替换为以 MHz 为单位的频率。频道和频率的对应关系,请参考, 这里 。
# iw interface ibss join your_ssid frequency
wpa_supplicant
确保已经 安装 了 wpa_supplicant,并进行了配置(参考 wpa_supplicant).
/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" }
所有连接到网络的设备运行下面 wpa_supplicant 命令:
# wpa_supplicant -B -i interface -c /etc/wpa_supplicant-adhoc.conf -D nl80211,wext
网络配置
最后一步是给网络中的所有设备分配 IP 地址,有多种方法:
- 分配静态 IP 地址,参考:Network configuration#Static IP address.
- 在一个设备上运行 DHCP,参考 dhcpd 或 dnsmasq.
- 运行 avahi-autoipd. 参考 Avahi#Obtaining IPv4LL IP address.
要向自组网络共享外网连接,请参考 Internet sharing.
技巧
使用 NetworkManager
如果使用 NetworkManager,可以使用 nm-applet 进行自组网络配置,不用使用手动方法。详情参考 NetworkManager#Sharing internet connection over Wi-Fi。
自定义 systemd 服务(使用 wpa_supplicant 和静态 IP)
可以使用下面模板启用无线自组网络:
/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