如何创建一个Wi-Fi热点(在接入点模式下)?

如何设置接入点(AP)模式的Wi-Fi热点?
需要注意的是:无线接入点与临时网络不同,它们有很大的区别。简而言之,较新的设备和大多数Android、Windows Phone和Blackberry设备(也可能包括iOS设备)不支持临时网络,但支持AP模式的Wi-Fi热点。要了解AP模式热点、临时网络及其区别,请参考这个维基百科页面

iOS设备支持ad-hoc网络。但是每当你关闭屏幕时,它们会断开连接。 - leo
第三方应用程序可以在已root的Android设备上允许临时网络WiFi连接。 - solsTiCe
WEP在Android手机上无法使用,而WPA可以。 - sureshvv
6个回答

无论您的无线网卡是否支持接入点模式。
首先要做的是测试您的无线网卡是否支持进入无线接入点模式。如前所述,以下测试适用于基于mac80211框架的驱动程序。
安装iw并执行以下操作。
sudo aptitude install iw
iw list

寻找支持的接口部分,在那里应该有一个名为AP的条目,如下所示。
Supported interface modes:
         * IBSS
         * managed
         * AP
         * AP/VLAN
         * monitor
         * mesh point

如果您的驅動程式沒有顯示此AP,並不意味著它無法建立無線熱點。但這些卡片不在本教程的範圍之內。要進行更多測試,請參考Ubuntu文檔關於主模式的說明
設置分為三個部分:
1. 設置並主持無線網絡 2. IP地址設置 3. 網絡共享 1. 設置並主持網絡 所需软件:hostapd 安装hostapd(安装它) 按下alt + F2,然后输入gksu gedit并按下enter。我们将要编辑很多文件。 在gedit中,按下ctrl+octrl+l,并将其粘贴到位置框中/etc/hostapd/hostapd.conf。按下Enter。 粘贴以下代码:
interface=wlan0
driver=nl80211
ssid=test
hw_mode=g
channel=1
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=3
wpa_passphrase=1234567890
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

请确保行尾没有多余的空格!Hostapd对于难以排查的结尾空格非常敏感!
需要进行的更改如下:
1. 将interface=wlan0更改为您的无线网卡名称(如果只有一个无线网卡,应该是wlan0)。 2. ssid=test。"test"是您托管网络的名称。 3. wpa_passphrase=1234567890,"1234567890"是您网络的密码。
上述配置将创建一个启用了WPA和WPA2的g模式接入点。有关构建配置文件的更详细说明,请点击这里
现在启动hostapd。编辑文件/etc/default/hostapd,并修改DAEMON_CONF行如下:
DAEMON_CONF="/etc/hostapd/hostapd.conf"

然后使用以下命令启动hostapd服务, sudo service hostapd start 它应该启动一个无线网络。现在您的移动设备上可以看到一个无线网络并进行身份验证。但是设备不会获得IP地址。使用命令sudo service hostapd stop停止它。
如果出现任何错误,可能是您的网卡不支持g模式。尝试其他模式。指南 第二部分:设置用于IP地址管理的DHCP服务器
安装isc-dhcp-server Install isc-dhcp-server 编辑文件/etc/default/isc-dhcp-server并将INTERFACES设置为以下内容:
INTERFACES="wlan0"

在gedit中,按下Ctrl+O,在位置框中粘贴/etc/dhcp/dhcpd.conf 找到以下行(按下Ctrl+F),并在其前面加上#。编辑后应该看起来像这样。
# option definitions common to all supported networks…
#option domain-name “example.org”;
#option domain-name-servers ns1.example.org, ns2.example.org;

再次注释掉以下行。
#default-lease-time 600;
#max-lease-time 7200;

在末尾添加以下行
subnet 10.10.0.0 netmask 255.255.255.0 {
        range 10.10.0.2 10.10.0.16;
        option domain-name-servers 8.8.4.4, 208.67.222.222;
        option routers 10.10.0.1;
}

