最开始的准备:如安装系统可参考
2018.11.20日更新: 通过下面的方法,有一个问题,就是我发现 WIFI 第一次可以连上,然后过一会就连不上了,通过 Wireshark 抓包分析,可以看出一直在发送广播请求,比如 DHCP 请求,导致 DHCP 一直无法成功获取 IP ,所以,有两种可能,第一 DHCP 配置有问题,第二,不兼容导致。
解决方法: 使用 dnsmasq 替换 dhcpd。
一:添加 EPEL 软件源
EPEL 软件源收录了很多自带软件源没有的常用的软件。在 x86 版 CentOS 上,我们可以很方便地用 yum -y install epel-release
来添加 EPEL 软件源,但是在 ARM 版 CentOS 上就行不通了。
不过我们可以通过手动修改 yum
源的配置文件来添加它。
执行如下命令:
1 | cat << EOF > /etc/yum.repos.d/epel.repo |
二:安装需要的软件
- hostapd : 至今为止用得最广泛的无线热点程序,稳定而强大,几乎你能想到的无线路由器都在使用它。
- dhcpd : 强大的 DHCP 服务器(动态主机服务),适合用于管理多个大型网络的主机地址自动分配。
注意:
开热点需要有能够支持 AP 模式的无线网卡,如果你不确定的话可以这样查看
iw list
如果没有 iw 命令,可以使用 yum 安装一下。
如果里面 Supported interface modes: 有 “AP” 那么意味着你的网卡支持。
安装 hostapd
1
yum install hostapd
安装 dhcpd
1
yum install dhcp
安装完成后,可以使用 systemctl 很方便的管理
1
systemctl start|stop|enable|disable hostapd|dhcpd
三: 配置安装的软件
首先我们需要配置 hostapd ,它的默认配置文件在 /etc/hostapd/hostapd.conf
。
1 | hostapd 提供一个控制终端 hostapd_cli,这里配置终端接入的细节 |
保存之后别急着启动,因为默认情况下网卡受 NetworkManager 托管,所以 hostapd 无法管理无线网卡。执行下面命令以让 NetworkManager 不再托管无线网卡。
1 | nmcli device set wlan0 managed no // wlan0 是我的网卡名字,名字不同自己替换 |
然后可以通过 下面命令进行启动 hostapd 如果没有报错,则成功。
1 | systemctl start hostapd |
接下来先给启动了的无线网卡配置 IP 地址
1 | ip addr add 192.168.2.1/24 dev wlan0 |
但是这个是临时的。找了一会试了好几种静态无限网卡设置静态IP 的方法,都不怎么奏效,最后的解决方法:
vim /etc/rc.local
如果有 exit 0
请在它的上面添加(没有的话,直接在最后添加就行)
使用 which ip
先查看一下 ip 的路径。
/usr/sbin/ip addr add 192.168.2.1/24 dev wlan0
最后不要忘了,要给rc.local可执行权限。
chmod +x /etc/rc.d/rc.local
然后每次重启都可以生效。
这个地址相当于平时配路由器的路由器地址,可以根据你的需要改成其他的,不过注意下面的所有配置都得跟着改动。
*后面的 /24
是 255.255.255.0
的缩写,如果想改动请自行查询子网掩码的格式
dhcpd 的配置文件默认在 /etc/dhcp/dhcpd.conf
,这个文件夹需要 root 权限才能进入。
1 | 让 DDNS 自动刷新,适合用在这种经常变动的网络中 |
保存之后启动 dhcpd 服务,启动没有问题就可以了。
1 | systemctl start dhcpd |
在这里并没有考虑使用 nftables ,因为它对内核的某些模块有要求。所以我就直接使用了 ipbtales 进行下面的 nat 操作。
参考hostapd + dhcpd + nftables 在 CentOS 7 上开 WLAN 热点
设置 IPV4 转发
在我们成功的转发我们的包之前,还需要做最后一件事。使用如下命令,可以立即生效不用重启:
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
但是上面的重启之后就失效了。
我们可以打开sysctl.conf
文件vim /etc/sysctl.conf
如果没有此字段(net.ipv4.ip_forward)则添加,如果有的话,把它的值改为 1
net.ipv4.ip_forward=1
我们需要将PI的WIFI连接分享出去,通过配置NAT在wlan0和eth0之间。使用下面命令实现。
1 | sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE |
然而,我们需要这些规则去应用于我的Pi在每次重启机器的时候,所以
sh -c "iptables-save > /etc/iptables.ipv4.nat
去保存这些规则在/etc/iptables.ipv4.nat
文件中。现在我们需要每次重启机器时都要去启用这些规则,所以还需要配置这个文件
vim /etc/rc.local
在这个文件的”exit 0”这行的上面加入下面的内容:
iptables-restore < /etc/iptables.ipv4.nat
差不多成功了!
现在我们只需要去重启一下我们的服务就好了:
systemctl restart hostapd