這篇是 linux 下使用 hostapd 實(shí)現(xiàn)無(wú)線接入點(diǎn) AP 模式的另一種實(shí)現(xiàn)方式:hostapd 路由模式配置。
對(duì)于軟硬件的基本配置及 hostapd 安裝在《CentOS 7 之 hostapd AP模式配置》的前半部分內(nèi)容中有說(shuō)明,可以先看看那篇,再看本文。
hostapd 的AP模式配置需要的有線網(wǎng)卡和無(wú)線網(wǎng)卡進(jìn)行橋接,那路由模式配置主要就是將無(wú)線網(wǎng)卡的數(shù)據(jù)通過(guò)有線網(wǎng)卡進(jìn)行偽裝、轉(zhuǎn)發(fā)兩個(gè)方面,也就不再需要將有線和無(wú)線網(wǎng)卡進(jìn)行橋接。
配置這種路由模式就類(lèi)似一臺(tái)普通的無(wú)線路由器,有線網(wǎng)口就相當(dāng)于普通無(wú)線路由器的 WAN 接口,無(wú)線網(wǎng)卡就負(fù)責(zé)發(fā)送廣播無(wú)線信號(hào)供手機(jī)、筆記本的無(wú)線設(shè)備接入實(shí)現(xiàn)網(wǎng)絡(luò)訪問(wèn)。
但也有區(qū)別的地方就是跟普通無(wú)線路由器相比,這種實(shí)現(xiàn)方式?jīng)]有四個(gè)普通的 LAN 接口,不能供其它臺(tái)式機(jī)等進(jìn)行有線連接。
實(shí)際上 linux 作為網(wǎng)絡(luò)功能為主的操作系統(tǒng)也是可以連接的,只是需要交換機(jī)等設(shè)備等,會(huì)復(fù)雜些。我這里的配置就當(dāng)作是沒(méi)有四個(gè) LAN 接口的普通無(wú)線路由器。
hostapd.conf 配置
這里只是一個(gè)最小化的配置:
# /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 # 無(wú)線連接密碼
配置跟AP模式配置文件類(lèi)似,只要注釋掉 bridge=br0 選項(xiàng)就可以。
有線接口配置
首先我們需要正確配置有線接口并且可以正常上網(wǎng)。最簡(jiǎn)單的是方式就是從路由器那自動(dòng)獲取IP地址、網(wǎng)關(guān)、DNS。如果沒(méi)有路由器的話那就需要手動(dòng)設(shè)置有線接口的上網(wǎng)方式,例如常用的PPPOE方式、靜態(tài)IP地址方式、動(dòng)態(tài)獲取IP地址方式等。反正動(dòng)態(tài)獲取IP地址的最簡(jiǎn)單。
無(wú)線接口設(shè)置 使用 ip addr add 命令
使用 ip addr add 命令設(shè)置無(wú)線網(wǎng)卡的 IP 地址,重啟后就會(huì)失效。例如172.16.0.1/24或其他私有地址,還有就是不要與有線網(wǎng)卡處在同一個(gè)網(wǎng)段。一般有線網(wǎng)卡從路由器獲取的IP地址是 192.168.1.0/24 網(wǎng)段地址。
ip addr add 172.16.0.1/24 dev wlp2s0
坑提示:目前 CentOS 7 默認(rèn)使用的是 NetworkManager 套件作為網(wǎng)絡(luò)配置工具。這里遇到一個(gè)問(wèn)題就是,NetworkManager 套件其提供的 nmcli 命令并不支持給無(wú)線網(wǎng)卡設(shè)置靜態(tài)的 IP 地址,這就需要使用 ip addr add 命令手動(dòng)設(shè)定無(wú)線網(wǎng)卡的 IP 地址或者在 /etc/sysconfig/network-scripts/ 文件夾下面新建配置文件,這是比較老且經(jīng)典的一種接口配置方式。
使用網(wǎng)絡(luò)配置文件
如要想想保存設(shè)置,可以新建一個(gè)文件 /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 #指定無(wú)線網(wǎng)卡的接口
ONBOOT=yes #開(kāi)機(jī)就進(jìn)行設(shè)置
IPADDR=172.16.0.1 #指定IP地址
PREFIX=24 #指定掩碼長(zhǎng)度
#GATEWAY=192.168.10.254 #其他用不著注釋掉
#DNS1=127.0.0.1
#DNS2=192.168.10.254
#IPV6_PEERDNS=yes
#IPV6_PEERROUTES=yes
保存后需要先停止 NetworkManager.service 服務(wù),最好禁止開(kāi)機(jī)啟動(dòng),不然還是會(huì)有問(wèn)題。主要表現(xiàn)為開(kāi)機(jī)時(shí) network.service 無(wú)法啟動(dòng)。
禁止 NetworkManager.service 服務(wù)開(kāi)機(jī)啟動(dòng)
systemctl disable NetworkManager.service
停止 NetworkManager.service 服務(wù)
systemctl stop NetworkManager.service
想看看有沒(méi)有生效可以重啟 network.service 服務(wù)或直接重啟系統(tǒng)。
systemctl restart network.service
啟用轉(zhuǎn)發(fā)和配置接口偽裝 啟用轉(zhuǎn)發(fā)
使用 sysctl -w 重啟后會(huì)失效
sysctl -w net.ipv4.ip_forward=1
[root@server ~]# sysctl -w net.ipv4.ip_forward=1
net.ipv4.ip_forward = 1
啟用 IP 轉(zhuǎn)發(fā)重啟后不會(huì)失效使用下面方法,系統(tǒng)重啟后會(huì)自動(dòng)加載 /etc/sysctl.d/ 文件夾下的設(shè)置。
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 中默認(rèn)啟用的是 firewalld.service 服務(wù)。iptables 服務(wù)和 firewalld 服務(wù)沖突,兩者只能啟用其中一個(gè)。
使用 firewalld 配置接口偽裝
如果能使用圖形界面配置的話更加簡(jiǎn)單明了,這里僅使用 firewalld-cmd 命令方式配置。
如果沒(méi)有啟動(dòng) firewalld.service 服務(wù),需要先啟動(dòng) firewalld.service 服務(wù)。
systemctl start firewalld.service
將無(wú)線接口加入到 trust 區(qū)域,并保存配置。默認(rèn)情況下所有接口屬于 public 區(qū)域,連接限制比較嚴(yán)格,會(huì)導(dǎo)致無(wú)法連接。
firewall-cmd --zone=trusted --add-interface=wlp2s0 --permanent
[root@server ~]# firewall-cmd --zone=trusted --add-interface=wlp2s0 --permanent
success
對(duì)有線接口所在的區(qū)域啟用偽裝,并保存配置,默認(rèn)情況下有線接口屬于 public 區(qū)域。
firewall-cmd --zone=public --add-masquerade --permanent
[root@server ~]# firewall-cmd --zone=public --add-masquerade --permanent
success
重啟 firewalld 服務(wù)
systemctl restart firewalld.service
使用 iptables 配置接口偽裝
如果習(xí)慣使用 iptables ,需要安裝 iptables-services 這個(gè)包,里面包含 iptables.service 和 ip6tables.service 這兩個(gè)服務(wù),分別用于 ipv4 和 ipv6。
要使用 iptables 需要先停止并禁用 firewalld.service 服務(wù)
systemctl stop firewalld.service
systemctl disable firewalld.service
再啟用 iptables.service 服務(wù),因?yàn)槟壳斑€是主要使用 ipv4 所以只啟用 iptables.service 就可以。如果使用 iptables 同樣需要設(shè)置開(kāi)機(jī)啟動(dòng) iptables.service 服務(wù)。
systemctl enable iptables.service
啟動(dòng) iptables.service 服務(wù)
systemctl start iptables.service
接口偽裝
iptables -t nat -A POSTROUTING -o p2p1 -j MASQUERADE
一般來(lái)說(shuō)配置上面的命令就可以了,如果防火墻設(shè)置比較嚴(yán)格需要添加允許轉(zhuǎn)發(fā)無(wú)線網(wǎng)卡接口wlp2s0。
iptables -t filter -A FORWARD -i wlp2s0 -j ACCEPT
dnsmasq 配置 dnsmasq 軟件安裝
dnsmasq 主要負(fù)責(zé)分配客戶端IP地址及DNS解析服務(wù)。
沒(méi)有安裝的話先安裝 dnsmasq 軟件
yum install dnsmasq
設(shè)置開(kāi)機(jī)自動(dòng)啟動(dòng) dnsmasq 服務(wù)
systemctl enable dnsmasq.service
dnsmasq.conf 配置
vi /etc/dmsmasq.conf
[root@server ~]# vi /etc/dnsmasq.conf
# 指定接口,指定后同時(shí)附加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
啟動(dòng) dnsmansq 服務(wù)需要無(wú)線網(wǎng)卡已經(jīng)正確設(shè)置了 ip 地址。dnsmasq 會(huì)自動(dòng)將當(dāng)前的無(wú)線網(wǎng)卡地址 172.16.0.1 設(shè)置為客戶端的網(wǎng)關(guān)地址和DNS地址。
systemctl start dnsmasq.service
最后重新啟動(dòng) hostapd 服務(wù)
systemctl restart hostapd.service