范围描述地址池的长度。您还需要调整子网值。此配置可提供最多15个设备的IP地址

再次在gedit中按下Ctrl+O,并将以下内容粘贴到位置栏/etc/network/interfaces,添加如下

auto wlan0
iface wlan0 inet static
address 10.10.0.1
netmask 255.255.255.0
是您的无线接口。根据需要进行更改。
注意:重新启动后,无线将显示为未管理状态。因此,您无法使用任何其他Wi-Fi网络。要使无线网络恢复正常,请在这些新添加的行之前加上#号,并执行命令。
现在运行以下命令: 此时,您的移动设备将看到一个网络,进行身份验证后,它将获得类似于<10.10.0.2>的IP地址。 设置互联网连接设置 为了实现互联网连接共享,我们需要启用和。 启用ip forwarding:执行以下命令 现在假设您正在使用拨号/USB调制解调器连接到互联网。您需要获取逻辑接口名称。为此,请执行或命令。
对于拨号/USB调制解调器:应该是ppp0。如果您想共享以太网连接,应该使用ethX,其中X是您的以太网设备号。如果您通过Android设备使用USB网络共享上网,则接口名称应为usb0
现在,一旦您得到了接口名称,请执行以下操作: sudo iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -o ppp0 -j MASQUERADE 上述命令中的ppp0是您正在通过无线网络共享的接口的互联网连接。
如果您已经编辑到/etc/network/interfaces,您可以使用this script启动服务。如果您不共享ppp0,请进行编辑。如果您正在使用脚本并希望停止服务器,请使用sudo killall hostapd
这是一个主要总结了以下内容的博客:http://dashohoxha.blogspot.com/2013/06/how-to-setup-wifi-access-point-on-ubuntu.html 这是一个试图自动化以下步骤的脚本:https://gist.github.com/dashohoxha/5767262 如果您发现任何错误,请随时报告或修复。

来自以下链接的巨大帮助:


