2021年6月16日 星期三

Setup Wifi AP mode in Linux

三種方式檢測網絡卡是否支援master mode:
iwconfig wlan0 mode master         #不報error就是支援做熱點;
iw list                                 #檢視列出內容中support interface modes下是否有支援AP mode;
ethtool -i wlan0               #檢視無線網絡卡的driver,檢視driver是否支援AP mode(通過http://wireless.kernel.org/en/users/Drivers 這個AP模式支援的驅動列表裡查詢AP項為yes的為支援)

開始安裝:
yum install hostapd dnsmasq -y

配置hostapd,配置檔案在/etc/hostapd/hostapd.conf
【conf內容】
ctrl_interface=/var/run/hostapd  
ctrl_interface_group=wheel  
# Some usable default settings...  
macaddr_acl=0  
auth_algs=1  
# ignore_broadcast_ssid=0  
# Uncomment these for base WPA & WPA2 support with a pre-shared key  
wpa=3  
wpa_key_mgmt=WPA-PSK  
wpa_pairwise=TKIP  
# rsn_pairwise=CCMP  
# DO NOT FORGET TO SET A WPA PASSPHRASE!!  
wpa_passphrase=****** 
# Most modern wireless drivers in the kernel need driver=nl80211   
driver=nl80211  
# Customize these for your local configuration...  
interface=wlan0  
hw_mode=g  
channel=7  
ssid=HOST-AP
配置完了,可執行hostapd /etc/hostapd/hostapd.conf測試驅動/熱點是否可用;
 
配置dnsmasq,配置檔案/etc/dnsmasq.conf
【conf修改內容】
interface=wlan0 
listen-address=192.168.0.1 
#no-dhcp-interface= 
dhcp-range=192.168.0.50,192.168.0.150,12h 
dhcp-option=3,192.168.0.1 
dhcp-option=6,8.8.8.8 

開啟主機的路由轉發:
echo 1 >/proc/sys/net/ipv4/ip_forward 
ip 轉發設定預設在重啟系統之後會消失;若想儲存 ip_forward 設定:
修改 /etc/sysctl.conf 中:
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.rp_filter = 1(if found it)
可執行sysctl -p來使核心引數即時生效。


設定無線接入點IP地址:
ifconfig wlan0 192.168.0.1/24
若已經有IP,這裡可執行:ifup wlan0
若想服務開機啟動,可直接編輯/etc/sysconfig/network-scripts/ifcfg-wlan0,修改BOOTPROTO=static,並新增IPADDR=1.2.3.4 NETMASK=255.255.255.0。

啟動hostapd及dnsmasq網路服務:
service hostapd start
service dnsmasq start
若想實現服務開機自啟動:
chkconfig hostapd on
chkconfig dnsmasq on


建立iptables規則(資料轉發通過有線網絡卡eth0作為internet出口):
iptables -F
iptables -X
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables 設定預設在重啟系統之後會消失,儲存iptables規則:
/etc/init.d/iptables save 

正常的話,已經可以用手機連你的wifi啦(上文中SSID好像叫HOST-AP)

********************

1.

客戶端使用HOSTAPD無線AP時,網速不穩定,導致某些時刻無法開啟網頁或者其它因為網路超時導致的網路不可訪問故障。 該問題主要是因為無線資料傳輸校驗中隨機種子數較少導致的無線網路資料傳輸時延過大導致的。

cat /proc/sys/kernel/random/entropy_avail檢視具體數值,一般小於1000;
sudo apt-get install haveged安裝隨機數生成器(haveged);
/etc/init.d/haveged start 啟動隨機數生成器,提高entropy_avail數值。這樣無線網路時延將恢復到正常狀態,網路不在出現以上描述的問題。

2.

如果啟動hostapd總是報:nl80211: Failed to set interface wlan0 into AP mode,可能是因為hostapd已經啟動了,或者當前裝置驅動不支援AP mode。如果是後者,有一種情況況是需要升級核心。

核心編譯之前須執行make menuconfig,找到下列選項,必須勾選:
Networking —->
  Networking options —->
  [*] Network packet filtering (replaces ipchains)  —>
    Core Netfilter Configuration  —>
      <*> Netfilter Xtables support (required for ip_tables)
    IP: Netfilter Configuration —>
      <*> Connection tracking (required for masq/NAT)
      <*> IP tables support (required for filtering/masq/NAT)
      <*>   IP range match support
      <*>   Packet filtering(根據linux釋出,以下三項可能name不同)
      <*>     REJECT target support
      <*>   Full NAT

3.

其它相關網址:

https://wireless.wiki.kernel.org/en/users/download(linux wireless driver 


download)
http://www.361way.com/hostapd-soft-ap/2933.html(centos配置wifi熱點)
http://forum.ubuntu.org.cn/viewtopic.php?p=2975544(ubuntu下配置熱點)
http://blog.itpub.net/29901741/viewspace-1294741/(橋接模式配置熱點) .


現在許多較新的raspberry pi支援wifi來當作網路的連接介面,讓raspberry pi能夠在找不到網孔的時候,使用wifi來當作連線,另一方面,如果可以用raspberry pi上的wifi晶片來當一個wifi ap,也是一個很好的利用方式

安裝

  1. 安裝dnsmasq以及hostapd
sudo apt install dnsmasq hostapd
  1. 抓下來就會自動啟動service,但因為還沒有設定細部的功能,所以要先停止這兩個service
sudo systemctl stop dnsmasq
sudo systemctl stop hostapd

設定固定IP

  1. 設定/etc/dhcpcd.conf,server的IP設定為192.168.4.1子網路遮罩設定為/24(也就是255.255.255.0
interface wlan0
    static ip_address=192.168.4.1/24
    nohook wpa_supplicant
  1. 重新啟動service
sudo service dhcpcd restart

設定DHCP server

  1. 把預設的設定檔/etc/dnsmasq.conf備份起來,然後編輯一個新的設定檔
sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig
  1. 編輯/etc/dnsmasq.conf,以下設定檔為範例,保留192.168.4.2以及192.168.4.20,並且子網路遮罩為255.255.255.0
interface=wlan0      # Use the require wireless interface - usually wlan0
dhcp-range=192.168.4.2,192.168.4.20,255.255.255.0,24h
  1. 重新載入DHCP server的service
sudo systemctl reload dnsmasq

設定hostapd

  1. 編輯/etc/hostapd/hostapd.conf
interface=wlan0
driver=nl80211
ssid=NameOfNetwork
hw_mode=n
channel=7
wmm_enabled=0
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_passphrase=AardvarkBadgerHedgehog
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
  1. 告訴hostapd設定檔放在哪裡,編輯/etc/default/hostapd
DAEMON_CONF="/etc/hostapd/hostapd.conf"
  1. 啟動hostapd
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd

加入routing

  1. 編輯/etc/sysctl.conf並把下面那一行取消註解
net.ipv4.ip_forward=1
  1. 輸入下面這一行,讓他加入iptables裡面
sudo iptables -t nat -A  POSTROUTING -o eth0 -j MASQUERADE
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
iptables-restore < /etc/iptables.ipv4.nat 

這樣就完成將raspberry pi變成wifi ap囉!當然這不是bridge模式,而是有NAT的功能 

資料來源: https://ithelp.ithome.com.tw/articles/10227070

沒有留言: