Ad-hoc networking (简体中文)

From ArchWiki
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.
翻译状态:本文是 Ad-hoc_networking翻译。上次翻译日期:2021-07-05。如果英文版本有所更改,则您可以帮助同步翻译。

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 地址,有多种方法:

要向自组网络共享外网连接,请参考 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

See also