1我可以连接到热点并进行身份验证。但是我无法获取IP地址。你能帮我解决一下吗? - Vijay
@neo,请问你在配置文件中注释了这些行吗? - Web-E
我做了。实际上,我尝试了整个过程两次,只是为了确保第一次没有做错。 - Vijay
Neo是对的。Ubuntu肯定出了问题。最近这个东西突然就不工作了! - Indian
@Web-E 这应该在Ubuntu社区维基的hostapd页面上进行记录。可以作为共享移动宽带下的一个独立章节。 - Khurshid Alam
要是我有这样的知识就好了。真是救命稻草。谢谢。 - darxsys
2@ neo 我遇到了同样的问题。我只是在安装了 ap-hotspot 后,将 dns=dnsmasq 改为 #dns=dnsmasq,然后在 sudo gedit /etc/NetworkManager/NetworkManager.conf 中进行了修改。这样就解决了问题。 - Sooraj S
1这个支持哪些Ubuntu版本(ap-hotspot使用的hostapd版本似乎不再可用... :C)? - Wilf
我按照建议的步骤进行了操作,但是在连接设备时出现了身份验证问题 :-(,需要帮助吗? - Ravikumar Sharma
不要忘记关闭wpa-supplicant:systemctl disable wpa_supplicant && systemctl stop wpa_supplicant - Alexander Vasiljev
@AlexanderVasiljev 为什么我们需要将其关闭? @Web-E 您的 dhcpd.conf 示例中的 DNS 值是虚构的吗?在我的情况下我应该使用什么值? - alonso s
@alonsos,根据我的情况来看,wpa_supplicant与hostapd存在冲突。 - Alexander Vasiljev
@alonsos 那些是谷歌公共DNS和OpenDNS的IP地址,你可以使用由你的互联网服务提供商提供的IP地址。 - Web-E
在树莓派上尝试了这个,连接的设备没有互联网。 - Bamaco

Ubuntu 20.04 LTS及更高版本

在Ubuntu 20.04 LTS上,搭载GNOME 3.36桌面环境,无线热点共享变得比以往更加简单!只需从系统菜单中打开Wi-Fi设置即可。

System Menu

在“Wi-Fi设置”窗口中,点击右上角的下拉菜单,选择“打开Wi-Fi热点”选项。

Turn On WiFi Hotspot

一个对话框会出现,您可以在其中设置新热点的名称和密码。

Set name and password for hotspot

如果您的热点创建成功,Wi-Fi设置现在会显示一个带有新创建热点开关的部分。

Newly created hotspot

在顶部栏上还会出现一个热点指示器,显示其活动状态。

Active hotspot indicator

如果您需要编辑热点并进行更高级的配置,请按照下面描述的类似于Ubuntu 18.04 LTS的指示进行操作。

Ubuntu 18.04 LTS

在Ubuntu 18.04 LTS上,GNOME 3.28桌面使得启动WiFi热点变得非常简单。从系统菜单中打开Wi-Fi设置

GNOME system status menu

然后从Wi-Fi设置的汉堡菜单中,选择打开Wi-Fi热点。就这样,您的WiFi接入点现在已经启动并运行了!

WiFi Settings

高级功能

如果你想更改接入点的名称(SSID)和密码,请通过在终端或按下Alt+F2,输入以下内容来打开网络连接编辑工具:

nm-connection-editor

Network Connections

双击热点,编辑窗口就会出现。您可以从Wi-Fi和Wi-Fi安全选项卡中更改SSID和密码。

Edit SSID Edit password

Ubuntu 16.04 LTS & 14.04 LTS

步骤1:测试您的WiFi卡是否支持AP模式

请按照答案中提供的访问点模式检查,由Web-E提供。

步骤2:启动内置热点

网络带有一个内置选项,可以启动一个Ad-Hoc热点。因此,让我们首先使用这个选项,以便在下一步中对其进行配置并转换为访问点模式热点。

在Dash中搜索网络并打开它。

DashSearch

按下"使用作为热点"按钮,网络管理器将启动一个 AdHoc 热点。

Hotspot

但这不是我们想要的,对吧?停止热点。
第三步:配置热点
从Dash或网络指示器菜单中打开“网络连接”或“编辑连接”。

Edit Connections

在出现的“网络连接”窗口中,WiFi部分下会列出一个名为“热点”的连接。选择它并点击“编辑”按钮。

Network Connections

在弹出的窗口中,您可以编辑热点的广播名称(SSID)。现在是配置中最重要的部分:将模式更改为“热点”,这将最终将热点转换为接入点模式。使用Ubuntu 14.04 LTS的用户会注意到此模式无法从下拉菜单中选择。不要失望,因为您仍然可以通过额外的“步骤3.1”来完成。

Edit Hotspot Name and Password

保存并再次打开相同的“编辑热点”窗口。这次转到“WiFi安全性”选项卡以选择密码类型。如果您不想设置密码,可以将安全性设置为无,从而创建一个开放的热点。如果要设置密码,建议将安全密钥从WEP更改为WPA2。配置完成后,请不要忘记保存以使更改生效。
在“常规”选项卡中,确保“当网络可用时自动连接到此网络”处于关闭状态(除非您只使用wifi作为热点)。否则,由于热点始终可用,您将无法在网络管理器小程序中看到连接到其他wifi网络的菜单项。
第3.1步:仅适用于Ubuntu 14.04 LTS
由于Ubuntu 14.04 LTS的“网络”(network-manager v9.8.8)没有提供图形设置来选择AP模式,我们将手动编辑其配置文件以强制进行转换。复制以下命令,然后按下Alt+F2或打开终端并粘贴到其中:
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit /etc/NetworkManager/system-connections/Hotspot

在出现的授权对话框中输入您的密码,配置文件将在文本编辑器中打开。找到以mode=开头的一行,将其更改为mode=ap并保存文件。
第四步:启动热点
现在配置部分已经完成,我们将开始热点。从网络指示器菜单中点击“创建新的Wi-Fi网络”。

Create New WiFi Connection

在弹出的窗口中,点击连接下拉按钮,并将“New...”更改为“Hotspot”。点击“创建”按钮,您的热点将开始运行。从现在开始,每当您需要一个热点时,只需执行这个步骤即第4步

Start Hotspot

好的,就这些了!祝你享受使用新的接入点!

最酷的简易步骤 @HEXcube - Amit Rane
1我已经完成了@Web-E所描述的3个步骤,但我的安卓手机无法连接,一直在尝试获取IP地址。然后,我只是按照HEXcube建议的方法,在/ etc / NetworkManager / system-connections /我的_wifi_connection_name中进行了“mode = ap”更改,立即就连接上了。我的Ubuntu是13.10 64位,安装在Acer笔记本电脑Aspire E1-531上。 - Sri
Web-E的步骤中执行了ip_forward和masquerade命令 - 我们应该撤销它们吗?如果是,怎么做? - Sri
我希望更多人了解这个解决方案。这应该是首选答案。 - Lars Nyström
以下的解决方案(http://askubuntu.com/a/602910/266507)使用KDE连接编辑器对我有效。然而,这篇文章中的解决方案没有起作用,因为它遗漏了一个非常重要的事情:IPv4选项卡应该设置为什么值?我选择了“自动(DHCP)”,但在启动时会不断向syslog发送“DHCPDISCOVER on wlan0 to 255.255.255.255”的垃圾信息,持续约5秒钟,然后由于超时而断开连接。(尽管我没有尝试使用hostapd的变体) - Hi-Angel
@Hi-Angel 如果你按照步骤1并先启动内置的_热点_,那么就不需要手动编辑IPv4设置。只需将_热点_的默认IPv4设置(“共享给其他计算机”)保持不变即可。 - Rohan 'HEXcube' Villoth
@HEXcube 啊,嗯,当然我没有开始那一步,因为你将Step 1 标题为“测试你的无线网卡是否支持AP模式”,而我知道它是支持的。顺便说一下,默认的IPv4设置只是“自动(DHCP)”,并没有选择“共享给其他电脑”(也许是因为第一步的原因)。 - Hi-Angel
1@Hi-Angel 哦,我是指步骤2!我的错!顺便问一下,你用的是哪个Ubuntu版本?我还没有在15.10上测试过。等16.04LTS发布后会更新答案。 - Rohan 'HEXcube' Villoth
@HEXcube 啊,好吧,这还是不太明显。像“启动热点”这样的方式很容易理解,但对于那些不寻找的人来说,下面还有另一种方法。我使用的是Kubuntu-14.04.03,尽管我使用Awesome WM *(由于没有KDE而低内存,所以我正在使用nm-applet)*。谢谢!☺ - Hi-Angel
我在15.10上尝试了这个。一开始它不起作用,直到我安装了hostapd。现在它可以连接,但似乎没有分配IP地址。我尝试安装了isc-dhcp-server,但没有任何改变。dnsmasq似乎正在运行,并设置了一些DHCP范围,但没有分配给wlan0接口。可能出了什么问题? - tudor -Reinstate Monica-
@tudor 很抱歉回复晚了,但我已经更新了适用于Ubuntu 16.04LTS的答案!所以,请你在Ubuntu 16.04LTS上试试看吧? - Rohan 'HEXcube' Villoth
@HEXcude,谢谢,但我真的需要一个关于15.10的答案。由于转向I2S音频,我还没能在16.04上正确运行内核。:-( - tudor -Reinstate Monica-
@HEXcube - 不好意思,对我来说,这些步骤在16.04上不起作用。一切都很顺利,直到第4步。在选择“创建新网络…”后,对话框看起来与上面显示的不同。我有4个字段:(1)无线适配器(2)网络名称(3)无线安全性(4)密钥 - BeeOnRope
...而且我没有看到任何选项来选择我已经配置的热点,只能创建一个我猜是新的临时网络。 - BeeOnRope
对于16.04LTS版本,将模式设置为热点是关键。然而,可能会有一些设置遗漏了?在Aspire F15上,点击网络(右上角的上下箭头),然后选择WiFi网络 > 断开连接,禁用WiFi并等待一分钟,然后启用WiFi,最后创建新的WiFi网络。否则,设备无法连接到Ubuntu热点。 - Underverse
@BeeOnRope 很抱歉回复晚了。但是我能够重现您在使用多个WiFi适配器时遇到的问题。您的机器上有两个适配器吗?或者可能有一个虚拟适配器?我建议您尝试禁用其中一个,或者在第一个适配器下创建热点连接。 - Rohan 'HEXcube' Villoth
@Underverse 你是在使用Ubuntu的开发版本,比如17.04吗?我还没有在17.04上进行过测试。或者这可能是一个硬件特定的问题。 - Rohan 'HEXcube' Villoth
@HEXcube 16.04LTS :-) - Underverse
@HEXcube - 是的,我有一个内部适配器,但在尝试时还连接了第二个通过USB连接的适配器。我没有选择使用哪个适配器,因为我需要使用外部适配器来接收远距离信号。 - BeeOnRope
@BeeOnRope - 我的Ubuntu 17.04笔记本电脑上有两个WiFi适配器(一个是内置的,一个是USB插头)。我遇到了和你一样的问题:在第4步中,“新的WiFi网络”对话框没有给我选择已配置的热点的选项。你是否解决了这个问题? - Adam Dingle
@adam - 不对。为了达到字数限制,我加了一些额外的字符。 - BeeOnRope
1重要提示:WEP加密方式不适用于安卓手机,请更改为WPA加密方式。 - sureshvv

我也遇到了同样的问题。我找到的最好的解决方案是使用ap-hotspot来创建Ubuntu机器的热点。它可以很好地连接到几乎所有的安卓手机、Windows手机等。
安装方法如下:
$ sudo add-apt-repository ppa:nilarimogard/webupd8
$ sudo apt-get update
$ sudo apt-get install ap-hotspot

下一步,要启动热点:
$ sudo ap-hotspot start

它会以一种互动的方式询问您要共享哪个适配器的互联网、网络名称、密码等信息。
要停止热点:
$ sudo ap-hotspot stop

配置它的方法如下:
$ sudo ap-hotspot configure

如果有任何问题,希望这个链接能够帮到你。
编辑:
目前似乎Ubuntu 14.04存在一些问题,根据链接的webupd8.org文章所述,你需要降级hostapd。
64位系统:
cd /tmp
wget http://ftp.ksu.edu.tw/FTP/Linux/ubuntu/pool/universe/w/wpa/hostapd_1.0-3ubuntu2.1_amd64.deb
sudo dpkg -i hostapd*.deb
sudo apt-mark hold hostapd

32位:
cd /tmp
wget http://ftp.ksu.edu.tw/FTP/Linux/ubuntu/pool/universe/w/wpa/hostapd_1.0-3ubuntu2.1_i386.deb
sudo dpkg -i hostapd*.deb
sudo apt-mark hold hostapd

老兄,那真是太棒了! - Milkncookiez
我按照之前的回答中的指示操作,发现我的无线网卡不支持接入点模式。但是ap-hotspot仍然完美地运行。所以我的建议是只需安装ap-hotspot并查看是否正常工作。 - Hashken
1如果我在启动ap-hotspot之前用sudo stop network-manager停止网络管理器,这对我来说是有效的。谢谢! - Rmano
你必须先打开电脑上的无线功能,但不要连接任何东西 - 这个方法非常有效 :-) - 不过我得说,在Fedora 19中,我可以直接使用默认的“用作热点”按钮(双系统的另一半) - Wilf
对我来说没用。当我尝试用我的iPhone连接时,它可以成功连接并输入密码,但之后就再也无法继续了。 - Seanny123
对于上面的回答和这个回答,我会在我的Nexus10上以满信号连接一段时间,然后掉线,再次显示“正在验证”,最后显示“身份验证问题”。禁用身份验证只会导致无尽的循环。 - Programster
这个回答和被接受的回答一起帮助我完成了。谢谢。 - darxsys
我在Windows上使用ConnectifyVirtualrouter时,虽然它们能正常工作,但是我收到了“您的无线网卡不支持接入点模式”的提示。 - 3l4ng
1脚本现在似乎已经过时了。 - Léo Lam
我尝试了相同的步骤,但我的联想ThinkPad笔记本电脑的WiFi连接不断地连接和断开(我在索尼笔记本电脑上创建了热点)。此外,在Android手机上,WiFi已连接但显示有限的连接性和无互联网连接。请帮忙。 - snoop
对我来说不起作用。Ubuntu 14.04。在执行sudo ap-hotspot start之后,我看到了Starting Wireless Hotspot...这一行。但是我的Honor 9 Lite甚至都看不到这个连接。可能是什么原因呢? - LRDPRDX

现在,这是一个简单而肯定能完成任务的方法。

安装KDE连接编辑器

打开终端(Ctrl+Alt+T)并逐个输入以下命令。

$ sudo apt-get install plasma-nm
$ sudo apt-get update

现在,您刚刚安装了KDE连接编辑器。
让我们创建一个Wi-Fi热点。

创建一个Wi-Fi热点(接入点模式)

1.现在通过以下方式打开已安装的应用程序:

  1. 在搜索框(Alt+F2)中输入kde-nm-connection-editor (输入kde后即可显示)。

    或者

  2. 通过终端手动打开。

    $ sudo kde-nm-connection-editor
    
2. 现在点击“+添加”并选择“无线(共享)”。

Adding A new connection

3.现在,您将看到下面的窗口。

Connection setup tab

SSID: 为您的新热点设定一个名称

模式: 选择 访问点

克隆MAC地址: 点击 随机 按钮生成一个随机的MAC地址。

其他设置应该已经调整好了。

4.现在我们来到 无线安全性 选项卡。

WPA Password tab

选择WAP和WPA2个人,然后输入您的密码。
点击确定

5.现在您的连接已准备就绪。

Ready

请享受!


2"kde-nm-connection-editor" 对我来说变成了"kde5-nm-connection-editor"。 - x13

我发现最简单的方法之一是通过使用create_ap,由Github用户oblique提供。

先决条件:

1)hostapd

