alpine需要准备的材料:
alpine-extended-3.15.4-x86_64.iso(支持 x86_64 和 i686,选择哪个取决于你所使用的硬件,一般建议使用 x86_64,现在很多应用都只支持 x86_64,比如 docker)
2个 U 盘,其中一个已经安装好 Ventoy,另外一个用于最终的安装,所以里面请不要存放重要的文件
J4125主机(不需要硬盘)
将系统镜像写入 U 盘,此处依然使用 Ventoy,只需要将 iso 文件存储在 U 盘中就可以了,使用 U 盘引导后就可以看到刚刚丢进去的镜像了
Ventoy
跑过一串加载信息之后,就正式启动系统了,使用 root 账户进行登录了,默认情况下无密码
boot
login
之后使用 df -h 命令查看分区的挂载情况,此处需要注意 /media/dm-0 这个挂载点,这个相当于是整个安装镜像的挂载目录,后续安装所需要的文件都在这个目录下,记住其命名,后续会用到
df
此时就可以将另一个 U 盘插上了,插上后直接使用 fdisk -l 查看设备名,确定为 sdb
fdisk
一般设备的命名按照 a b c d 这样的字母顺序依次进行,所以后插入的设备肯定排在现有设备名之后
确定设备名之后直接使用 fdisk /dev/sdb 进入分区操作,下述操作清空了所有分区,然后创建了两个分区,第一个分区2G,作为引导分区,另一个分区使用剩余空间
part
分区使用的指令及说明如下所示:
m -> 回车 # 显示工具说明
o -> 回车 # 新建主引导,相当于清空分区信息
n -> 回车 # 新建分区
p -> 回车 # 设置分区类型
p 是 primary的意思,即主分区,e 是 extended的意思,即扩展分区
1 -> 回车 # 设置分区号
1 是第一个分区,2 是第二个分区,以此类推,需要注意的是现在使用的是 *mbr* 主引导,所以主分区数量不能超过4,一般情况下最多使用前三个分区号,后续的一个分区使用扩展分区,然后在扩展分区中创建新的分区,一般分区号从5起始
回车 # 扇区起始位置,默认即可
+2G -> 回车 # 设置分区大小
此处设置为2G,其实1G也够了
n -> 回车 # 建立第二个分区
p -> 回车 # 设置分区类型
2 -> 回车 # 设置分区号为2
a -> 回车 # 激活分区
类似于 Windows 安装系统时候将 C 盘设置为活动分区,如果不激活的话讲不能引导,切记、切记、切记
1 -> 回车 # 激活分区号为1
p -> 回车 # 查看分区信息
注意此时第一个分区上有个 “*”,表示此分区已被激活
w -> 回车 # 将修改写入磁盘
不过当执行后续的格式化操作时,系统会提示找不到新创建的分区,在 /dev 目录下亦没有新创建的sdb1 和 sdb2
sda1
这个时候插拔一下新插入的 U盘,让系统重新识别一下即可,此处需要注意使用 partprobe 命令并没有什么用,还是插拔一下实在
格式化两个分区,直接使用 fat32 文件系统 mkdosfs -F32 和 mkfs.vfat 都可以,并使用 setup-bootable 命令将系统写入引导分区,注意系统镜像的挂载点为 /media/dm-0
bootable
接下来就可以拔掉第一个 U 盘,直接重启系统,使用第二个 U 盘进行引导,使用 root 账户登录,查看一下分区挂载情况,可以看到镜像目录名变成了 /media/sda1 ,容量也是2G
new usb
在进行安装之前,先将 U 盘上的第二个分区挂载一下,方便后续安装识别
mkdir /media/sda2
mount /dev/sda2 /media/sda2
使用 setup-alpine 进行最后的系统安装和配置
具体的安装步骤如下:
Select keyboard layout: [none] -> 回车
Enter system hostname (fully qualified form,e.g. ‘foo.example.org’) [localhost] router -> 回车
将其命名为 router
Which one do you want to initialize? (or ‘?’ or ‘done’) [eth0] -> 回车
初始化网卡 eth0
Ip address for eth0? (or ‘dhcp’,‘none’,‘?’) [dhcp] -> 回车
自动获取
done -> 回车
不对后续网卡进行配置
Do you want to do any manual network configuration? (y/n) [n] -> 回车
不进行手动配置
New password: xxxx -> 回车
输入密码
Retype password: xxxx -> 回车
再次输入密码
Which timezone are you in? (‘?’ for list) [UTC] Asia/Shanghai -> 回车
设置时区为上海,即东八区时间,默认为协调时间时
HTTP/FTP proxy URL? (e.g. ‘http://proxy:8080‘,or ‘none’) [none] -> 回车
不设置代理
Which NTP client to run? (‘busybox’,‘openntpd’,‘chrony’ or ‘none’) [chrony] -> 回车
设置为 chrony,即时间同步服务
Enter mirror number (1-72) or URL to add (or r/f/e/done) [1] f -> 回车
自动选择最优源
Which SSH server? (‘openssh’,‘dropbear’ or ‘none’) [openssh] -> 回车
ssh 服务选择为 openssh
No disks available. Try boot media /media/sda1? (y/n) [n] -> 回车
使用 /media/sda1 进行引导
Enter where to store configs (‘floppy’,‘sda1’,‘sda2’,‘usb’ or ‘none’) [sda2] -> 回车
将配置文件存储在 /media/sda2 下,安装前需要先进行挂载,否则无法自动识别
Enter apk cache directory (or ‘?’ or ‘none’) [/media/sda2/cache] -> 回车
将 apk 缓存文件存储在 /media/sda2/cache 下
忽略最后的提示
上述的操作结束之后,还需要最后一步操作 lbu commit -d 将配置信息写入 /media/sda2,系统将在下次启动的时候调用此处的 router.apkovl.tar.gz 完成系统的初始化,切记不要忘了这一步,当然,如果哪天你想清空配置,也可以将这个文件直接删除,重启之后就恢复默认配置了
apkvovl
重启后登录系统,通过挂载信息发现,系统的根目录使用的是 tmpfs,相当于挂载在内存上,如果你有兴趣尝试一下的话,完全可以拔掉 U 盘尝试下会不会挂
installed
软路由配置
完整的配置可以参考我上一篇分享我的另类软路由方案——Alpine Linux改造创作立场声明:不为别的,只为分享自己的一些经验收获起因现在说到软路由,好像大家第一个想到的就是OpenWRT,OpenWRT的确是很好用,但好奇心作祟,既然OpenWRT是一款Linux发行版,那么如果使用别的Linux发行版是不是也能获得相同的功能?答案当然是肯定的,由于使用过不少Linux发行版干脆面爱洗手| 赞106 评论71 收藏239查看详情以下主要介绍一些做出改动的地方:
1.通过网桥合并多个网口
apk add bridge 安装网桥组件,之后编辑 /etc/network/interfaces 文件,将后续的三个网口合并为一个网桥作为 LAN 使用bridge
interface
service networking restart 重启网络,通过 ip link 命令就可以查询到新增加的网桥信息了
考虑到一般的 x86 设备都不会配置专用的转发芯片,建立网桥的性能自然无法和交换机相比,局域网中设备较多,或者经常需要复制文件的用户,建议还是配置一台多口的交换机以提高交换性能
2.通过 dnsmasq 过滤部分广告
dnsmasq 作为轻量的 DNS 服务器,自然可以通过屏蔽一些广告域名来减少网页上广告,但具体的效果取决于网页上的元素和广告的加载方式,加上这个功能总比不加强,当然,也有可能只是图个心理安慰而已DNS 和 DHCP 的配置不需要有多少改变,只需要在 /etc/dnsmasq.d 目录下新增一个过滤的配置文件,这个时候很多人就要纠结了,网上的广告那么多,难道要自己收集那些域名,想想就觉得可怕,这肯定是不现实的,网上已经有现成的别人收集好的配置,我个人使用了这个项目 anti-ad:
anti-AD
只需要将 anti-ad-for-dnsmasq.conf 文件下载到 /etc/dnsmasq.d 目录下即可,然后重启 dnsmasq 服务就能生效,其提供了多种过滤工具的支持,可以根据需求选择合适的配置文件导入
wget https://anti-ad.net/anti-ad-for-dnsmasq.conf -O /etc/dnsmasq.d/anti-ad-for-dnsmasq.conf
rc-update add dnsmasq default
如果还没添加启动项的话,记得先将其设置为开机启动
service dnsmasq restart
download conf
3.使用 nftables 替换 iptables
上一篇我使用 iptables 作为防火墙配置工具对防火墙规则进行了配置,这次我将使用 nftables 代替其工作,至于 nftables 是什么:nftables 是一个 netfilter 项目,旨在替换现有的 {ip,ip6,arp,eb}tables 框架,为 {ip,ip6}tables 提供一个新的包过滤框架、一个新的用户空间实用程序(nft)和一个兼容层。它使用现有的钩子、链接跟踪系统、用户空间排队组件和 netfilter 日志子系统。 官方的说明是这么写的,没看懂也没关系,只要能实现功能即可install nftables
安装 nftables apk add nftables,之后就可以使用 nft 命令来配置防火墙规则了,为了便于理解,表和链的命名方式依然沿用 iptables 中使用的命名,nftables 和 iptables 一样,由表(table)、链(chain)和规则(rule)组成,其中表包含链,链包含规则,规则是真正的动作
nftables 与 iptables 常见命令比较:
命令iptablesnftables列出所有规则iptables-savenft list ruleset新建表iptables 表内置,无法创建nft add table ip filter新建链iptables -Nnft add chain ip filter input如果需要在 eth0 口上对外开放 ssh 端口,那么可以这样配置:
创建一个名为 filter 的表,匹配 ipv4 数据
nft add table ip filter
在 filter 表中新建一个名为 input 的链,并设置优先级为 0
nft add chain ip filter input { type filter hook input priority 0 ; }
在 eth0 接口上开启 ssh 端口
nft add rule ip filter input iif eth0 tcp dport 22 accept
接受已建立的连接
nft add rule ip filter input ct state { established,related } accept
修改默认的策略,阻止所有连接
nft add chain ip filter input { policy drop ; }
enable ssh
如果要实现上一篇中 iptables 所实现的功能,那么进行如下的配置:
允许回环网口上的连接
nft add rule ip filter input iif lo accpet
允许 br0 网桥上的连接,相当于允许 LAN 上的连接
nft add rule ip filter input iif br0 accept
新建 forward 链,用于转发连接,默认阻止一切转发
nft add chain ip filter forward { type filter hook forward priority 0 ; policy drop ; }
允许转发连接,网卡名根据实际的情况决定
nft add rule ip filter forward iif br0 ip saddr 192.168.1.0/24 accept
nft add rule ip filter forward iif eth0 ip daddr 192.168.1.0/24 accept
新建 nat 表
nft add table ip nat
新建 postrouting 链,进行源地址转换
nft add chain ip nat postrouting { type nat hook postrouting priority srcnat ; policy accept ; }
在 eth0 上进行地址伪装
nft add rule ip nat postrouting oif eth0 masquerade
enable nftables
使用动态 IP 的防火墙规则如上所述,如果需要使用拨号上网的话,只需要将上面配置中的 eth0 修改为 ppp0 并使用 iifname 或者 oifname 进行匹配,之所以需要换用这种匹配模式,主要是考虑到拨号并不能保证在防火墙启动之前就连接上,iifname 和 oifname 允许匹配不存在的设备名,而 iif 和 oif 基于设备 id,如果不存在就会直接报错,最终导致整个防火墙规则加载失败,软路由就废了
在规则较少的情况下 nftables 和 iptables 的性能差别不大,不过如果你的规则数量超过了 200 条,那么还是推荐使用 nftables 进行配置,性能会更好一些,主要现在很多的主流发行版(包括最新版的 OpenWRT)已经开始使用 nftables 作为防火墙规则的默认配置工具了
所有规则配置完之后记得添加启动项,并保存规则,如果想要深入的学习 nftables,可以参考:
nftables wiki
nftables 入门
gentoo wiki
注意事项
重要的事情说三遍,如果要重启或者关机,记得使用 lbu commit 命令来固化所有修改,如果要重启或者关机,记得使用 lbu commit 命令来固化所有修改,如果要重启或者关机,记得使用 lbu commit 命令来固化所有修改有些时候使用 lbu cmmmit 不一定能完全保留所有已经修改的配置文件,可以使用 lbu include add 文件完整路径 进行手动添加,之后再通过 lbu cmmmit 合并保存,此时就可以通过 lbu ls |grep 文件名 查询到了
实测
最终收获了和上一次同样的效果,还不怕意外断电了,60分及格了,后续再优化扩充一下吧!test
最后
将 Alpine 安装进内存并充当软路由的过程大致就是这样了,朋友们,希望你们能有所启发,那么,咱们下回见,谢谢!作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
网友评论