我的另类软路由方案——Alpine Linux改造
创作立场声明:不为别的,只为分享自己的一些经验收获
起因
现在说到软路由,好像大家第一个想到的就是 OpenWRT,OpenWRT 的确是很好用,但好奇心作祟,既然 OpenWRT 是一款 Linux 发行版,那么如果使用别的 Linux 发行版是不是也能获得相同的功能?答案当然是肯定的,由于使用过不少 Linux 发行版,思考这个问题的时候第一个想到的发行版就是 Alpine Linux。那么就用 Alpine Linux 搭建一个软路由吧,记录一下过程,帮大家填坑。
什么是Alpine Linux
Alpine Linux 是一个由社区开发的基于 musl 和 BusyBox 的 Linux 操作系统,该操作系统以安全为理念,面向 x86 路由器、防火墙、虚拟专用网、IP电话盒及服务器而设计。现在常见于容器化技术,作为基础镜像被广泛使用。
Alpine 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口信息
保存退出之后使用service networking restart
命令重启网络,网卡的配置就生效了
网卡信息启用 DHCP 和 DNS
家庭环境中实际的带机量并不是很多,那么 DHCP 和 DNS 的功能并不需要太复杂,直接使用 dnsmasq 进行配置即可,安装也很简单,apk add dnsmasq
就可以了,默认的配置文件是/etc/dnsmasq.conf
,但是为了方便管理,建议将功能分割成两个不同的配置文件,此时就可以在 dnsmasq 默认的配置文件目录/etc/dnsmasq.d/
下分别创建两个配置文件,分别是dhcp.conf
和dns.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.leasedns.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-reloaddnsmasq
配置完成之后记得使用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规则开启转发
在/etc/sysctl.d
目录下创建route.conf
,文件名随意,写入net.ipv4.ip_forward=1
,执行sysctl -p /etc/sysctl.d/route.conf
使其生效;
开启转发重启系统
重启系统,使配置生效。
固定 IP 上网
网卡配置
固定 IP 相比于动态 IP 而言,最大的差异主要是 WAN 口的 IP 配置,由 DHCP 变成了确切的 IP 地址,此处对比一下我注释掉的配置信息就知道了;
固定IPDNS 配置
此处的配置主要是为了解决 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
添加进开机加载列表,这个文件名也是可以随意设置的;
pppoe配置文件
需要修改的配置文件主要有三个:
首先需要在/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
不需要远程认证,这个不用管
noauthpppoe配置
拨号上网一般都是有密码的,那么密码在哪里添加呢?一般情况下是在
/etc/ppp/chap-secrets
文件中,写上用户名和密码就可以了,记得加上双引号;/etc/ppp/chap-secrets
“username” * “password”pppoe密码
最后就是修改一下网卡配置了,拨号上网会生成一个虚拟网卡承载拨号获取到的 IP,那么配置文件如图所示:
网卡配置这个部分的 chinanet 对应
/etc/ppp/peers/chinanet
,使用什么文件名就在此时使用对应的参数防火墙配置修改
相比于动态 IP 和 固定 IP,防火墙规则只需要将原来规则中的 eth0 替换成 ppp0 即可,其他的配置和动态 IP 完全一样,注意一下网卡名称就好了;重启系统
重启系统之后,系统应该就会自动拨号成功,获取到 IP了。
简单测试
重启系统后就可以进行简单的测试了,两个网口都插上网线,看看 LAN 口连接的设备能不能正常的获取到网址,如果配置没有错误的话就可以当成一台软路由来进行使用了。
拨号成功
笔记本获取IP
笔记本查询外网IP
总结
Alpine Linux 配置成软路由的过程大致上就是这样的,功能虽然简单,但 Linux 本身就是一个自由度很高的系统,只要你稍加扩展,很多大家都懂的功能都可以实现,这里就不展开说明了,有兴趣的朋友可以去研究一下。
宫保鸡丁盖浇饭
校验提示文案
海那边的狐狸
校验提示文案
weyes
校验提示文案
hughdna
校验提示文案
violente
校验提示文案
easegame
校验提示文案
[已注销]
校验提示文案
幼稚园保安
校验提示文案
yinhao
校验提示文案
值友9918046395
校验提示文案
fs20
校验提示文案
ProgPostHead
校验提示文案
OnTheRoadx
校验提示文案
liloew
校验提示文案
ccms
校验提示文案
shuu3
校验提示文案
rkuk
校验提示文案
雨落枫叶
校验提示文案
值友6395480263
校验提示文案
值友8553463038
校验提示文案
fengbj
校验提示文案
什么得捡漏
AlpineLinux配置宽带拨号上网_岚漾忆雨的博客-CSDN博客
去看看
校验提示文案
塞狗反哈_撒紧
校验提示文案
值友7406750377
校验提示文案
RubbishZhYic
纯linux方案对于开发板或者有其他用途的设备还是相当有用的
校验提示文案
油炸土豆丝
校验提示文案
A2100
校验提示文案
[已注销]
校验提示文案
MoonStones
校验提示文案
leungwing
校验提示文案
敲和尚的小木鱼
校验提示文案
墨意奥妙
校验提示文案
蓝色精英S
校验提示文案
Meer_Stern
校验提示文案
Everglon
纯软路由的话手撸环境相比openwrt并没有任何优势啊
校验提示文案
qaqaqaq
校验提示文案
值友9144569810
校验提示文案
easegame
校验提示文案
ADmz
校验提示文案
一点零一
校验提示文案