BLOG
Enjoy when you can, and endure when you must.
香蕉派(BPI)的又一次蜕变 —— 用 Linux 自主打造路由器

经过了一个多月的逐步尝试,我的香蕉派已经工作得很好了。其实在购买之初,我的想法就是将其打造为一个“家庭网关”来满足各种个性化的需求,所以首要目标就是将其变身为一个路由器。刚开始自然而然的想到了 OpenWrt 这种成熟的系统作为基础。不过在一段时间的折腾之后就发现,OpenWrt 固然好用,但因为它是一个极小化系统,要想实现一些其他的功能,虽说可以通过 SDK 来进行交叉编译,但过程着实比较繁杂,其他的一些如针对 GPIO 的操作也并不很方便。思考了许久之后,终于还是下定决心直接用 Linux 系统来打造路由功能,虽然在这上面花的功夫多一些,但在另一些方面则省事不少,也可以把对于开发板来说还算强大的硬件真正用起来,也算是一种权衡。

 

准备工作

首先是系统的选择,我的型号是 M1+,支持的系统还是挺多的。在尝试了多个之后最终选择了 Bananian,为 BPI 专属打造的 Linux 系统。Bananian 整体感觉比较纯净,并且在 HDMI 为连接的情况下,会默认不启动图形化资源,这节约出来的 100 来 M 内存还是能做不少事情的。当然,还有更重要的一点就是具有专属的内核支持,这样会让一些事情变得容易许多。

然后是一些必要的软件的选择。要想将 Linux 变身为路由器,以下几个方面是必须的:

  • 局域网内 DHCP 的支持,使接入设备能自动获取到 IP
  • 提供 DNS 服务以加快 DNS 查询速度(缓存)
  • 安全与转发控制

目前我用以下几个软件满足这些需求:
    • isc-dhcp-server:Debian 下提供 DHCP 服务
    • dnsmasq:提供 DNS 服务
    • iptables:安全与转发控制
    • shadowsocks-libev + chinadns:可选的组件,具体的就不说了

 

华丽的变身

接下来要做的就是各服务的安装与配置。本文仅涉及一些针对性的说明(而且比较主观化),如果需要参考具体的配置,我都列出了至少一个个人感觉还不错的文章或文档作为推荐。

 

isc-dhcp-server

该服务可以通过 apt 直接安装,在最基本的配置中以下几点值得注意:

  • /etc/default/isc-dhcp-server 中注意配置 INTERFACES 以指定为哪些网络端口提供 DHCP 支持
  • /etc/dhcp/dhcpd.conf 中则是针对 DHCP 服务的配置,如 option domain-name-servers 配置所分配的 DNS Servers、default-lease-time 和 max-lease-time 配置租约时长,还有一个最基本的就是地址池的配置,如:
subnet 192.168.68.0 netmask 255.255.255.0 {
    range 192.168.68.20 192.168.68.239;
    option routers 192.168.68.1;
    option broadcast-address 192.168.68.255;
}

具体的配置可以参考这篇文章:https://linux.cn/article-6793-1.html

 

dnsmasq

该服务同样可以通过 apt 直接安装。值得注意的是,dnsmasq 本是集 DHCP 与 DNS 于一身,因前面已经使用 dhcpd 来提供 DHCP 服务了,为防止冲突,应在 dnsmasq 中将 DHCP 功能关闭。dnsmasp 的配置可以参考以下文档:https://wiki.archlinux.org/index.php/Dnsmasq

 

iptables 与内核 IP 转发的支持

Linux 发行版默认情况下是不开启 IP 转发功能的。而将 Linux 作为路由使用的时候需要该功能的支持。因此要注意将其打开,修改 /etc/sysctl.conf 中 net.ipv4.ip_forward 为 1,再执行 sysctl -p 即可。然后是开启路由转发,这样才能当成一个网关,达到局域网内的设备共享上网的目的。这就利用 iptables 的 POSTROUTING 来达到该目的。

 

shadowsocks-libev + chinadns

这个就不多介绍了,能看懂就一定能懂。这两个软件的安装相对麻烦一些,最好选择自己编译。要注意先准备好必要的组件,特别是 shadowsocks-libev,以下的组件是必须的:

build-essential autoconf libtool libssl-dev gawk debhelper dh-systemd init-system-helpers pkg-config

其中的 dh-systemd 及 init-system-helpers,如果是 Debian 7.X 系统,还需启用 debian-backports。编译要涉及到系统内核,这时候 Bananian 专用的 linux-header 就派上用场了,可以通过 apt 直接安装。接着编译 deb 包。chinadns 的编译要简单很多,直接切入主题即可。

安装好后,要想真正利用起来,还会涉及到很多工序,这里我就不饶述了,可参考这篇文章:https://cokebar.info/archives/962

 


自己动手用 Linux 来打造路由器确实会涉及到很多东西,过程繁杂。上面所提到的也只是冰山一角。但反过来说,自主的东西就具有更好的拓展性和定制性。只有想不到,没有做不到。最后 SHOW 一张我目前的 BananaPi 的靓照:

COMMENTS
LEAVE COMMNT