我的另类软路由方案——Alpine Linux改造

2021-12-02 15:57:34 107点赞 249收藏 78评论

创作立场声明:不为别的,只为分享自己的一些经验收获

起因

现在说到软路由,好像大家第一个想到的就是 OpenWRT,OpenWRT 的确是很好用,但好奇心作祟,既然 OpenWRT 是一款 Linux 发行版,那么如果使用别的 Linux 发行版是不是也能获得相同的功能?答案当然是肯定的,由于使用过不少 Linux 发行版,思考这个问题的时候第一个想到的发行版就是 Alpine Linux。那么就用 Alpine Linux 搭建一个软路由吧,记录一下过程,帮大家填坑。

什么是Alpine Linux

Alpine Linux 是一个由社区开发的基于 musl 和 BusyBox 的 Linux 操作系统,该操作系统以安全为理念,面向 x86 路由器、防火墙、虚拟专用网、IP电话盒及服务器而设计。现在常见于容器化技术,作为基础镜像被广泛使用。

Alpine LinuxAlpine Linux

系统的安装过程我就不写了,很简单,按照屏幕提示进行操作就可以了,如果还有不明白的地方可以参考官方的 wiki

软路由配置

以下的配置对于大部分 Linux 发行版同样适用,最大的差异可能只是不同的发行版的配置文件位置和语法上存在一些不同,这次同样是在 J4125 小主机的虚拟机上进行的配置

动态 IP 上网

  • 配置网卡
    软路由一般都需要两个网卡(单臂路由这样的情况暂时不考虑),那么先分配两个网卡给 Alpine,之后就是把一个设置成 WAN 口,一个设置成 LAN 口,主要的配置文件是 /etc/network/interface,打开之后可以看到这样的配置信息,网口的信息主要取决于安装时候是否对网卡进行了初始化,我在安装的过程中只启用一张网卡,所以现在只能看到 eth0 的配置信息,那么就将 eth0 作为 WAN 口吧,一般的上网模式主要有三种,动态 IP 上网,固定 IP 上网,或者拨号上网,既然系统已经通过 DHCP 自动获取到了 IP,那么就先以动态 IP 为例吧,直接套用初始的 DHCP 配置,然后把 eth1 作为 LAN 口,直接将 LAN 口的 IP 设置成 192.168.1.1,子网掩码等信息如下图所示:
    初始设置初始设置
    添加LAN口信息添加LAN口信息
    保存退出之后使用 service networking restart 命令重启网络,网卡的配置就生效了
    网卡信息网卡信息

  • 启用 DHCP 和 DNS
    家庭环境中实际的带机量并不是很多,那么 DHCP 和 DNS 的功能并不需要太复杂,直接使用 dnsmasq 进行配置即可,安装也很简单,apk add dnsmasq 就可以了,默认的配置文件是 /etc/dnsmasq.conf,但是为了方便管理,建议将功能分割成两个不同的配置文件,此时就可以在 dnsmasq 默认的配置文件目录 /etc/dnsmasq.d/ 下分别创建两个配置文件,分别是 dhcp.confdns.conf ,顾名思义,这两个配置文件分别控制系统的 DHCP 和 DNS 功能:

    dhcp.conf
    响应网卡
    interface=eth1
    bind-interfaces
    地址分配范围
    dhcp-range=192.168.1.100,192.168.1.200,8h
    网关地址
    dhcp-option=3,192.168.1.1
    dns地址
    dhcp-option=6,192.168.1.1
    最大可分配数量
    dhcp-lease-max=64
    记录地址分配情况
    dhcp-leasefile=/etc/dnsmasq.lease

    dns.conf
    监听地址,可以监听多个,用逗号分隔
    listen-address=192.168.1.1,127.0.0.1
    向上查询的服务器地址
    server=114.114.114.114
    server=8.8.8.8
    同时向 dns 服务器发起查询
    all-servers
    忽略本地 dns 设置
    no-resolv
    也不要检测 /etc/resolv.conf 的变化
    no-poll
    只响应完整域名查询
    domain-needed
    缓存的查询数量
    cache-size=2048
    重启后清空缓存
    clear-on-reload

    dnsmasqdnsmasq
    配置完成之后记得使用 dnsmasq -test 测试一下是否有问题,没有问题的话就可以将 dnsmasq 添加到启动项了 rc-update add dnsmasq
    测试测试

  • 防火墙规则
    Apline 上常用的防火墙配置工具主要是 iptables 和 nftables ,这次就以 iptables 为例,系统默认没有安装,安装直接执行 apk add iptables,初始状态系统是没有防火墙规则的,可以按照需求进行添加,本次的目的主要是实现一个软路由的功能,那么需要执行的命令如下:

    清空所有现有规则
    iptables -F
    iptables -X
    iptables -t nat -F
    iptables -t nat -X
    iptables -t mangle -F
    iptables -t mangle -X

    开放 ssh 端口并允许 LAN 口的所有连接
    iptables -A INPUT -i eth0 -p tcp —dport 22 -j ACCEPT
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A INPUT -i eth1 -j ACCEPT
    iptables -A INPUT -m state —state ESTABLISHED,RELATED -j ACCEPT

    转发
    iptables -A FORWARD -i eth1 -s 192.168.1.0/24 -j ACCEPT
    iptables -A FORWARD -i eth0 -d 192.168.1.0/24 -j ACCEPT

    地址伪装,如果固定 IP的 话可以使用 iptables -t nat -A POSTROUTING -o eth0 -j SNAT —to-source xxx.xxx.xxx.xxx 效率会更加高一点
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

    设置默认的规则
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -P OUTPUT ACCEPT

    之后需要将这些规则固化,使用 service iptables save 进行保存,并使用 rc-update add iptables 命令将 iptbales 设置成开机自启动;
    iptables规则iptables规则

  • 开启转发
    /etc/sysctl.d 目录下创建 route.conf,文件名随意,写入 net.ipv4.ip_forward=1 ,执行 sysctl -p /etc/sysctl.d/route.conf 使其生效;
    开启转发开启转发

  • 重启系统
    重启系统,使配置生效。