sudo apt install hostapd

步骤:

git clone https://github.com/oblique/create_ap
cd create_ap
make install  (use sudo if you want to install it systemwide)

然后打开热点。
假设您想通过以太网接口名为eth0使用WiFi接口wlan0共享互联网,您可以使用以下语法:
create_ap -m nat wlan0 eth0 MyAccessPoint MyPassPhrase

更多信息和参考,请参阅。

https://github.com/oblique/create_ap


@Web-E的回答很有帮助,但也将计算机配置为了路由器。我只想要一个接入点,因为我已经在使用我的ISP的路由器。
我还在运行Ubuntu Server(18.04.2),所以无法使用任何图形界面工具来进行设置。
所以,我所做的是按照这个答案中描述的安装和配置hostapd,然后简单地桥接了我的以太网和Wi-Fi适配器。以下是我的`/etc/netplan/01-netcfg.yaml`文件的内容:
network:
  version: 2
  renderer: networkd
  ethernets:
    # My Ethernet adapter
    enp1s0:
      # For some reason it seems I must specify at least something here.
      dhcp4: no
    # My Wi-Fi adapter
    wlp2s0:
      dhcp4: no
  bridges:
    br0:
      interfaces:
        - enp1s0
        - wlp2s0
      # Using a static IP for this box.
      addresses:
        - 192.168.0.45/24
      gateway4: 192.168.0.1
      nameservers:
        addresses: [1.1.1.1,1.0.0.1]

当然,您需要根据自己的需求调整配置文件。之后只需运行sudo netplan apply来应用配置即可。