easytier在华硕路由器AX86u Pro上的安装避坑教程
前言
- easytier是一款神奇的组网软件,可实现点对点、点对网、网对网的互联互通。项目地址:https://github.com/EasyTier/EasyTier。不需要公网地址,就能访问内网所有服务。比如,在家中路由器运行easytier,手机或笔记本上也运行easytier,配置好,手机和笔记本就能在外也能访问家中服务了。
- 本文适合的对象:对easytier已有一定了解,恰好又有一个华硕路由器。
准备工作
- 华硕路由器1台,这里用的是AX86u Pro。
- 对应的梅林固件(https://fw.koolcenter.com/)。。)
- U盘1个,2G以上即可,必须靠谱。
- 一台windows电脑、diskgenius、MobaXterm。
开始
- 将路由器固件升级为梅林固件:路由器管理页面(默认为192.168.50.1)→系统管理→固件升级→手动固件更新,点击上传,选中对应的梅林固件。等待刷新完毕。
- 开启路由器SSH登录:路由器管理页面→系统管理→系统设置→启用SSH,选择LAN only,端口22,其它默认,应用本页面设置。
- 在电脑上用diskgenius将U盘格式化成EXT4格式后插入路由器。
- 路由器管理页面→软件中心→全部软件,安装USB2JFFS和Entware。
- 打开USB2JFFS,挂载。打开Entware,安装。
- 路由器管理页面→USB相关应用→服务器中心→网络共享(Samba)/云端硬盘,启用启用网上邻居共享为ON,允许访客登入为ON,测试一下,资源管理器里输入\192.168.50.1,看看能不能看到挂在的U盘,一般可以看到sda1。这个sda1实际是/tmp/mnt/sda1,
- 在sda1下创建文件夹temp,你既可以用MobaXterm来创建,也可以在windows资源管理器中创建。
- 查看架构:uname -m,AX86u Pro是aarch64,去easytier(https://github.com/EasyTier/EasyTier/releases/tag/v2.2.4)下载easytier-linux-aarch64-v2.2.4.zip,解压到temp下。目录绝对路径为"/tmp/mnt/sda1/temp/easytier-linux-aarch64/easytier-core"。
- 去(https://easytier.cn/web/index.html#/config_generator)生成easytier的配置文件保存成test.toml,确保代理本地子网192.168.50.0/24,放入/tmp/mnt/sda1/temp/easytier-linux-aarch64/下。
- 用MobaXterm进入/tmp/mnt/sda1/temp/easytier-linux-aarch64/
./easytier-core -c ./test.toml
确保能正常运行。
重点
- 开机启动:创建"/tmp/mnt/sda1/entware/etc/init.d/S99easytier.sh"
#!/bin/sh
# 脚本基础配置
NAME="easytier"
ENABLED=yes
PROG="/tmp/mnt/sda1/temp/easytier-linux-aarch64/easytier-core"
CONFIG="/tmp/mnt/sda1/temp/easytier-linux-aarch64/test.toml"
LOGFILE="/tmp/mnt/sda1/temp/easytier-linux-aarch64/easytier.log"
PIDFILE="/var/run/easytier.pid"
# 依赖环境(等待USB挂载完成)
START_WAIT=5
start() {
# 加载 tun 模块
if ! lsmod | grep -q tun; then
insmod /lib/modules/$(uname -r)/kernel/drivers/net/tun.ko
echo "[$(date)] tun已加载" >> /tmp/mnt/sda1/temp/S99easytier.log
fi
if [ -z "$ENABLED" ] || [ "$ENABLED" != "yes" ]; then
echo "$NAME is disabled. Check script configuration."
exit 1
fi
if [ -f "$PIDFILE" ] && ps | grep -q "$(cat $PIDFILE)"; then
echo "$NAME is already running."
exit 0
fi
echo "Starting $NAME..."
sleep $START_WAIT # 等待USB设备挂载完成
$PROG -c $CONFIG >> $LOGFILE 2>&1 &
PID=$!
echo $PID > $PIDFILE
echo "Started $NAME with PID $PID"
}
stop() {
if [ -f "$PIDFILE" ]; then
PID=$(cat $PIDFILE)
kill $PID
rm -f $PIDFILE
echo "Stopped $NAME (PID $PID)"
else
echo "$NAME is not running."
fi
}
restart() {
stop
sleep 2
start
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
# 添加防火墙规则
iptables -I INPUT -i tun+ -j ACCEPT && echo "[$(date)] 防火墙规则1已添加" >> /tmp/mnt/sda1/temp/S99easytier.log
iptables -I FORWARD -i tun+ -j ACCEPT && echo "[$(date)] 防火墙规则2已添加" >> /tmp/mnt/sda1/temp/S99easytier.log
iptables -I FORWARD -o tun+ -j ACCEPT && echo "[$(date)] 防火墙规则3已添加" >> /tmp/mnt/sda1/temp/S99easytier.log
exit 0
梅林固件会开机启动S99easytier.sh,这段启动脚本主要是(1)加载tun,因为梅林固件默认没有加载。(2)启动easytier。(3)打开防火墙,添加3条规则,接受所有接口为tun0的流量,否则代理本地子网会阻塞。这里用了tun+,生怕启动了多个easytier进程。
12. 本来到这儿就结束了,实际有个坑。就是在路由器管理页面中随意找个页面保存,防火墙会重启,然后把3条防火墙规则丢了。解决方法接着看。
13. 创建"/tmp/mnt/sda1/.koolshare_jffs/scripts/firewall-start"
#!/bin/sh
# 记录脚本执行时间
echo "[$(date)] firewall-start triggered" >> /tmp/mnt/sda1/temp/firewall.log
# 添加防火墙规则
iptables -I INPUT -i tun+ -j ACCEPT && echo "INPUT rule added" >> /tmp/mnt/sda1/temp/firewall.log
iptables -I FORWARD -i tun+ -j ACCEPT && echo "FORWARD-in rule added" >> /tmp/mnt/sda1/temp/firewall.log
iptables -I FORWARD -o tun+ -j ACCEPT && echo "FORWARD-out rule added" >> /tmp/mnt/sda1/temp/firewall.log
当防火墙重启时,添加这3条规则。
15. 特别提示:
(1)这里sda1因人而异,一般是sda1,也可能是你自己起的一个u盘名字,那么上面代码中把sda1换一下就ok了。
(2)路由器重启后,可以用ps | grep easytier,查看是否有easytier进程,通常会有。
(3)如果发现没有easytier进程,请尝试第二种方法:把S99easytier.sh去掉后缀(.sh),再执行一下/opt/etc/init.d/S99easytier enable(别怀疑路径,其实是同一个路径),重启后查看是否有easytier进程。
祝大家玩的愉快!