本次操作在Thinkpad T440p Ubuntu16.04上進行,使用hostapd使網卡開啓AP功能,使用isc-dhcp-server作爲dhcp服務器。
1. 安裝需要的程序包
sudo apt-get update
sudo apt-get install hostapd isc-dhcp-server
2. 開啓無線網卡的AP功能
2-1. 將無線網卡配置成monitor模式
使用ifconfig命令查看無線網卡對應的網絡接口(比如我的是wlp3s0,常見的還有wlan0等)
sudo ifconfig wlp3s0 down
sudo iwconfig wlp3s0 mode monitor
sudo ifconfig wlp3s0 up
2-2. 開啓AP
創建hostapd的配置文件
zcat /usr/share/doc/hostapd/examples/hostapd.conf.gz | sudo tee -a /etc/hostapd/hostapd.conf
修改配置文件
interface=wlp3s0
ssid=Example-WLAN #這裏填寫你自己的無線名稱
hw_mode=g
wpa=2
wpa_passphrase=12345678 #這裏填寫你自己的無線密碼
wpa_key_mgmt=WPA-PSK WPA-EAP WPA-PSK-SHA256 WPA-EAP-SHA256
最後執行下面命令,開啓AP
hostapd /etc/hostapd/hostapd.conf
出現打印wlp3s0: AP-ENABLED
表示開啓成功。
2-2-1. 其他配置
- 若不需要密碼,則註釋掉所有wpa開頭的配置項
- 若要支持802.11n,需要如下配置
hw_mode=g
ieee80211n=1
ht_capab=[SHORT-GI-40][HT40+][HT40-][DSSS_CCK-40]
2-2-2. 開啓失敗
我在開啓時,出現nl80211: Could not configure driver mode
,開啓失敗。解決方法是先執行sudo killall -9 wpa_supplicant
,然後執行hostapd /etc/hostapd/hostapd.conf
2-2-3. 如果需要這張網卡一直當做AP使用,且開機自動配置
需要修改/etc/network/interfaces
。這裏假設使用的dhcp服務器的網段是192.168.33.0/24
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
auto wlp3s0
iface wlp3s0 inet static
hostapd /etc/hostapd/hostapd.conf
address 192.168.33.1
netmask 255.255.255.0
3. 開啓dhcp服務器
創建或修改/etc/dhcp/dhcpd.conf
ddns-update-style none;
option domain-name-servers 114.114.114.114, 8.8.8.8;
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.33.0 netmask 255.255.255.0 {
range 192.168.33.100 192.168.33.200;
option routers 192.168.33.1
}
然後執行dhcpd -4 -d -cf /etc/dhcp/dhcpd.conf wlp3s0
開啓dhcp服務器
若一切順利,那麼恭喜,現在你可以連接上這個無線SSID了!
4. 讓這個無線可以上網
執行完上面的步驟,這個無線還是不能上網的。若希望這個無線可以上網,那麼首先你的這個電腦得有一個可以上網的網卡(比如我這裏的有線網卡enp0s25),然後執行如下命令:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -s 192.168.33.0/24 ! -d 192.168.33.0/24 -o enp0s25 -j MASQUERADE
好了,現在這個無線網絡就可以上網了
5. 想讓這張網卡重新可以去連接其他的AP
首先需要關閉hostapd
killall -9 hostapd
將無線網卡配置成managed模式
sudo ifconfig wlp3s0 down
sudo iwconfig wlp3s0 mode managed
sudo ifconfig wlp3s0 up
nmcli radio all on
sudo service network-manager restart