這篇是 linux 下使用 hostapd 實現無線存取點 AP 模式的另一種實作方式:hostapd 路由模式設定。
對於軟硬體的基本配置及 hostapd 安裝在《CentOS 7 之 hostapd AP模式配置》的前半部分內容中有說明,可以先看看那篇,再看本文。
hostapd 的AP模式配置所需的有線網卡和無線網卡進行橋接,那路由模式配置主要就是將無線網卡的資料透過有線網卡偽裝、轉送兩個方面,也就不再需要將有線和無線網卡進行橋接。
配置這種路由模式就類似一台普通的無線路由器,有線網口就相當於普通無線路由器的WAN 接口,無線網卡就負責發送廣播無線信號供手機、筆記本的無線設備接入實現網絡訪問。
但也有區別的地方就是跟普通無線路由器相比,這種實現方式沒有四個普通的 LAN 接口,不能供其它台式機等進行有線連接。
其實 linux 作為網路功能為主的作業系統也是可以連接的,只是需要交換器等設備等,會複雜些。我這裡的設定就當作沒有四個 LAN 介面的普通無線路由器。
hostapd.conf 設定
這裡只是一個最小化的配置:
# /etc/hostapd/hostapd.conf 最小化設定
interface=wlp2s0
#bridge=br0 以
driver=nl80211ssid=test
hw_mode=g
channel=1
auth_algs=3
ignore_broadcast_ssid=0 # 是否使用廣播,且以0 廣播
wpa=3
wpa_passphrase=12345678 # 無線連接密碼
設定跟AP模式設定檔類似,只要註解掉 bridge=br0 選項就可以。
有線介面設定
首先我們需要正確設定有線介面並且可以正常上網。最簡單的是方式就是從路由器那自動取得IP位址、閘道、DNS。如果沒有路由器的話就需要手動設定有線介面的上網方式,例如常用的PPPOE方式、靜態IP位址方式、動態取得IP位址方式等。反正動態取得IP位址的最簡單。
無線介面設定 使用 ip addr add 指令
使用 ip addr add 指令設定無線網卡的 IP 位址,重新啟動後就會失效。例如172.16.0.1/24或其他私有位址,還有就是不要與有線網路卡處在同一個網段。一般有線網路卡從路由器取得的IP位址是 192.168.1.0/24 網段位址。ip addr add 172.16.0.1/24 dev wlp2s0
坑提示:目前 CentOS 7 預設使用的是 NetworkManager 套件作為網路設定工具。這裡遇到一個問題就是,NetworkManager 套件其提供的nmcli 指令並不支援為無線網卡設定靜態的IP 位址,這需要使用ip addr add 指令手動設定無線網卡的IP 位址或在/etc/sysconfig/network -scripts/ 資料夾下面新建設定文件,這是比較老且經典的一種介面配置方式。
使用網路設定檔
#如要想想儲存設置,可以新建一個檔案 /etc/sysconfig/network-scripts/ifcfg-static-wlp2s0 ,檔案名稱以 ifcfg 前綴。vi /etc/sysconfig/network-scripts/ifcfg-static-wlp2s0
[root@server ~]# vi /etc/sysconfig/network-scripts/ifcfg-static-wlp2s0
#TYPE=Ethernet
#BOOTPROTO=none
#DEFROUTE=yes
#IPV4_FAILURE_FATAL=no
#IPV6INIT=yes##IPV6_AUTOCONF=yes
#IPV6_DEFROUTE=yes
#IPV6_FAILURE_FATAL=no
#NAME=static-wlp2s0
#UUID=a036678e-8fdf-48f3-8693-961bb6326i744 #DEVICE=wlp2s0
ONBOOT=yes
IPADDR=172.16.0.1PREFIX=24
#GATEWAY=192.168.10.254 地#DNS1=127.0.0.1
#DNS2=192.168.10.254
#IPV6_PEERDNS=yes
#IPV6_PEERROUTES=yes
儲存後需要先停止 NetworkManager.service 服務,最好禁止開機啟動,不然還是會有問題。主要表現為開機時 network.service 無法啟動。
禁止 NetworkManager.service 服務開機啟動
systemctl disable NetworkManager.service
#停止 NetworkManager.service 服務
systemctl stop NetworkManager.service
##想看看有沒有生效可以重新啟動 network.service 服務或直接重新啟動系統。
systemctl restart network.service
啟用轉送與設定介面偽裝 啟用轉送
使用 sysctl -w 重新啟動後會失效
sysctl -w net.ipv4.ip_forward=1
[root@server ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
啟用 IP 轉送重新啟動後不會失效使用下列方法,系統重新啟動後會自動載入 /etc/sysctl.d/ 資料夾下的設定。
vi /etc/sysctl.d/ip_forward.conf
#[root@server ~]# vi /etc/sysctl.d/ip_forward.conf
#net.ipv4.ip_forward = 1
設定介面偽裝
#CentOS 7 中使用 firewalld 和 iptables 都能做到介面偽裝。 CentOS 7 中預設啟用的是 firewalld.service 服務。 iptables 服務和 firewalld 服務衝突,兩者只能啟用其中一個。
使用 firewalld 設定介面偽裝
如果能使用圖形介面配置的話更加簡單明了,這裡只使用 firewalld-cmd 指令方式配置。
如果沒有啟動 firewalld.service 服務,則需要先啟動 firewalld.service 服務。
systemctl start firewalld.service
將無線介面加入到 trust 區域,並儲存設定。預設所有介面屬於 public 區域,連線限制較嚴格,會導致無法連線。
firewall-cmd --zone=trusted --add-interface=wlp2s0 --permanent
[root@server ~]# firewall-cmd --zone=trusted --add-interface=wlp2s0 --permanent
##success
對有線介面所在的區域啟用偽裝,並儲存配置,預設有線介面屬於 public 區域。
firewall-cmd --zone=public --add-masquerade --permanent
[root@server ~]# firewall-cmd --zone=public --add-masquerade --permanent
##success
重啟 firewalld 服務
systemctl restart firewalld.service
使用 iptables 設定介面偽裝
如果習慣使用 iptables ,需要安裝 iptables-services 這個套件,裡麵包含 iptables.service 和 ip6tables.service 這兩個服務,分別用於 ipv4 和 ipv6。
要使用 iptables 需要先停止並停用 firewalld.service 服務
systemctl stop firewalld.service
systemctl disable firewalld.service
再啟用 iptables.service 服務,因為目前還是主要使用 ipv4 所以只啟用 iptables.service 就可以。如果使用 iptables 同樣需要設定開機啟動 iptables.service 服務。
systemctl enable iptables.service
啟動 iptables.service 服務
systemctl start iptables.service
介面偽裝
iptables -t nat -A POSTROUTING -o p2p1 -j MASQUERADE
##一般來說設定上面的指令就可以了,如果防火牆設定比較嚴格需要新增允許轉送無線網卡介面wlp2s0。
iptables -t filter -A FORWARD -i wlp2s0 -j ACCEPT
dnsmasq 設定 dnsmasq 軟體安裝
dnsmasq 主要負責分配客戶端IP位址及DNS解析服務。
沒有安裝的話先安裝 dnsmasq 軟體
yum install dnsmasq
設定開機自動啟動 dnsmasq 服務systemctl enable dnsmasq.service
dnsmasq.conf 配置
vi /etc/dmsmasq.conf
[root@server ~]# vi /etc/dnsmasq.conf
# 指定接口,指定後同時附加lo接口,可以使用'*'通配符
interface=wlp2s0### #### 綁定介面### ###bind-interfaces### #### DHCP位址池 從172.16.0.100到172.16.0.200####
dhcp-range=172.16.0.100,172.16.0.200,255.255.255.0,1h
啟動 dnsmansq 服務需要無線網路卡已經正確設定了 ip 位址。 dnsmasq 會自動將目前的無線網路卡位址 172.16.0.1 設定為用戶端的閘道位址和DNS位址。
systemctl start dnsmasq.service
#最後重新啟動 hostapd 服務
systemctl restart hostapd.service
#以上是無AP模式下的CentOS7使用hostapd實現的完整指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!