[实用攻略] 利用CentOS7+Hostap将旧电脑变成高效无线路由器

尽管旧电脑形同鸡肋,用之太慢,扔之可惜,但其配置相对普通路由器而言还是要强大许多的。如果你不怕折腾,又想从这个过程中积累一点经验,那么就请搬出CentOS这么个庞然大物,开始我们今天的主题吧!

环境是一台老掉牙的神舟笔记本(大概8、9年前的东西吧),i7 27xx/8G/128G SSD,这配置放当年还是说得过去的,现在就只能呵呵了。许多老前辈都说软路由不咋滴,主要是用无线网卡做AP效果不佳,但经我的实测感觉信号跟我之前用的一台NETGEAR r6300 v2以及TPLINK TL-WAR1300L这两个路由器也没啥太大区别,仅就纯下载速度而言(迅雷),两种方案平分秋色,基本都能达到签约带宽的满速。但软路由方案或许是得益于性能溢出的硬件,在访问网页的时候,响应速度大增,即使在浏览器缓存全清的情况下,打开一个新网页也几乎可以用 “闪电般” 的速度来形容。而我那两台正经路由器,无论怎么样优化总会有那么一点点(或许只有几十毫秒)的顿挫感,打开一个新网页,浏览器总会先“白”那么一下,紧跟着内容才会显示出来,即使用上了SG TCP Optimizer这类优化软件还是不尽人意。别小看这区区几十毫秒的延迟,它非常影响体验!话说我们平时无论是浏览网页还是使用APP,大多数时候还是以这种数据量虽然不大,但是需要频繁建立连接的环境居多,软路由的优势和价值也因此体现出来了。

【当然,如果真的出于实用,我建议你倒不如刷一个专业的路由器系统比如LEDE(OpenWRT)或者Merlin(梅林)、番茄等,效果也不错,感兴趣的可以移步Koolshare中国玩家论坛:http://koolshare.cn/forum.php】

本文大概包括以下几个知识点:
1. CentOS 7的安装
2. 有线网络的设置
3. 通过hostapd+网桥共享上网
4. 通过hostapd+pppoe server+dhcpd共享拨号上网


一 、 CentOS 7的安装
首先是CentOS的安装,准备一个大于4G的U盘,然后去官网下载ISO映像(我下载的是x86_64/7.6.1810版):
下载地址:
https://www.centos.org/download/

强烈推荐用官方写入器(Fedora Media Writer)制作启动U盘,因为我曾经尝试过用UltraISO,成功过一次,也失败了一次,原因不明,下载地址:
https://github.com/FedoraQt/MediaWriter/releases

制作完成后用U盘启动,安装界面是图形化的,很友好,也没什么可说的,会装Windows就会装这个,但我建议如果是初学者,就不要安装迷你(Minimal)版,后期会因为软件依赖问题发生各种奇怪的问题,建议安装一个完整版,这样比较省事。


二、有线网络的安装
装完后,输入root账号,还有刚才安装时设定的密码,登录系统,一般来说至少有线网卡是直接能用的,但是会发现ping任何网站都ping不通,不急。

1. 先用ip addr看看有线网卡名,一般会显示成这样:

ip addr

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether bc:ee:7b:88:eb:c3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.119/24 brd 192.168.1.255 scope global noprefixroute dynamic enp3s0
       valid_lft 7166sec preferred_lft 7166sec
    inet6 fe80::e01d:306f:31d:d2ba/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

发现有一个叫做enp3s0的网卡,这种以en(Enthnet) 开头的就是我们的有线网卡了,你的机器里编号可能不一样,只要记住是en开头的就行了。

修改它的配置文件ifcfg-enp3s0:
执行操作:

vi /etc/sysconfig/network-scripts/ifcfg-enp3s0

找到:
ONBOOT=no
改为:
ONBOOT=yes


存盘退出

然后重启网络即可:

systemctl restart network

尝试一下ping baidu.com,一般来说网络就通了。
虽然不是必须,但是网络通了之后我建议你更新一次软件库,执行操作:

yum update

三. 通过hostapd+网桥共享上网
如果你的有线网卡是通过静态IP上网而不需要拨号上网的话,那么就不需要dhcp和pppoe server了,只需要架设一座网桥即可,简单地说就是建一座桥,桥的一边是能上网的有线网卡,桥的对岸是不能上网的无线网卡,无线网卡通过网桥访问外网,描述得不是很专业,但大概也就这么回事,不深究。

1. 首先是安装相关软件:

yum install bridge-utils (安装网桥)
yum install epel-release (官方软件仓库是没有hostap这个包的,还要先把epel源安装上)
yum install hostapd (安装hostapd)

2. 然后用ip addr查看一下无线网络的名字,步骤跟有线网卡一样
 

【坑提示】无线网卡是以wl(Wireless)+ 编号开头的,如果输入ip addr后看不到无线网卡,那么再输入iw dev命令看看,如果什么都不显示,或者显示driver nl80211 not found, 那么比较麻烦了,说明你的无线网卡没有被驱动起来,你得想办法找到相应芯片的驱动才行,详细流程可以参考我的另一篇博客:https://blog.csdn.net/rockage/article/details/90463528但是这篇也只就仅仅是一篇参考,除非你的无线网卡芯片刚好是RTL8812AU,否则还是需要你自己想办法的。

3. 修改hostapd的配置文件:

vi /etc/hostapd/hostapd.conf

改成这样子即可(可以整体复制粘贴,唯一要修改的地方就是你的无线网卡名称):

ctrl_interface=/var/run/hostapd
ctrl_interface_group=wheel
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
driver=nl80211

wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

