R6300v2上安装zerotier

过程回顾

安装 opkg 软件源

winscp + putty 登录到路由器上。先要在路由器中设置允许ssh登录

title

创建软件安装目录

依次执行命令:

1
2
3
cd /jffs
mkdir /jffs/opt
ln -nsf /jffs/opt /tmp/opt

安装 opkg

  • 下载脚本

执行命令:

1
wget http://qnapware.zyxmon.org/binaries-armv7/installer/entware_install_arm.sh

title

  • 然后运行脚本:
1
sh ./entware_install_arm.sh

等待脚本运行完毕,看到 Congratulations! 就说明安装成功了。

title

自动挂载opt分区

在/jffs/scripts位置建立文件,可以先在电脑上建立文本文件,再用WinSCP传进去文件名: post-mount

内容如下:

1
2
3
#!/bin/sh

ln -nsf /jffs/opt /tmp/opt

最后获取脚本文件的权限,命令:

1
chmod a+rx /jffs/scripts/post-mount

到这里 opkg 软件源就算安装完毕了。

安装、配置 zerotier

安装 zerotier

依次执行命令:

1
2
opkg update
opkg install zerotier

title

运行 zerotier

依次执行命令:

1
2
3
modprobe tun
zerotier-one -d
zerotier-cli info

title

居然是offline?

加入申请到的网络ID

执行命令:

1
zerotier-cli join 8b***********9

title

获取 ip 值

1
zerotier-cli listnetworks

title

显示 REQUESTING_CONFIGURATION PRIVATE zt0 - 而不是IP,进入zerotier的后台设置界面,也没看到需要授权的设备,所以可以肯定存在问题。

仔细翻看原帖子的跟帖,也有不少人和我遇到同样的问题。接下来开始各种尝试。

开启从互联网设置

title

title

故障依旧

查了很多文档后发现 Entware 还可以安装到 U盘,虽然会让路由器后面带个小辫子,但是总归还是要尝试一下的。

将 Entware 装到 U盘

梅林固件自带一个entware.sh的安装脚本,但是要求必须插上一个 ext4 等 linux 文件系统的 U盘。可以找个 U盘,用 DiskGenius 可以格式化成 ext4 格式。

执行命令:

1
df -h

title

可以看到 U盘 挂载成功,netgear是 U盘的卷标,接下来执行。

1
entware-setup.sh

title

安装 zerotier

title

依次运行:

1
2
3
modprobe tun
zerotier-one -d
zerotier-cli info

title

成功上线,而且是最新的1.4.6版本

执行命令:

1
zerotier-cli join 8b***********9

title

这次居然是加入网络ID失败,在执行一次,很莫名其妙的又ok了,接下来执行命令:

1
zerotier-cli listnetworks

title

显示 ACCESS_DENIED PRIVATE,这是需要在zerotier后台页面授权,

title

勾选之后,再次执行:

1
zerotier-cli listnetworks

title

可以看到已经获取到了后台分配的IP地址。先查询下所有iptables情况:

1
iptables -v -L INPUT -n --line-numbers 

title

添加一条 iptables:

1
iptables -I INPUT 1 -i ztyqb3hz7p -j ACCEPT

title

如果你不确定虚拟网卡的名词,可以用 ifconfig 查一下。我这里的虚拟网卡名即为: ztyqb3hz7p

title

重启zerotier

1
2
killall zerotier-one
zerotier-one -d

设置开机加载tun驱动并检测脚本是否运行:

1
2
echo "modprobe tun" >> /jffs/scripts/nat-start
echo "cru a ZeroTierDaemon "/opt/etc/init.d/S90zerotier-one.sh start"" >> /jffs/scripts/wan-start

端口映射,添加/jffs/scripts/nat-start内容,并设置开机启动

192.168.191.10 为 zerotier 分配的 IP
192.168.0.1 为路由器的 IP

1
2
3
echo "iptables -t nat -A PREROUTING -d 192.168.191.10 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.1:80" >> /jffs/scripts/nat-start
echo "/opt/etc/init.d/S90zerotier-one.sh" >> /jffs/scripts/nat-start
chmod a+rx /jffs/scripts/*

启动脚本放到相应目录

title

1
chmod 755 /opt/etc/init.d/S90zerotier-one.sh

S90zerotier-one.sh 脚本内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#! /bin/sh

case "$1" in
start)
if ( pidof zerotier-one )
then echo "ZeroTier-One is already running."
else
echo "Starting ZeroTier-One" ;
/opt/bin/zerotier-one -d ;
echo "$(date) Started ZeroTier-One" >> /opt/var/log/zerotier-one.log ;
fi
;;
stop)
if ( pidof zerotier-one )
then
echo "Stopping ZeroTier-One";
killall zerotier-one
echo "$(date) Stopped ZeroTier-One" >> /opt/var/log/zerotier-one.log
else
echo "ZeroTier-One was not running" ;
fi
;;
status)
if ( pidof zerotier-one )
then echo "ZeroTier-One is running."
else echo "ZeroTier-One is NOT running"
fi
;;
*)
echo "Usage: /etc/init.d/zerotier-one {start|stop|status}"
exit 1
;;
esac

exit 0

添加防火墙规则(没有开启防火墙这个无所谓),在/jffs/scripts位置建立文件,可以先在电脑上建立文本文件,再用WinSCP传进去文件名: firewall-start

文件内容如下

注意:

  • 请将脚本中的 192.168.191.10 换成你自己 zerotier 的 IP
  • 请将脚本中的 192.168.0.1 换成你自己路由器的内网 IP
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh

logger -t "custom iptables" "Enter" -p user.notice
iptables -C INPUT -i ztyqb3hz7p -j ACCEPT
if [ $? != 0 ]; then
#iptables -I INPUT -i ztyqb3hz7p -j ACCEPT
#iptables -I INPUT -i ztyqb3hz7p -p icmp -j ACCEPT
iptables -I INPUT 1 -i ppp0 -p icmp -j DROP
iptables -t nat -A PREROUTING -d 192.168.191.10 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.1:80
logger -t "custom iptables" "rules added" -p user.notice
else
logger -t "custom iptables" "rules existed skip" -p user.notice
fi

获取脚本文件的权限,命令:

1
chmod a+rx /jffs/scripts/firewall-start

title

设置entware开机生效

重启后在日志中看到 admin: Could not start Entware

在/jffs/scripts位置建立文件post-mount , 把u盘中的 entware 挂载到 opt,内容如下:

1
2
3
4
5
#!/bin/sh

if [ "$1" = "/tmp/mnt/netgear" ] ; then
ln -nsf $1/entware /tmp/opt
fi

获取脚本文件的权限,命令:

1
chmod a+rx /jffs/scripts/post-mount

最后就是重启设备,可以享受局域网的快乐了~~

总结

需要带个 U 盘小辫子,总觉得不是很完美,等有心情了再研究吧。

附录

/jffs/scripts目录

里面的脚本名固定不可以随便修改,但是可以加自己的内容。

脚本名 作用
post-mount 在挂载磁盘后调用
nat-start 在nat配置后调用
services-start 在系统服务启动后调用
services-stop 在系统服务器停止前调用
wan-start 在wan网卡启动后调用
firewall-start 防火墙规则的配置文件

nat-start的相关内容

注意:

请将脚本中的 192.168.191.10 换成你自己 zerotier 的 IP
请将脚本中的 192.168.0.1 换成你自己路由器的内网 IP

1
2
3
4
5
#!/bin/sh

modprobe tun
iptables -t nat -A PREROUTING -d 192.168.191.10 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.1:80
/opt/etc/init.d/S90zerotier-one.sh

wan-start的相关内容

1
2
3
#!/bin/sh

cru a ZeroTierDaemon "/opt/etc/init.d/S90zerotier-one.sh start"

参考文档

[网络] r6300v2 梅林固件装Opkg、Transmission
地址:https://www.chiphell.com/thread-1347856-1-1.html

[其他插件] 梅林安装zerotier实现内网穿透
地址:https://koolshare.cn/thread-134930-1-1.html

[教程] 将entware装入jffs分区
地址:https://koolshare.cn/thread-163192-1-1.html

在梅林上使用 Entware
地址:https://www.jianshu.com/p/2559c256dcde

entware嵌入到移动硬盘,在路由器重启后不生效
地址:https://blog.csdn.net/wyongqing/article/details/85314337

A Guide About Installing ZeroTier on ASUS AC68U Router
地址:https://www.snbforums.com/threads/a-guide-about-installing-zerotier-on-asus-ac68u-router.42648/

使用Zerotier为Syncthing打洞
地址:https://www.heartnn.com/2018/04/03/install-and-config-zerotier-for-syncthing/

梅林固件安装Zerotier
地址:http://www.q-server.cn/index.php/archives/3/