Difference between revisions of "Ad-hoc networking (简体中文)"

From ArchWiki
Jump to: navigation, search
(Add translate me.)
(Sync to latest English page.)
Line 3: Line 3:
 
[[en:Ad-hoc networking]]
 
[[en:Ad-hoc networking]]
 
{{Translateme (简体中文)}}
 
{{Translateme (简体中文)}}
你可以配置 ad-hoc 网络让两个电脑通信或者共享 internet 连接。下面的脚本是一个例子。'''你需要改变接口名称才能让它在你的系统上工作。'''.
+
{{Article summary start}}
 +
{{Article summary text|基本的 ad-hoc 网络设置。}}
 +
{{Article summary heading|相关}}
 +
{{Article summary wiki|Network Configuration}}
 +
{{Article summary wiki|Wireless Setup}}
 +
{{Article summary wiki|Software Access Point}}
 +
{{Article summary wiki|Internet Share}}
 +
{{Article summary end}}
 +
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 an 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 [[Internet Share|share an internet connection]].
这个服务器端脚本适用于 atheros 驱动的网卡。想要使用其他的网卡很容易。更多信息参见: https://help.ubuntu.com/community/WifiDocs/Adhoc .
+
  
如果你仅仅是想连接两个电脑不想共享 internet 连接,你可以去掉 iptables 部分。
+
== Requirements ==
  
#!/bin/bash
+
* A nl80211 compatible wireless device (e.g. ath9k) on all devices which will connect to the network
####### 根据你的网卡,这一部分需要改变或删除
+
#重建 ath0 接口在 ad hoc 模式
+
modprobe -r ath_pci
+
modprobe ath_pci autocreate=adhoc
+
wlanconfig ath0 destroy
+
wlanconfig ath create wlandev wifi0 wlanmode adhoc
+
#######
+
+
#启动 ad hoc 服务器
+
ifconfig ath0 down
+
iwconfig ath0 mode ad-hoc
+
iwconfig ath0 channel 4
+
iwconfig ath0 essid 'mine'
+
ifconfig ath0 10.0.0.1 up
+
+
#转发 ad hoc 网络到路由器
+
iptables -A FORWARD -i ath0 -o eth0 -s 10.0.0.0/24 -m state --state NEW -j ACCEPT
+
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
+
iptables -A POSTROUTING -t nat -j MASQUERADE
+
sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
+
  
这里是一个 [[WPA Supplicant]] 配置文件,配置基于 WPA 的 adhoc 网络。
+
== Wifi link layer ==
  ctrl_interface=/var/run/wpa_supplicant
+
 
ctrl_interface_group=wheel
+
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.
ap_scan=2
+
 
