這篇是 linux 下使用 hostapd 實現無線接入點 AP 模式的另外一種實現方式:hostapd 路由模式配置。linux
對於軟硬件的基本配置及 hostapd 安裝在《CentOS 7 之 hostapd AP模式配置》的前半部份內容中有說明,能夠先看看那篇,再看本文。bash
hostapd 的AP模式配置須要的有線網卡和無線網卡進行橋接,那路由模式配置主要就是將無線網卡的數據經過有線網卡進行假裝、轉發兩個方面,也就再也不須要將有線和無線網卡進行橋接。網絡
配置這種路由模式就相似一臺普通的無線路由器,有線網口就至關於普通無線路由器的 WAN 接口,無線網卡就負責發送廣播無線信號供手機、筆記本的無線設備接入實現網絡訪問。ide
但也有區別的地方就是跟普通無線路由器相比,這種實現方式沒有四個普通的 LAN 接口,不能供其它臺式機等進行有線鏈接。工具
實際上 linux 做爲網絡功能爲主的操做系統也是能夠鏈接的,只是須要交換機等設備等,會複雜些。我這裏的配置就看成是沒有四個 LAN 接口的普通無線路由器。
操作系統
這裏只是一個最小化的配置:rest
# /etc/hostapd/hostapd.conf 最小化配置 interface=wlp2s0 #bridge=br0 #再也不須要橋接,將這行註釋就能夠 driver=nl80211 ssid=test hw_mode=g channel=1 auth_algs=3 ignore_broadcast_ssid=0 # 是否廣播,0 廣播 wpa=3 wpa_passphrase=12345678 # 無線鏈接密碼
配置跟AP模式配置文件相似,只要註釋掉 bridge=br0 選項就能夠。
server
首先咱們須要正確配置有線接口而且能夠正常上網。最簡單的是方式就是從路由器那自動獲取IP地址、網關、DNS。若是沒有路由器的話那就須要手動設置有線接口的上網方式,例如經常使用的PPPOE方式、靜態IP地址方式、動態獲取IP地址方式等。反正動態獲取IP地址的最簡單。
dns
使用 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.1 #指定IP地址 PREFIX=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-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-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 主要負責分配客戶端IP地址及DNS解析服務。
沒有安裝的話先安裝 dnsmasq 軟件
yum install dnsmasq
設置開機自動啓動 dnsmasq 服務
systemctl enable dnsmasq.service
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