固定 IP 上网

  • 网卡配置
    固定 IP 相比于动态 IP 而言,最大的差异主要是 WAN 口的 IP 配置,由 DHCP 变成了确切的 IP 地址,此处对比一下我注释掉的配置信息就知道了;
    固定IP固定IP

  • DNS 配置
    此处的配置主要是为了解决 DNS 解析问题,直接在 /etc/resolv.conf 文件中添加 nameserver 172.16.1.1 即可,DNS 服务器可以自行选择,我直接使用了我的路由器的地址;

其他的配置和动态 IP 完全一样,我就不做赘述了。

拨号上网

相比于动态 IP 和固定 IP,拨号上网就要稍微复杂一点了,Alpine 上使用 ppp-pppoe 作为拨号工具,需要对其进行一些设置才能使用,参照官方的文档

  • 安装组件
    apk add ppp-pppoe, 系统会自动将需要使用的组件全部安装上;

  • 启用内核支持模块
    modprobe pppoe,如果没有问题的话可以通过 lsmod |grep pppoe 查看是否已经加载成功,为了能够在开机的时候就将模块加载上,执行 echo "pppoe" > /etc/modules-load.d/pppoe.conf 添加进开机加载列表,这个文件名也是可以随意设置的;
    pppoepppoe

  • 配置文件
    需要修改的配置文件主要有三个:
    首先需要在 /etc/ppp/peers/ 目录下创建一个文件,文件名可以任意,但必须记住,后续会用到,因为我使用的是电信的网络,那就直接叫做 chinanet 好了,写入如下内容:

    /etc/ppp/peers/chinanet
    拨号的账号,一般都是固话号码
    user “xxxxxx”
    plugin rp-pppoe.so
    指定拨号的网卡
    eth0
    不需要指定IP地址
    noipdefault
    使用运营商提供的DNS服务器,如果想要手动设置,那么就不要添加这一条,直接在/etc/resolv.conf中添加自己的DNS服务器即可
    usepeerdns
    自动配置路由和网关
    defaultroute
    断线重连
    persist
    不需要远程认证,这个不用管
    noauth

    pppoe配置pppoe配置

    拨号上网一般都是有密码的,那么密码在哪里添加呢?一般情况下是在 /etc/ppp/chap-secrets 文件中,写上用户名和密码就可以了,记得加上双引号;

    /etc/ppp/chap-secrets
    “username” * “password”

    pppoe密码pppoe密码

    最后就是修改一下网卡配置了,拨号上网会生成一个虚拟网卡承载拨号获取到的 IP,那么配置文件如图所示:
    网卡配置网卡配置

    这个部分的 chinanet 对应 /etc/ppp/peers/chinanet,使用什么文件名就在此时使用对应的参数

  • 防火墙配置修改
    相比于动态 IP 和 固定 IP,防火墙规则只需要将原来规则中的 eth0 替换成 ppp0 即可,其他的配置和动态 IP 完全一样,注意一下网卡名称就好了;

  • 重启系统
    重启系统之后,系统应该就会自动拨号成功,获取到 IP了。

简单测试

重启系统后就可以进行简单的测试了,两个网口都插上网线,看看 LAN 口连接的设备能不能正常的获取到网址,如果配置没有错误的话就可以当成一台软路由来进行使用了。

拨号成功拨号成功

笔记本获取IP笔记本获取IP

笔记本查询外网IP笔记本查询外网IP

总结

