Ad-hoc networking (简体中文)

From ArchWiki
Jump to: navigation, search
翻译状态: 本文是英文页面 Ad-hoc_networking翻译,最后翻译时间:2017-08-22,点击这里可以查看翻译后英文页面的改动。

Independent Basic Service Set(独立基本服务集),缩写是 IBSS,也被称为自组网络,是一种不使用中心控制节点,就能让一组设备相互通讯的方法。是点对点网络的一种,网络中的设备直接通讯,不需要中转。自组网络可以用来进行 网络共享

要求

所有要连接到网络的设备都具有兼容 [1] 的无线网卡。

Wifi 链路层

因为 IBSS 网络是点对点网络,所有设备都应该使用相同的 wifi 连接设置。

Tip: 可以设置更复杂的网络拓扑,Linux 无线文档 包含更高级的示例。

手动设置

警告: 此方法创建的是 非加密 自组网络,要创建加密网络,请参考 #WPA supplicant.

详细信息请参考 Wireless network configuration#Manual setup。请先安装 软件包 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#Ad-hoc

Note: NetworkManager 在自组网络模式中不支持 WPA 加密。

自定义 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