network={
+
{{Tip|It is possible to create complex network topologies, see [http://wireless.kernel.org/en/users/Documentation/iw/vif Linux Wireless documentation] for advanced examples.}}
     ssid="my-wifi"
+
 
 +
=== Manual method ===
 +
 
 +
{{Warning|This method creates '''unencrypted''' ad-hoc network. See [[#WPA supplicant]] for method using WPA encryption.}}
 +
 
 +
See [[Wireless Setup#Manual setup]] for a better explanation of the following commands. Make sure that {{Pkg|iw}} is [[pacman|installed]].
 +
 
 +
Set the operation mode to ibss:
 +
 
 +
  # iw ''interface'' set type ibss
 +
 
 +
Bring the interface up (an additional step like {{ic|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 [[Wikipedia:List_of_WLAN_channels#Interference_Concerns|List of WLAN channels]] for a table showing frequencies of individual channels.
 +
 
 +
# iw ''interface'' ibss join ''your_ssid'' ''frequency''
 +
 
 +
=== WPA supplicant ===
 +
 
 +
{{Note|This method creates ad-hoc network using WPA encryption. WPA2 is currently not supported (August 2013).}}
 +
 
 +
Ensure that {{Pkg|wpa_supplicant}} is [[pacman|installed]], and create a configuration file for it (see [[WPA supplicant]] for details).
 +
 
 +
{{hc|/etc/wpa_supplicant-adhoc.conf|<nowiki>
 +
ctrl_interface=DIR=/run/wpa_supplicant GROUP=wheel
 +
 
 +
# use 'ap_scan=2' on all devices connected to the network
 +
ap_scan=2
 +
 
 +
network={
 +
     ssid="MySSID"
 
     mode=1
 
     mode=1
     frequency=2412
+
     frequency=2432
 
     proto=WPA
 
     proto=WPA
     key_mgmt=NONE
+
     key_mgmt=WPA-NONE
 
     pairwise=NONE
 
     pairwise=NONE
 
     group=TKIP
 
     group=TKIP
     psk="s0m3k3y$"
+
     psk="secret passphrase"
  }
+
}
 +
</nowiki>}}
 +
 
 +
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]] for details.
 +
* Running DHCP server on one device. See [[dhcpd]] or [[dnsmasq]] for details.
 +
* Running ''avahi-autoipd''. See [[Avahi#Obtaining IPv4LL IP address]] for details.
 +
 
 +
If you want to share an internet connection to the ad-hoc network, see [[Internet Share]].
 +
 
 +
== Tips and tricks ==
 +
 
 +
=== Using NetworkManager ===
 +
 
 +
If you use [[NetworkManager]], you can use ''nm-applet'' for ad-hoc network configuration instead of the manual method described above. See [[NetworkManager#Ad-hoc]] 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:
 +
 
 +
{{hc|/etc/conf.d/network-wireless-adhoc@<interface>|<nowiki>
 +
addr=192.168.0.2
 +
mask=24
 +
</nowiki>}}
 +
 
 +
{{hc|/etc/systemd/system/network-wireless-adhoc@.service|<nowiki>
 +
[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
 +
</nowiki>}}
  
== 客户端 ==
+
== See also ==
在客户端运行下面的代码,如果你想要多个客户端,你需要改变 IP 地址使之唯一。
+
#!/bin/bash
+
iwconfig eth1 essid mine
+
iwconfig eth1 mode Ad-Hoc
+
ifconfig eth1 10.0.0.2 up
+
ip route add default via 10.0.0.1
+
  
想要共享internet连接,你需要告诉客户端 DNS 服务器。查看服务器上的 {{ic|/etc/resolv.conf}} 文件。
+
* [https://help.ubuntu.com/community/WifiDocs/Adhoc Ubuntu community wiki WifiDocs/Adhoc]
 +
* [http://www.ubuntugeek.com/creating-an-adhoc-host-with-ubuntu.html Manual about creating an Ad-Hoc network on UbuntuGeek]
 +
* [http://go2linux.garron.me/linux/2011/03/share-your-3g-internet-connection-over-wifi-linux-ipod-touch-925 Share your 3G Internet connection over wifi]

Revision as of 09:14, 19 October 2013

Tango-preferences-desktop-locale.png本页面需要更新翻译,内容可能已经与英文脱节。要贡献翻译,请访问简体中文翻译组Tango-preferences-desktop-locale.png

附注: please use the first argument of the template to provide more detailed indications.

Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary end 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 an 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.

Requirements

  • A nl80211 compatible 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 for advanced examples.

Manual method

Warning: This method creates unencrypted ad-hoc network. See #WPA supplicant for method using WPA encryption.

See Wireless Setup#Manual setup for a better explanation of the following commands. Make sure that iw is installed.

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 for a table showing frequencies of individual channels.

# iw interface ibss join your_ssid frequency

WPA supplicant

Note: This method creates ad-hoc network using WPA encryption. WPA2 is currently not supported (August 2013).

Ensure that wpa_supplicant is installed, and create a configuration file for it (see 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
ap_scan=2

network={
    ssid="MySSID"
    mode=1
    frequency=2432
    proto=WPA
    key_mgmt=WPA-NONE
    pairwise=NONE
    group=TKIP
    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:

If you want to share an internet connection to the ad-hoc network, see Internet Share.

Tips and tricks

Using NetworkManager

If you use NetworkManager, you can use nm-applet for ad-hoc network configuration instead of the manual method described above. See NetworkManager#Ad-hoc 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