问题描述
我知道如何在连接到有线网络时创建热点,但是当我通过WiFi连接使用互联网时,在激活热点时会断开无线连接。
在Windows中,我可以使用Connectify Hotspot,这使我可以在创建接入点时使用同一无线适配器共享互联网连接。正如你可以在technology overview page上阅读:
Access Point mode allows you to create a hotspot using the same Wi-Fi card that you are using to access the Internet.
我如何在Ubuntu上执行此操作?
最佳解决办法
在看到vasishath提供的this link后,我设法设置了一个无线热点,以便从同一个无线接口设备共享互联网连接。这款无线设备必须使用已经通过nl80211支持构建的Atheros驱动程序。接下来我会告诉你如何。
检测您的无线设备是否可以使用此方法
在terminal中运行以下命令:
lsmod | grep ath
如果输出为空或者字符串cfg80211
不在输出中,则继续使用无效,您应该注意this answer的第二个和第三个点。
需要的工具
检查是否安装了下面提到的所有软件包:iw,hostapd,iptables,udhcpd,udhcpc,macchanger。
您可以使用这些安装
sudo apt-get install iw hostapd iptables udhcpd udhcpc macchanger
编辑一些文件
在终端中运行以下命令以编辑相应的文件:
sudo -H gedit /etc/hostapd.conf /etc/udhcpd.conf /etc/default/udhcpd /etc/wpa_supplicant.conf
-
在
hostapd.conf
文件中添加以下代码:interface=new1 driver=nl80211 ssid=my_wifi_hotspot #Change the ssid name as you wish channel=11 #I sugest you to use the same channel as your wireless network hw_mode=g wme_enabled=1 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=3 wpa_passphrase=1234567890 #Change the passphrase as you wish wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP
-
在
udhcpd.conf
文件中注释所有当前行(通过在行前添加#
字符)并添加以下新行:start 192.168.0.102 #These IPs must to be in the same subset as your current default route end 192.168.0.117 interface new1 opt dns 192.168.0.1 #Your current default route (Gateway) option subnet 255.255.255.0 opt router 192.168.0.101 #This IP must to be in the same subset as your current default route option domain localhost
-
在/etc /default /udhcp中,注释表示
DHCPD_ENABLED="no"
的行。 -
在
wpa_supplicant.conf
中,您必须提供当前无线网络的设置。一些简单的例子参见man wpa_supplicant
。你可能在/usr/share/doc/wpa_supplicant/
目录中有更多的例子。我用了类似的东西:ctrl_interface=/var/run/wpa_supplicant network={ ssid="my_wifi_network" key_mgmt=WPA-PSK proto=WPA pairwise=CCMP group=CCMP psk="mypassphrase" }
-
保存所有文件并关闭它们。
Note: All of these edits doesn’t affect with nothing your current network configuration.
制作一个shell脚本
-
在终端中运行
mkdir -p bin
– 如果您尚未拥有它,此命令将在home
文件夹中创建一个bin
目录。 -
运行
gedit ~/bin/hotspotsetup.sh
后 – 这将在gedit中创建新文件change_sources.sh
。 -
将以下脚本复制并粘贴到新创建的文件中:
#!/bin/bash
service network-manager stop
sleep 1
pkill -15 nm-applet
sleep 1
ifconfig wlan0 down #wlan0 - the name of your wireless adapter
sleep 1
iw phy phy0 interface add new0 type station
iw phy phy0 interface add new1 type __ap
sleep 2
ifconfig new0 down
macchanger --mac 00:11:22:33:44:55 new0
ifconfig new1 down
macchanger --mac 00:11:22:33:44:66 new1
ifconfig new0 up
ifconfig new1 up
ifconfig new1 192.168.0.101 up #192.168.0.101 - the same IP defined for router in 'udhcpd.conf' file
hostapd /etc/hostapd.conf &
sleep 2
service udhcpd start
wpa_supplicant -inew0 -c/etc/wpa_supplicant.conf &
sleep 10
udhcpc -i new0
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables --table nat --append POSTROUTING --out-interface new0 -j MASQUERADE
iptables --append FORWARD --in-interface new1 -j ACCEPT
-
保存该文件并关闭它。
-
返回到终端并运行:
chmod +x ~/bin/hotspotsetup.sh
– 授予脚本的执行访问权限。
从同一无线适配器启动连接到无线网络的无线热点
以root权限在终端中运行上述脚本:
sudo ~/bin/hotspotsetup.sh
Proof
Note: To start again your network-manager service as it was before to run the
hotspotsetup.sh
script, restart your computer (sudo reboot
).
来源:Connectify for Linux with Single wireless interface。
次佳解决办法
简单的步骤:在Ubuntu中创建wifi热点
-
禁用Wifi(取消选中启用Wi-Fi)
-
转到网络连接(编辑连接…)
-
点击”Add”
-
选择”Wi-Fi”并单击”Create”
-
输入连接名称,如”wifi-hotspot”
-
根据您的需要键入SSID
-
从下拉菜单中选择设备MAC地址(wlan0)
-
Wifi Security选择“WPA& WPA2 Personal”并设置密码。
-
转到IPv4设置选项卡,从方法drop-down框中选择共享到其他计算机。
-
然后保存并关闭。
-
打开终端(Ctrl + Alt + T)并输入以下命令,并在步骤5中使用连接名称。
sudo gedit /etc/NetworkManager/system-connections/wifi-hotspot
-
找到
mode=infrastructure
并将其更改为mode=ap
-
现在检查wi-fi将自动连接到创建的热点的网络部分。如果找不到它,请转到连接到隐藏网络…找到连接并连接到它。
来源:http://ubuntuhandbook.org/index.php/2014/09/3-ways-create-wifi-hotspot-ubuntu/
第三种解决办法
这是另一个答案,因为另一个答案造成了很多争议。
最重要的是,您需要知道我们的无线适配器的名称。使用下面的命令来获取它:
iwconfig
这将是最有可能的wlan0或wlan1。
有些情况下,我们使用旧的WiFi适配器,我们想知道它使用的驱动程序。我们可以根据USB或PCI的类型使用下面的命令。
lsusb
lspci
使用以下命令查看您当前使用的驱动程序:
lsmod
需要安装一个程序。只需按下键盘上的Ctrl
+ Alt
+ T
即可打开终端。打开时,运行下面的命令:
sudo apt-get install hostapd
通过以下命令打开主网络适配器配置文件:
sudo gedit /etc/hostapd/hostapd.conf
并像这样编辑它:
interface=wlan0
driver=nl80211
country_code=US
ssid=mySSID
hw_mode=g
channel=1
wpa=2
wpa_passphrase=MyWiFiPassword
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
auth_algs=1
macaddr_acl=0
第一行应该是您的网络适配器名称。第二行不应该在大多数情况下被改变,除非你不幸运并且你需要第三方驱动程序。第三行不需要解释。第四行应该是您的WiFi接入点名称(SSID)。第五行将您的网络标识为a /b /g /n模式。下一行是您的网络频道。其余行设置安全和加密。在大多数情况下,您只需要更改密码短语。
通过以下命令打开第二个配置文件:
sudo gedit /etc/default/hostapd
并像这样改变它:
DAEMON_CONF="/etc/hostapd/hostapd.conf"
RUN_DAEMON="yes"
DAEMON_OPTS="-dd"
第一行指向主网络适配器配置文件。第二行告诉hostapd在启动时在后台以DAEMON模式运行。最后一行告诉hostapd记录每条消息。这里的重要技巧是,如果您喜欢使用两个不同的无线网络适配器来设置双频带接入点,则应创建每个ard的原始配置文件(第1个文件)并将其更改为如下所示:
DAEMON_CONF="/etc/hostapd/hostapd.conf /etc/hostapd/hostapd2.conf"
配置完成。
运行DAEMON
现在,您必须确保hostapd DAEMON在启动时启动(下面的第一条命令),您现在也应该运行它以避免强制重新启动。
sudo update-rc.d hostapd defaults
sudo /etc/init.d/hostapd start
它完成了。现在我们可以连接到我们新建的接入点。
来源:Hostapd:The Linux Way to create Virtual Wifi Access Point& Hostapd Linux documentation page
第四种办法
正如你在这个答案的评论中看到的那样,它是一种方法来做到这一点。它在FreeBSD(不是Ubuntu /Linux)中有记录:https://serverfault.com/questions/192144/connect-to-multiple-ap-with-one-wifi-adapter-under-linux-freebsd(链接来自评论)。它在Linux上似乎没有完全相同的工作方式,但它应该是相似的。不幸的是,我无法找到关于此主题的更多详细信息。
最简单也是最常用的方法是使用两个物理网络接口。所以你可能会购买另一个wifi棒,或者只是使用其他技术进一步连接,并通过Wifi做其中一个。可能性例如是:
-
蓝牙+ Wifi
-
LAN /以太网+ Wifi
-
3G /LTE + Wifi
-
无线(外部)+无线(内置或第二外部)
一旦我注意到Ubuntu Linux能够同时管理两个WiFi设备而不会变得复杂。我没有通过分享互联网连接等方式来测试,但它应该是可能的。它的复杂程度可能取决于您使用的连接类型。在Linux上,你可能不需要和某种特殊的软件。应该可以在不需要任何特殊工具的情况下共享连接。不幸的是,我现在无法尝试。
我建议你尝试无线连接到无线上网,如果你有另一个无线网卡或者LAN或蓝牙(这是大多数笔记本电脑中的内置)。由于提供商数据等,3G /LTE共享有点不好。
第五种办法
我发现创建CONNECTIFY体验的最佳方式是使用AP-HOTSPOT! (WPA2..not wep像linux在默认情况下在Ubuntu中)
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
要安装它打开一个终端,然后浏览到:
cd /home/USERNAME/LOCATION
然后运行安装命令:
qmake
make
创建一个程序…将其拖动到桌面并完成:)欢呼声
至于两个适配器… Windows和免费BSD可以做到这一点…截至目前我仍然试图弄清楚,因为我从昨天开始只为自己找到这个场景!我将回报… Linux也可以做到这一点。它不是适配器的硬件限制,可以与其他操作系统一起使用。