Alpine Linux 配置成软路由的过程大致上就是这样的,功能虽然简单,但 Linux 本身就是一个自由度很高的系统,只要你稍加扩展,很多大家都懂的功能都可以实现,这里就不展开说明了,有兴趣的朋友可以去研究一下。

展开 收起

Xiaomi 小米 AX3000T 双频3000M 家用千兆Mesh路由器 Wi-Fi 6 白色 单个装

Xiaomi 小米 AX3000T 双频3000M 家用千兆Mesh路由器 Wi-Fi 6 白色 单个装

99元起

Xiaomi 小米 BE6500 Pro 双频6500M 家用千兆Mesh无线路由器 Wi-Fi 7

Xiaomi 小米 BE6500 Pro 双频6500M 家用千兆Mesh无线路由器 Wi-Fi 7

535元起

Ruijie 锐捷 雪豹 X30E 双频3000M 家用千兆Mesh无线路由器 Wi-Fi 6 白色 单个装

Ruijie 锐捷 雪豹 X30E 双频3000M 家用千兆Mesh无线路由器 Wi-Fi 6 白色 单个装

159元起

ZTE 中兴 AX3000 巡天版 双频3000M 家用千兆Mesh无线路由器 Wi-Fi 6 单个装 白色

ZTE 中兴 AX3000 巡天版 双频3000M 家用千兆Mesh无线路由器 Wi-Fi 6 单个装 白色

164元起

Xiaomi 小米 BE3600 2.5G版 3600M 双频千兆家用无线路由器 Wi-Fi 7 白色

Xiaomi 小米 BE3600 2.5G版 3600M 双频千兆家用无线路由器 Wi-Fi 7 白色

229元起

Redmi 红米 AX6000 双频5952M 家用千兆Mesh无线路由器 Wi-Fi 6 单个装黑色

Redmi 红米 AX6000 双频5952M 家用千兆Mesh无线路由器 Wi-Fi 6 单个装黑色

329元起

ASUS 华硕 RT-BE88U 双频7200M 家用Mesh无线路由器 Wi-Fi 7 黑色 单个装

ASUS 华硕 RT-BE88U 双频7200M 家用Mesh无线路由器 Wi-Fi 7 黑色 单个装

1999元起

Xiaomi 小米 AX6000 双频6000M 家用千兆Mesh无线路由器 Wi-Fi 6 单个装 黑色

Xiaomi 小米 AX6000 双频6000M 家用千兆Mesh无线路由器 Wi-Fi 6 单个装 黑色

299元起

HUAWEI 华为 BE3 Pro 双频3000M 千兆家用路由器 Wi-Fi 7 黑色

HUAWEI 华为 BE3 Pro 双频3000M 千兆家用路由器 Wi-Fi 7 黑色

253.55元起

Xiaomi 小米 BE7000 三频千兆Mesh无线路由器 Wi-Fi 7

Xiaomi 小米 BE7000 三频千兆Mesh无线路由器 Wi-Fi 7

406元起

HUAWEI 华为 AX2 Pro 双频1500M 家用千兆无线路由器 Wi-Fi 6 白色

HUAWEI 华为 AX2 Pro 双频1500M 家用千兆无线路由器 Wi-Fi 6 白色

132元起

ZTE 中兴 问天BE7200Pro+ 双频7200M 家用千兆Mesh无线路由器 WiFi 7 黑色

ZTE 中兴 问天BE7200Pro+ 双频7200M 家用千兆Mesh无线路由器 WiFi 7 黑色

579元起

TP-LINK 普联 BE5100 双频5100M 家用千兆Mesh无线路由器 Wi-Fi 7 黑色 单个装

TP-LINK 普联 BE5100 双频5100M 家用千兆Mesh无线路由器 Wi-Fi 7 黑色 单个装

279元起

TP-LINK 普联 飞流系列 TL-XDR5480 易展Turbo版 双频5400M 家用千兆Mesh无线路由器 WiFi 6 单个装 灰色

TP-LINK 普联 飞流系列 TL-XDR5480 易展Turbo版 双频5400M 家用千兆Mesh无线路由器 WiFi 6 单个装 灰色

369元起

ZTE 中兴 巡天AX3000Pro+ 双频3000M 家用千兆Mesh无线路由器 Wi-Fi 6 白色 单个装

ZTE 中兴 巡天AX3000Pro+ 双频3000M 家用千兆Mesh无线路由器 Wi-Fi 6 白色 单个装

269元起

HUAWEI 华为 Q6 网线版 双频3000M 千兆Mes无线分布式路由器 Wi-Fi 6 一母三子装 白色

HUAWEI 华为 Q6 网线版 双频3000M 千兆Mes无线分布式路由器 Wi-Fi 6 一母三子装 白色

469元起
78评论

  • 精彩
  • 最新
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
249
扫一下,分享更方便,购买更轻松