Ad-hoc 网络
IBSS (独立基本服务集) 网络,通常称为 ad-hoc 网络,是一种让一组设备无线通信的方式,无需中央控制器。它是对等网络的一个例子,其中所有设备直接相互通信,没有固有的中继。
例如,ad-hoc 网络可以用于共享互联网连接。
要求
- 所有将连接到网络的设备上都需要一个 nl80211 兼容 的无线设备 (例如 ath9k)
Wi-Fi 链接层
由于 IBSS 网络是对等网络,因此在所有设备上设置 Wi-Fi 链接层的步骤应该是相同的。
提示: 可以创建复杂的网络拓扑,有关高级示例,请参阅 Linux 无线文档。
手动方法
警告: 此方法创建未加密的 ad-hoc 网络。有关使用 WPA 加密的方法,请参阅 #wpa_supplicant。
有关以下命令的更好解释,请参阅 无线网络配置#iw。确保 iw 已安装。
将操作模式设置为 ibss
# iw interface set type ibss
启动接口 (可能需要额外的步骤,如 rfkill unblock wifi
)
# ip link set interface up
现在您可以创建一个 ad-hoc 网络。将 your_ssid 替换为网络名称,将 frequency 替换为 MHz 频率,具体取决于您要使用的频道。有关显示各个频道频率的表格,请参阅 Wikipedia 页面 WLAN 频道列表。
# 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 地址。有关详细信息,请参阅网络配置#静态 IP 地址。
- 在一台设备上运行 DHCP 服务器。有关详细信息,请参阅 dhcpd 或 dnsmasq。
- 运行 avahi-autoipd。有关详细信息,请参阅 Avahi#获取 IPv4LL IP 地址。
如果您想将互联网连接共享到 ad-hoc 网络,请参阅 网络共享。
技巧与提示
使用 NetworkManager
如果您使用 NetworkManager,您可以使用 nm-applet 进行 ad-hoc 网络配置,而不是上面描述的手动方法。有关详细信息,请参阅 NetworkManager#通过 Wi-Fi 共享互联网连接。
自定义 systemd 服务 (使用 wpa_supplicant 和静态 IP)
您可以使用以下模板来启用无线 ad-hoc 网络
/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