測試環境ubuntu16,只有一臺筆記本電腦,不插網線,無線網卡既連wifi,又作為熱點
1.方法1 直接手動新建ap熱點
參考https://jingyan.baidu.com/article/ea24bc39b03fc6da62b331f0.html
https://jingyan.baidu.com/article/363872ecd8f35d6e4ba16f97.html
親測,發現電腦如果沒有連有線,按照以上步驟并不能生成wifi熱點,請各位指點
2.方法2 使用create_ap工具新建熱點
2.1安裝依賴hostapd和create_ap
sudo apt install build-essential hostapd
git clone https://github.com/oblique/create_ap
cd create_ap
sudo make install
2.2獲取 wlan/wireless 名字并用create_ap啟動熱點
然后
ifconfig
獲取網卡的名稱每臺電腦的網卡名稱不一定相同,我這里的有線網卡名稱是 enp1s0 無線網卡名稱是 wlp7s0,具體名稱需要自己進行獲取
wlan:enp4s0
wireless: wlp3s0
其中e開頭代表有有線,w開頭代表無線
測試create_ap 是否工作正常
create_ap 基本命令格式:
create_ap wlan0 eth0 MyAccessPoint MyPassPhrase
本機指令
create_ap wlp3s0 enp4s0 note-ubuntu 12345678
新建成功打印ap0:AP-ENABLED如下圖,并且能在別的電腦或手機上搜到wifi名稱為note-ubuntu。手機連接測試發現可以上網
注意如果出現
ERROR: Your adapter can not be a station (i.e. be connected) and an AP at the same time
并且關閉WiFi后出現
WARN: Your adapter does not fully support AP virtual interface, enabling --no-virt
可能為網卡不支持新建熱點
2.3create_ap其他命令
(1)查看創建的熱點
create_ap --list-running
出現結果
8323 wlp3s0(ap0)
(2)查看連接在 ap 上的設備
create_ap --list-clients 查看創建的熱點前面的編號 如8323
https://blog.csdn.net/freewebsys/article/details/126297257
(3)開啟關閉熱點
sudo systemctl start create_ap # 開啟 wifi 熱點
sudo systemctl stop create_ap # 關閉 wifi 熱點
3.方法3用hostapd和dhcp建立wifi熱點
3.1 hostapd和udhcpd工具簡介
(1)hostapd簡介
用過WIFI的應該對wpa_supplicant這個工具有一定的了解。wpa_supplicant用于wifi連接AP、驗證密碼等功能,實現的是wifi sta相關功能。而hostapd工具用于實現WIFI AP相關的功能。
hostapd包括IEEE 802.11接入點管理(認證/關聯)、IEEE 802.1X/WPA/WPA2 Authenticator、EAP服務器和RADIUS認證服務器功能。它可以使用各種配置選項構建,例如,一個獨立的AP管理解決方案或一個支持多種EAP方法的RADIUS認證服務器。
通俗來講作用就是將WIFI模塊模擬成熱點,供其他設備連接。
參考 http://w1.fi/wpa_supplicant/devel/
(2)udhcpd簡介
hostapd可以理解為用于搭建物理層。一個WIFI設備連接到熱點,就像一個網線的設備,插入到了路由器的lan口。而我們Linux設備模擬成熱點,就相當于實現了路由器的功能。Linux熱點運行這hostapd程序,那么其他wifi終端設備就可以連接它。我們知道,將設備用網線連接到路由器是需要手動配置IP地址或者自動的獲取IP地址的。之所以設備能從路由器獲取IP地址,就是因為路由器中運行DHCP服務,可以動態的給連接的設備分配IP地址。同樣我們用Linux模擬成熱點,也需要為其他連接熱點的設備提供IP地址和DNS等配置,這樣其他WIFI終端設備才真正的和熱點組成了局域網。為了實現DHCP服務,所以Linux上需要運行udhcpd這個程序。在嵌入式上udhcpd是busybox提供的一個應用程序。
3.2 安裝hostapd 和dhcp工具
sudo apt install hostapd
sudo apt install isc-dhcp-server
3.3配置和啟動hostapd
(1)配置hostapd
先自己創建一個簡單的配置文件hostapd-minimal.conf,對hostapd的功能進行驗證,將這個hostapd-minimal.conf 文件拷貝到目錄/etc/hostapd/下
并且編輯hostapd-minimal.conf文件如下
#wlan0為你的無線網卡名稱,用ifconfig查,注意無線為w開頭
interface=wlp3s0
#??driver怎么查?
driver=nl80211
#熱點名字
ssid=note-ubuntu
hw_mode=g
channel=1
#使用熱點密碼驗證
wpa=1
#熱點密碼
wpa_passphrase=12345678
(2)啟動hostapd
sudo hostapd /etc/hostapd/hostapd-minimal.conf
出現如下顯示
Configuration file: /etc/hostapd/hostapd-minimal.conf
Using interface wlp3s0 with hwaddr 84:ef:18:cc:32:4c and ssid "note-ubuntu"
wlp3s0: interface state UNINITIALIZED->ENABLED
wlp3s0: AP-ENABLED
wlp3s0: STA 3c:6a:48:88:c8:10 IEEE 802.11: disassociated
wlp3s0: interface state ENABLED->DISABLED
wlp3s0: AP-DISABLED
nl80211: deinit ifname=wlp3s0 disabled_11b_rates=0
這是因為有其他的網絡程序在占用了無線網卡接口,你必須先關閉系統本身的無線網絡管理程序network manager.
sudo nmcli radio wifi off
sudo rfkill unblock wlan
sudo ifconfig wlp3s0 10.5.5.1/24 up
然后再打開hostapd。如下所示,表示你已經成功啟動了
Using interface wlp3s0 with hwaddr 84:ef:18:cc:32:4c and ssid "note-ubuntu"
wlp3s0: interface state UNINITIALIZED->ENABLED
wlp3s0: AP-ENABLED
在手機上發現出現了熱點,并且輸入密碼后能連接上這個wifi。
但是手機上發現不能上網,ubuntu上沒有聯網。想要在手機上連上這個熱點并且能上網還需要繼續進行配置。
3.4配置和啟動dhcp
(1)配置dhcp
1.編輯文件/etc/default/isc-dhcp-server
將INTERFACES項改為
INTERFACES="wlp3s0"
wlp3s0對應無線網卡名字。
2.然后編輯文件/etc/dhcp/dhcpd.conf,在文本后面添加
subnet 10.5.5.0 netmask 255.255.255.0 {range 10.5.5.26 10.5.5.30;option domain-name-servers 8.8.8.8;option routers 10.5.5.1;option broadcast-address 10.5.5.255;default-lease-time 600;max-lease-time 7200;
}
3.編輯
(2)啟動dhcp server
sudo dhcpd
出現
Config file: /etc/dhcp/dhcpd.conf
Database file: /var/lib/dhcp/dhcpd.leases
PID file: /var/run/dhcpd.pid
Wrote 0 leases to leases file.
Listening on LPF/wlp3s0/84:ef:18:cc:32:4c/10.5.5.0/24
Sending on LPF/wlp3s0/84:ef:18:cc:32:4c/10.5.5.0/24No subnet declaration for enp4s0 (no IPv4 addresses).
** Ignoring requests on enp4s0. If this is not whatyou want, please write a subnet declarationin your dhcpd.conf file for the network segmentto which interface enp4s0 is attached. **Sending on Socket/fallback/fallback-net
表示成功了。并且通過sudo netstat -uap
命令查看DHCP服務是否正常啟動,如果出現有dhcpd的字樣說明服務啟動成功。
其他出現
Can't open /var/lib/dhcp/dhcpd.leases for append.
修改權限后執行可以成功
sudo chmod 777 /var/lib/dhcp/dhcpd.leases
3.4 啟用internet共享
(1)啟動路由轉發,
sudo iptables -A FORWARD -o wlp3s0 -i wlp3s0 -s 192.168.5.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -F POSTROUTING
sudo iptables -t nat -A POSTROUTING -o wlp3s0 -j MASQUERADE
刪除/etc/sysctl.conf中下面一行中的’#',解除net.ipv4.ip_forward=1
的注釋。然后執行sudo sysctl -p
使其生效。或者調用
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
再執行
sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
實驗后發現如果連上了wifi,就沒有了熱點。看來還是需要看create_ap 腳本是怎么實現的。
參考文獻
https://www.cnblogs.com/liyam/p/6186527.html