配置占用挺低,使用PVE的QM跑的Tiny Core Linux运行wireguard
http://www.tinycorelinux.net/17.x/x86_64/release/
http://tinycorelinux.net/downloads.html
我装的是core的,全程使用AI指导安装
运行着WireGuard、sshd
tc@box:~$ free -hm
total used free shared buff/cache available
Mem: 471.1M 34.4M 374.3M 27.0M 62.4M 398.1M
Swap: 76.7M 0 76.7M
tc@box:~$ df -hT
Filesystem Type Size Used Available Use% Mounted on
rootfs rootfs 424.0M 27.0M 397.0M 6% /
tmpfs tmpfs 235.5M 0 235.5M 0% /dev/shm
/dev/sda1 ext4 990.6M 37.1M 937.6M 4% /mnt/sda1
/dev/loop0 squashfs 3.1M 3.1M 0 100% /tmp/tcloop/openssl
/dev/loop1 squashfs 2.1M 2.1M 0 100% /tmp/tcloop/openssh
/dev/loop2 squashfs 2.0M 2.0M 0 100% /tmp/tcloop/libdb
/dev/loop3 squashfs 92.0K 92.0K 0 100% /tmp/tcloop/db
/dev/loop4 squashfs 628.0K 628.0K 0 100% /tmp/tcloop/iproute2
/dev/loop5 squashfs 1.3M 1.3M 0 100% /tmp/tcloop/ipv6-netfilter-6.18.35-tinycore64
/dev/loop6 squashfs 420.0K 420.0K 0 100% /tmp/tcloop/iptables
/dev/loop7 squashfs 356.0K 356.0K 0 100% /tmp/tcloop/libnl
/dev/loop8 squashfs 256.0K 256.0K 0 100% /tmp/tcloop/ncursesw
/dev/loop9 squashfs 156.0K 156.0K 0 100% /tmp/tcloop/readline
/dev/loop10 squashfs 568.0K 568.0K 0 100% /tmp/tcloop/bash
/dev/loop11 squashfs 40.0K 40.0K 0 100% /tmp/tcloop/jansson
/dev/loop12 squashfs 252.0K 252.0K 0 100% /tmp/tcloop/gmp
/dev/loop13 squashfs 8.0K 8.0K 0 100% /tmp/tcloop/libmnl
/dev/loop14 squashfs 72.0K 72.0K 0 100% /tmp/tcloop/libnftnl
/dev/loop15 squashfs 456.0K 456.0K 0 100% /tmp/tcloop/nftables
/dev/loop16 squashfs 24.0K 24.0K 0 100% /tmp/tcloop/openresolv
/dev/loop17 squashfs 88.0K 88.0K 0 100% /tmp/tcloop/wireguard-tools
sshd和Wireguard都需要手动安装组件包
tce-load -wi openssh
tce-load -wi amneziawg-tools
安装基础网络包
tce-load -wi iproute2 iptables libnl bash
我用的是静态IP,需要手动配置
sudo ifconfig eth0 XX.XX.XX.XX netmask 255.255.255.0 up
sudo route add default gw 172.20.101.254
echo 'nameserver 223.5.5.5' | sudo tee /etc/resolv.conf
启动sshd
sudo /usr/local/etc/init.d/openssh restart
加载WireGuard的依赖
sudo modprobe libchacha20poly1305
sudo modprobe libcurve25519
sudo modprobe wireguard
可以使用命令搜索组建
tce-ab
记得修改持久化的相关脚本文件
sudo vi /opt/bootlocal.sh
先联网,执行这个后才能安装
tce-load -wi tc-install.tcz
安装命令,任意一个,具体忘了
tc-install.sh
tc-install
=====
AI
=====
Tiny Core Linux 部署 WireGuard 与持久化笔记
适用环境
- 发行版:Tiny Core Linux 17.x CorePure64
- 内核版本:
6.x-tinycore64 - 扩展目录:
/mnt/sda1/tce/optional - 持久化备份:
/mnt/sda1/tce/mydata.tgz - 扩展启动列表:
/mnt/sda1/tce/onboot.lst - 备份清单:
/opt/.filetool.lst - 启动脚本:
/opt/bootsync.sh、/opt/bootlocal.sh - 系统用户:
tc - 网络管理:DHCP,由
/etc/init.d/dhcp.sh处理 - 说明:文中
xx.xx.xx.xx代表实际使用时需要替换的 IP 地址。
一、加载 WireGuard 内核模块
Tiny Core 的 WireGuard 内核模块存在依赖关系,应按顺序加载:
sudo modprobe libchacha20poly1305
sudo modprobe libcurve25519
sudo modprobe ipv6
sudo modprobe wireguard
检查是否加载成功:
sudo lsmod | grep wireguard
正常结果:
wireguard 57344 0
ipv6 393216 17 wireguard,[permanent]
libchacha20poly1305 12288 1 wireguard
libcurve25519 61440 1 wireguard
如果单独执行 sudo modprobe wireguard,可能出现:
unknown symbol in module
原因是依赖模块尚未加载。加载 ipv6 后再次执行即可。
查看模块信息:
sudo modinfo wireguard
重点查看:binary file:
vermagic
depends
vermagic 必须与当前内核版本一致,否则模块即使存在于磁盘也无法加载。
二、安装 WireGuard 工具
Tiny Core 使用 tce-load 管理扩展。
下载并立即加载:
tce-load -i wireguard-tools.tcz
下载并在每次启动时自动加载:
tce-load -wi wireguard-tools.tcz
安装后会提供:binary file:
/usr/local/bin/wg
/usr/local/bin/wg-quick
确认版本:
which wg
wg --version
which wg-quick
wg-quick --version
同时会下载依赖,例如:binary file:
libnl.tcz
openresolv.tcz
wireguard-tools.tcz
查看磁盘上的扩展:
ls /mnt/sda1/tce/optional | grep wireguard
ls /mnt/sda1/tce/optional | grep resolv
查看开机自动加载列表:
cat /mnt/sda1/tce/onboot.lst
三、WireGuard 配置文件位置
配置文件目录:
/etc/wireguard
创建目录:
sudo mkdir -p /etc/wireguard
建议为每个接口创建一个独立文件,例如:
sudo vi /etc/wireguard/wg0.conf
sudo vi /etc/wireguard/wg1.conf
配置文件权限应限制为仅 root 可读写:
sudo chmod 600 /etc/wireguard/wg0.conf
启动接口:
sudo wg-quick up wg0
停止接口:
sudo wg-quick down wg0
查看接口状态:
sudo wg show
sudo wg show wg0
必须使用 sudo。普通用户执行会返回:
Unable to access interface: Operation not permitted
这不是 WireGuard 隧道故障,只是权限不足。
四、配置文件的字段结构
WireGuard 配置文件分为两个主要部分:
[Interface]
...
[Peer]
...
其中:
Interface描述本机身份、地址和监听端口;Peer描述对端公钥和允许通过的网段;Address是本机在隧道内部的地址;AllowedIPs决定哪些流量进入该隧道;Endpoint是服务端的公网地址和端口;PersistentKeepalive用于 NAT 环境下保持连接。
AllowedIPs 必须使用标准网段地址,例如:
AllowedIPs = 192.168.0.0/24
不能写成:binary file:
AllowedIPs = 192.168.0.1/24
后者会触发警告:
Warning: AllowedIP has nonzero host part
五、开机自动建立隧道
编辑启动脚本:
sudo vi /opt/bootlocal.sh
添加:
wg-quick up wg0
/opt/bootsync.sh 默认以后台方式调用该脚本:
/opt/bootlocal.sh &
因此 bootlocal.sh 不应包含长时间阻塞的命令。如果需要在网络就绪后启动,可以加入短暂等待:
sleep 3
wg-quick up wg0
但不要设置过长的 sleep,否则会影响 Tiny Core 启动流程。
六、安装并配置 SSH
安装 openssh
tce-load -wi openssh.tcz
检查是否已经安装:
tce-status -i | grep -i openssh
ls /mnt/sda1/tce/optional | grep openssh
Tiny Core 的 OpenSSH 启动脚本位于:
/usr/local/etc/init.d/openssh
查看 Tiny Core 提供的初始化脚本:
ls /usr/local/etc/init.d
生成主机密钥
首次安装后,建议显式生成主机密钥:
sudo ssh-keygen -A
生成的文件通常包括:binary file:
ssh_host_ecdsa_key
ssh_host_ecdsa_key.pub
ssh_host_ed25519_key
ssh_host_ed25519_key.pub
ssh_host_rsa_key
ssh_host_rsa_key.pub
复制并修改 SSH 服务端配置
Tiny Core 的 OpenSSH 配置位于:binary file:
/usr/local/etc/ssh
原文件通常以 .orig 结尾。复制成可编辑版本:
sudo cp /usr/local/etc/ssh/sshd_config.orig /usr/local/etc/ssh/sshd_config
然后编辑:
sudo vi /usr/local/etc/ssh/sshd_config
需要关注的基本项:binary file:
Port 22
AddressFamily any
ListenAddress 0.0.0.0
PermitRootLogin no
PasswordAuthentication yes
PubkeyAuthentication yes
HostKey /usr/local/etc/ssh/ssh_host_ed25519_key
HostKey /usr/local/etc/ssh/ssh_host_ecdsa_key
HostKey /usr/local/etc/ssh/ssh_host_rsa_key
测试配置文件是否有效:
sudo /usr/local/sbin/sshd -t
没有输出通常表示语法正常。
启动 SSH
sudo /usr/local/etc/init.d/openssh start
查看监听状态:
netstat -lntu | grep :22
前台运行并输出错误:
sudo /usr/local/sbin/sshd -D -e
停止服务:
sudo /usr/local/etc/init.d/openssh stop
开机启动 SSH
编辑:binary file:
sudo vi /opt/bootlocal.sh
建议写成:binary file:
#!/bin/sh
# put other system startup commands here
/usr/local/etc/init.d/openssh start
sleep 3
wg-quick up wg0
SSH 应在 WireGuard 之前启动,避免隧道建立期间影响管理连接。
七、用户密码持久化
设置用户密码:
sudo passwd tc
Tiny Core 的账户信息位于:binary file:
/etc/passwd
/etc/shadow
这两个文件不会自动进入备份。要让修改后的密码重启后仍然有效,需要加入备份清单。
八、Tiny Core 持久化机制
Tiny Core 在内存中运行,修改 /etc、/usr/local 等内容后,只有被写入备份清单的文件才会保存。
备份命令:
filetool.sh -b
成功结尾应为:
Backing up files to /mnt/sda1/tce/mydata.tgz Done.
如果结尾不是 Done.,说明备份失败,不能认为配置已经保存。
查看当前备份清单:
cat /opt/.filetool.lst
查看备份内容:
tar -tzf /mnt/sda1/tce/mydata.tgz
备份路径规则
- 使用相对于根目录的路径;
- 不要写前导
/; - 目录会递归备份;
- 不存在的路径会导致
tar报错并中断; - 指向
/tmp/tcloop的符号链接不适合整体备份。
正确写法:binary file:
etc/wireguard
opt/bootlocal.sh
usr/local/etc/ssh/ssh_host_ed25519_key
错误写法:binary file:
/etc/wireguard
/usr/local/etc/ssh/ssh_host_ed25519_key
九、推荐的 .filetool.lst
opt
home
home/tc
etc/wireguard
etc/passwd
etc/shadow
usr/local/etc/ssh/ssh_host_ecdsa_key
usr/local/etc/ssh/ssh_host_ecdsa_key.pub
usr/local/etc/ssh/ssh_host_ed25519_key
usr/local/etc/ssh/ssh_host_ed25519_key.pub
usr/local/etc/ssh/ssh_host_rsa_key
usr/local/etc/ssh/ssh_host_rsa_key.pub
usr/local/etc/ssh/sshd_config
其中:binary file:
opt
已经覆盖:binary file:
/opt/bootlocal.sh
/opt/bootsync.sh
/opt/shutdown.sh
/opt/tcemirror
不要整体备份 SSH 目录
ls -l /usr/local/etc/ssh
部分文件是指向 Tiny Core 循环挂载目录的符号链接:
moduli -> /tmp/tcloop/openssh/usr/local/etc/ssh/moduli
ssh_config.orig -> /tmp/tcloop/openssh/usr/local/etc/ssh/ssh_config.orig
sshd_config.orig -> /tmp/tcloop/openssh/usr/local/etc/ssh/sshd_config.orig
如果直接备份:binary file:
usr/local/etc/ssh
tar 可能遇到:binary file:
No such file or directory
并中断整个备份。应只备份主机密钥和修改后的配置文件。
十、完整部署流程
# 加载模块
sudo modprobe libchacha20poly1305
sudo modprobe libcurve25519
sudo modprobe ipv6
sudo modprobe wireguard
# 安装组件
tce-load -wi wireguard-tools
tce-load -wi openssh
# 生成 SSH 主机密钥
sudo ssh-keygen -A
# 复制并修改 SSH 配置
sudo cp /usr/local/etc/ssh/sshd_config.orig /usr/local/etc/ssh/sshd_config
sudo vi /usr/local/etc/ssh/sshd_config
# 设置用户密码
sudo passwd tc
# 创建 WireGuard 配置
sudo mkdir -p /etc/wireguard
sudo vi /etc/wireguard/wg0.conf
sudo chmod 600 /etc/wireguard/wg0.conf
# 启动服务
sudo /usr/local/etc/init.d/openssh start
sudo wg-quick up wg0
# 检查状态
sudo wg show wg0
netstat -lntu | grep :22
# 配置开机启动
sudo vi /opt/bootlocal.sh
sudo vi /opt/.filetool.lst
# 保存
filetool.sh -b
十一、修改 WireGuard 配置文件后
编辑配置:
sudo vi /etc/wireguard/wg0.conf
重新应用配置:binary file:
sudo wg-quick down wg0
sudo wg-quick up wg0
检查:binary file:
sudo wg show wg0
ip route
修改完成后保存:binary file:
filetool.sh -b
十二、修改 SSH 配置后
编辑配置:
sudo vi /usr/local/etc/ssh/sshd_config
测试配置:binary file:
sudo /usr/local/sbin/sshd -t
重新加载或重启:binary file:
sudo /usr/local/etc/init.d/openssh restart
确认监听:binary file:
netstat -lntu | grep :22
保存:binary file:
filetool.sh -b
十三、客户端主机密钥变化
如果 SSH 主机密钥没有持久化,每次重启可能重新生成。客户端连接时会提示:
Host key has changed
在客户端删除旧记录:
ssh-keygen -R xx.xx.xx.xx
然后重新连接。
为避免该问题,应将 SSH 主机密钥加入 .filetool.lst 并重新执行 filetool.sh -b。
十四、网络地址与启动顺序
Tiny Core 默认使用 DHCP。网络脚本位于:binary file:
/etc/init.d/dhcp.sh
启动参数通常包含:binary file:
tce=UUID="..."
不要随意加入:binary file:
ip=
nodhcp
否则可能覆盖现有网络配置。
bootlocal.sh 在系统网络配置之后执行,因此可以直接启动 SSH 和 WireGuard。不要在其中重复执行:binary file:
ifconfig eth0 ...
route add default gw ...
udhcpc ...
除非明确将 Tiny Core 改为静态 IP。
十五、防火墙注意事项
当前 Tiny Core 内核可能没有提供:
ip_tables
iptable_filter
执行:binary file:
sudo iptables -L
可能返回:binary file:
can't initialize iptables table `filter': Table does not exist
此时不要反复执行:binary file:
iptables -F
这些命令不会生效。应确认 Tiny Core 提供的是 legacy iptables、nftables 还是 nf_tables 后端:
iptables --version
which nft
sudo modprobe nf_tables
十六、排错顺序
模块未加载
sudo lsmod | grep wireguard
sudo modprobe wireguard
dmesg | tail -10
sudo modinfo wireguard
工具不存在
which wg
which wg-quick
tce-status -i | grep wireguard
ls /mnt/sda1/tce/optional | grep wireguard
接口已建立但没有握手
sudo wg show wg0
ip route
重点查看:binary file:
latest handshake
transfer
endpoint
只有发送、没有接收,通常说明:
- 对端地址或端口不正确;
- UDP 端口被中间网络阻断;
- 对端没有添加本机公钥;
- 对端
AllowedIPs中没有包含本机地址; - 两端使用的协议版本不一致。
SSH 无法连接
netstat -lntu | grep :22
ps aux | grep sshd
sudo /usr/local/sbin/sshd -t
sudo /usr/local/sbin/sshd -D -e
重启后配置丢失
tar -tzf /mnt/sda1/tce/mydata.tgz | grep <关键词>
cat /opt/.filetool.lst
如果没有对应文件,修改 .filetool.lst 并重新执行:
filetool.sh -b
十七、需要长期记住的原则
- Tiny Core 的修改在内存中进行,重启不自动保存;
- 每次修改系统文件后都要执行
filetool.sh -b; filetool.sh -b结尾必须是Done.;.filetool.lst使用相对路径,不带前导/;- 不存在的备份路径会导致整个
tar中断; - SSH 目录中的
.orig文件是符号链接,不能整体备份; - SSH 主机密钥必须显式备份,否则重启后客户端提示主机密钥变化;
- WireGuard 模块必须按依赖顺序加载;
wg show必须使用sudo;AllowedIPs必须写网段地址,不能写主机地址;wg-quick可以自动创建地址、接口和路由;- SSH 应在 WireGuard 之前启动;
- 使用 DHCP 时不要重复配置网卡地址;
ping无法测试 WireGuard 的 UDP 端口;- 两端协议版本必须一致。
十八、验证清单
sudo lsmod | grep wireguard
which wg wg-quick
ls -l /usr/local/etc/ssh/ssh_host_*_key
cat /usr/local/etc/ssh/sshd_config | grep -v '^#' | grep -v '^$'
netstat -lntu | grep :22
sudo wg show wg0
ip addr
ip route
cat /opt/.filetool.lst
filetool.sh -b
tar -tzf /mnt/sda1/tce/mydata.tgz | grep -E "wireguard|ssh_host|bootlocal|passwd|shadow"
重启后应同时确认:binary file:
SSH 监听 22 端口
WireGuard 接口存在
隧道显示 latest handshake
路由包含隧道网段
/etc/passwd 与 /etc/shadow 中的账户信息未恢复默认值