#热点名:
ssid=CentOSAir
#密码:
wpa_passphrase=12345678
#无线网卡名字:
interface=wlp0s29u1u2
#这一行是关键,表示hostap通过网桥br0访问外网
bridge=br0
hw_mode=g
channel=6


存盘退出。

4. 修改有线网卡(即能上外网那块网卡)的配置文件:

vi /etc/sysconfig/network-scripts/ifcfg-enp3s0

在文件末尾加一行:
BRIDGE=br0


存盘退出。

【衍生阅读】如果你想用静态ip取代dhcp的话,可以这样设置:

BOOTPROTO=dhcp 这一行改为:


BOOTPROTO=static
IPADDR=192.168.1.3
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=114.114.114.114
# DNS主服务器
DNS2=114.114.115.115 


存盘退出。
DNS服务器可以用第三方的,比如114,也可以用运营商提供的,这里不赘述。

5. 创建网桥
创建网桥可以用nmcli命令,也可以用文件的方式,我们选择后者:

vi /etc/sysconfig/network-scripts/ifcfg-br0

输入以下内容:


DEVICE="br0"
BOOTPROTO="dhcp"
NM_CONTROLLED="yes"
ONBOOT="yes"
TYPE="Bridge"


存盘退出。

6. 重启系统。

reboot 

7. 用ip addr或者nmcli con 命令可以看到,我们的网桥br0已经建好了。

NAME                        UUID                                                TYPE          DEVICE
Bridge br0       d2d68553-f97e-7549-7a26-b34a26f29318  bridge        br0
enp13s0         1256acfc-8268-4d03-81e4-60091e5700f1   ethernet     enp13s0
wlp0s29u1u2  5dfd0bb3-8248-4c76-a4df-7148475b584b  generic      wlp0s29u1u2

8. 开启hostapd,输入命令:

systemctl restart hostapd 

如无意外,系统不会报错,如果什么提示都没有,那么恭喜你,你离成功不远了。

【衍生阅读】如果你需要每次开机自动启动hostapd的话,输入这条命令:systemctl enable hostapd 事实上,所有的CentOS服务,如果要开机自动启动都是这个套路,相应的,如果要取消重启,则是这条命令:systemctl disable hostapd 

9. 摸出你的手机,打开WIFI,应该能看到一个叫做CentOSAir的热点,然后输入密码12345678,恭喜成功!


【坑提示】

如果不成功,我们需要用systemctl status hostapd.service来查看错误信息,按照严重级别,主要有以下几个坑:

1. 上网路由器本身没开启dhcp

因为我们使用的网桥是直通路由器的,如果路由器本身没开启dhcp那么就分配不到IP,这种情况比较简单,要么开启路由器的dhcp功能,要么在我们的无线客户端(比如说手机)连通后手动设置同网段的IP以及网关,DNS等。

2. 确保无线网卡没有被 NetworkManager 接管

这个也不麻烦,输入:nmcli device show,如果显示GENERAL.STATE:   10 (unmanaged),表示未接管,说明OK!因为hostapd如果要正常运转,系统自带的网络管理是不能介入的,必须把无线网卡的配置交由hostapd管理,如果此处并不是显示为10,就需cd/etc/sysconfig/network-scripts,把相应的无线网卡配置文件删除才行。

3. 飞行模式坑

有些机器有一键关闭无线电的功能,即所谓飞行模式,这个开关有软锁和硬锁之分,用rfkill list命令可以查看,软开关倒是好办,用 rfkill unblock 无线网卡名关闭即可。这个坑真正严重的地方是rfkill不能关闭硬件开关,硬件开关必须手动操作,但某些笔记本要么压根就没有这个开关,要么是那种需要用Fn+功能键来控制的键盘开关,一旦系统认为你是锁定状态就麻烦了,我的笔记本就遇到这个问题了,按下FN+功能键无效,无意中恢复了一次BIOS默认设置,竟然神奇般地解锁了!我非常确定BIOS里面没有任何一项设置是与此相关的,但是为什么恢复BIOS设置又能对它生效呢?这个坑我没法从理论上给出解释!但无论如何,如果不幸掉进这个坑,不妨将BIOS恢复到默认一次,没准就跳出来了。

4. 驱动程序坑

如果错误信息是 "nl80211 driver initialization failed.",这就比较悲催了,说明你的无线网卡不支持AP模式,这个等于直接判死刑,还有一种情况是虽然网卡本身有AP模式,但是没有官方驱动,于是你想尽办法用第三方驱动装上了,发现尽管可以作为无线路由客户端正常上网,但是还是无法驱动hostap(笔者手头上有一个8812AU的无线网卡就是这种情况),这个等于判死缓,虽然有办法解决,但是非常麻烦!碰到这两种情况我建议大家还是再买一块能兼容官方驱动的无线网卡吧,毕竟人生苦短,经不起不折腾。判断方法很简单,插上之后,输入iw dev能有显示,iw list命令后,在“ Supported interface modes”里面有"AP"字眼的,就表示能用!

我在另一篇攻略里详细记录了这个情况,如果不幸你也属于此列,可以参考一下我的这篇博客:

https://blog.csdn.net/rockage/article/details/90463528

如果实在没头绪,就用调试模式运行hostap,那样信息会更多一些,看看到底哪个部分出问题了,再自行百度或谷歌一下吧,以调试方式运行hostap命令: /usr/sbin/hostapd /etc/hostapd/hostapd.conf -d


以上设置笔者参阅了不少文章,基本上都没用,只有这篇是正解:

http://jasonmaur.com/hostapd-centos-6/

以下这篇虽然没成功,但是帮助非常大:

https://blog.51cto.com/laoding/1697017

在此向两位作者表示感谢!!

猜你喜欢

转载自blog.csdn.net/rockage/article/details/90374771