OpenWrt安装Tailscale设置内网穿透+科学出国+外网互访局域网设备

       以前写过一篇关于群晖安装Tailscale的教程(如果还不了解Tailscale是什么的,去看“这篇教程”),考虑到有些小伙伴的NAS并非7*24小时开机或者有些小伙伴没有使用群晖,因此博主把在OpenWrt安装Tailscale设置内网穿透的方法发出来,如果你在使用OpenWrt但是宽带没有公网又想远程访问的,可以按照本教程设置。

 

【准备工作】

在操作之前,需要做一些准备工作:

1、需要准备一个邮箱(支持:谷歌Gmail邮箱、微软outlook邮箱、微软hotmail邮箱、苹果Apple邮箱)或者一个账号(支持:github账号、passkey账号),如果你都没有,建议先去注册(推荐注册微软邮箱):https://outlook.live.com/owa/

 

2、安装好OpenWrt软路由系统,并设置好网络环境,保证能正常运行和访问。

 


【内网穿透的设置步骤】

1、本教程使用的OpenWrt固件是博主于2024年3月1自行编译的(博主编译的全功能版、主路由版、旁路由版均可使用),如果你使用的OpenWrt固件并非博主编译的固件或者OpenWrt固件不带应用商店的有可能无法正常使用,如果你使用的OpenWrt固件版本低于该版本的建议升级到此版本或者升级到最新的版本;

 

 

2、在OpenWrt左边菜单,iStore,全部软件,搜索栏输入tailscale回车,在下图位置显示的tailscale,点“安装”;

 

 

3、软件在安装中,请耐心等待;

 

 

4、安装完成后点右边绿色的按钮关闭本窗口;

 

 

5、点OpenWrt左边菜单,服务,Tailscale,右边显示的服务状态为“未运行”,由于直接在图形界面不好设置,所以需要到命令行去设置;

 

 

6、点OpenWrt左边菜单,系统,TTYD终端,输入超级管理员账号root以及密码,进入root状态下(如果你使用的OpenWrt固件不带TTYD终端,也可以在电脑上使用MobaXterm、Xshell、Putty之类的软件登录到OpenWrt的root状态下);

 

 

7、输入以下命令回车,启动tailscale:

/etc/init.d/tailscale start

 

 

 

8、输入以下命令回车,设置本设备为局域网出口,如果你的局域网不是192.168.1.X的网段,需要将命令中的192.168.1.0修改你的局域网实际的网段(假设你的openwrt的IP是10.10.10.222,那么命令应该写tailscale up --accept-dns=false --advertise-routes=10.10.10.0/24 --advertise-exit-node,注意命令行中有空格),运行后会弹出一个链接让我们登录,点击该链接:

tailscale up --accept-dns=false --advertise-routes=192.168.1.0/24 --advertise-exit-node

 

 

 

9、在浏览器会弹出需要登录的窗口,登录tailscale(注意:所有的设备必须要登录同一个账号才可以组网);

 

 

10、登录账号后,点“Connect”;

 

 

11、登录成功,耐心等待一会,会自动进入tailscale的管理后台;

 

 

12、在tailscale的管理后台,可以看到当前组网的设备清单(博主有NAS、台式电脑、OpenWrt旁路由、手机一共4台设备一起组网),其中名称为“openwrt-gxnas”的就是刚刚添加进入的Openwrt软路由,有个绿灯并显示Connected就表示该设备正常联网了,点右边三个小点;

 

 

13、选择“Disable key expiry”,设置该设备的密钥为永不过期;

 

 

14、看到该设备下方有显示“Expiry disabled”就设置成功,再继续点三个小点;

 

 

15、选择“Edit route settings”;

 

 

16、在“192.168.1.0/24”(第8个步骤命令中你写的网段是什么,这里就显示什么)和“Use as exit node”这两处打勾,再点“Save”;

 

 

17、输入命令回车,让tailscale开机自动启动:

/etc/init.d/tailscale enable

 

 

 

18、输入命令回车,查看tailscale是否已经生成开机自动启动的服务,看到有/etc/rc.d/S**tailscale字样(注意S后面的数字不一定跟我的一样)就表示设置成功;

ls /etc/rc.d/S*tailscale*

 

 

19、来测试一下远程访问的效果,关闭手机的WIFI使用手机流量来模拟远程访问,先在手机上打开tailscale(登录与OpenWrt同一个账号),然后在手机浏览器打开家里主路由内网IP看看,可以访问;

 

 

20、接着试一下openwrt旁路由的内网IP,OK的;

 

 

21、再试一下群晖NAS,全部使用内网IP,也是没有问题的,相当方便;

 

22、好了,操作到这里,你已经可以内网穿透回家,在外网访问家里局域网的设备了。

 


【科学出国的设置步骤】

 

      如果你的OpenWrt不具备科学出国的环境,那么请无视此步骤的设置。

      如果你使用的OpenWrt具备科学出国的环境,那么可以使tailscale网络内的设备通过OpenWrt代理来实现科学出国,设置步骤(本教程以手机app为例,其他客户端设置方法一样):

1、打开tailscale手机app,先激活功能(左上角开关处于Active状态),然后点右上角三个小点的下拉菜单,选择“Use exit node...”;

 

 

2、在弹出的小窗口选择在“【内网穿透的设置步骤】”第16步骤中设置的exit node出口设备名称(我这里的设备是“openwrt-gxnas”);

 

 

3、tailscale手机app会多出一行绿色的状态栏,显示exit node出口设备和名称;

 

 

4、手机浏览器可以出国了。

 

 


【外网互访局域网设备的设置步骤】

 

       如果你有多个局域网想组成虚拟局域网,每个局域网内的设备不需要安装tailscale客户端也可以相互访,那么除了做完“【内网穿透的设置步骤】”以外,在每个局域网内的exit node出口设备上,还需要设置以下地方:

1、在Openwrt的菜单,网络,接口,添加新接口;

 

 

2、新接口的名称我写的是tailscale,新接口的协议选择“静态地址”,在“包括以下接口”处选择“以太网适配器:tailscale0”,提交;

 

 

3、登录【tailscale后台】,找到“【内网穿透的设置步骤】”第16步骤中设置的exit node出口设备IP地址,记录下来(不要抄我的,写你的exit node出口设备实际IP);

 

 

4、把上一步骤记录的IP地址(是哪个局域网的exit node出口设备IP就写哪个,别搞混淆了),填写到下图的“IPv4地址”处,IPv4子网掩码选“255.0.0.0”;

 

 

5、点击“防火墙设置”,创建/分配防火墙区域选择“LAN”,点“保存/应用”;

 

 

6、把以下三行内容复制,到“防火墙”、“自定义规则”处粘贴,再点一下“重启防火墙”;

 

iptables -I FORWARD -i tailscale0 -j ACCEPT
iptables -I FORWARD -o tailscale0 -j ACCEPT
iptables -t nat -I POSTROUTING -o tailscale0 -j MASQUERADE

 

 

 

 

7、把需要做互通的网络,全部按照上面的设置好以后,所有局域网内的设备不需要安装tailscale客户端,相互之间都可以访问,实现大内网组网。

点赞
  1. hank说道:
    Google Chrome Windows 10
    博主,我又来请教您了!前面按照你的教程一直到“外网互访局域网设备的设置”都部署成功了,现在我的软路由Tailscale虚拟网里面有一个MAC安装了Tailscale客户端,(该MAC在国外,因为客观原因不能在国外那个路由器上面完成“外网互访局域网设备的设置”)该MAC电脑打开Tailscale客户端可以访问安装软路由作为Exit node和SubNet里面的国内的NAS,但是上传文件到NAS速度非常慢,远不是P2P应该有的速度。同时我尝试NAS自己的DDNS服务上传文件到NAS速度就非常快,而且可以直接看到我的主路由的公网IP(我有公网IPV4)。我为了改善上传速度更换了性能更好的软路由,重新按照你的教程部署,但是这一次没有部署“外网互访局域网设备的设置”,上传速度还是没有改善!我有三个问题:1. 为什么Tailscale上传文件到NAS速度远远慢于NAS自己的DDNS服务上传文件到NAS速度?2. 是否必要完成我的软路由的“外网互访局域网设备的设置”?3. 完成“外网互访局域网设备的设置”部署能不能改善外网上传文件速度?再次谢谢博主!!!
    1. 博主说道:
      Google Chrome Windows 10
      鉴于你有公网的情况下,直接使用DDNS解析到公网的方式来访问家里的设备吧,有公网就别用Tailscale了,Tailscale走的是内网穿透。我们国内你可以相像成一个大的局域网,如果互访的设备都在国外,Tailscale访问速度还行,但是你这跨国访问用Tailscale走的穿透,不知道要穿透多少层网络了,所以效率绝对比公网差得多,速度肯定没有保障的。没设置ExitNode并不影响访问速度,这个只是为了访问同一局域网的设备而已,如果不设置只是在同一个Tailscale虚拟网络里面的设备互访而已。
      1. hank说道:
        Chrome iPhone iOS 17.6
        好的,如何直接使用DDNS解析到公网的方式来访问家里的设备?有没有相关教程介绍给我看看?谢谢博主,另外,能不能加个联系方式联系更方便快捷?我的邮箱:hanjun.wang@gmail.com
        1. 博主说道:
          Google Chrome Windows 10
          如果你的主路由支持,可以在主路由设置;如果不支持可以放到群晖里面,在我的博客有教程:https://wp.gxnas.com/11459.html
  2. Holy说道:
    Google Chrome Windows 10
    你好博主,我按照教程在OPENWRT、群晖、手机、笔记本全部设置好了。但是发现有几个问题。通过笔记本tailscale可以使用内网地址访问群晖和openwrt,但是内网中群晖的其他端口服务无法通过内网地址访问,需要通过虚拟地址访问。另外所有其他设备通过openwrt作为exit node出口,都显示互联网连接禁止,无法上网。感觉是不是openwrt转发受限了,不能路由出去。请博主赐教,谢谢!
    1. 博主说道:
      Google Chrome Windows 10
      有可能你的OP防火墙设置有问题,你检查看看吧。
  3. NeWifiD2说道:
    Chrome iPhone iOS 18.0
    你好博主,我的全部都设置好了,手机通过 tailscale客户端使用5g网络可以访问家里面的路由和电脑,同时也把路由器设为可以代理出口的节点,试过了很多次就是无法连接科学网络,手机端选的也是可以作为代理的路由器作为流量出口 连接后也和你一样,手机有绿色的背景 但就是不能用手机进行科学连接?请up主赐教。
    1. 博主说道:
      Google Chrome Windows 10
      微信已回复
  4. 门板说道:
    Safari Mac OS X 10.15.7
    请问zerotier未运行也是同理吗? :heixian:
    1. 博主说道:
      Google Chrome Windows 10
      你刷的是哪个版本
      1. 门板说道:
        Safari Mac OS X 10.15.7
        内核版本是6.6.53
  5. zachary说道:
    Google Chrome Windows 10
    您好,我在使用tailscale的时候碰到了一些问题,当光猫桥接的时候,openwrt无法同时使用tailscale和ssr plus,请问您遇到过这种情况吗
    1. 博主说道:
      Google Chrome Windows 10
      光猫桥接和openwrt没有什么关系呀
  6. 飞天橘猫说道:
    Firefox Windows 10
    openwrt的tailscale作为网络出口代理文章中提到并且完成了。但是没有选择从其他设备的网络出口出去的选项和提及。ui界面中没有选项,不知道是没有这个功能还是需要命令去完成。谢谢!
    1. 博主说道:
      Google Chrome Windows 10
      有的啊,比如tailscale手机app打开后,就会看到有个EXIT NODE的选项,点进去选择openwrt作为出口设备。
      1. 飞天橘猫说道:
        Firefox Windows 10
        不是openwrt作为流量出口节点,而是openwrt从别的设备流量出口出去
        1. 博主说道:
          Google Chrome Windows 10
          一样的设置原理啊,第8个步骤我是在OP设置的exit-node,如果你需要在别的设备做exit-node就在别的设备上设置。
          1. 飞天橘猫说道:
            Firefox Windows 10
            别的设备exit-node已经设置好了,openwrt没有选择从其他设备的exit-node出口出去的选项
          2. 博主说道:
            Google Chrome Windows 10
            在第8个步骤的时候,在OpenWrt下输入的命令改为:先用tailscale up命令弹出登录窗口,登录账号后再输入命令给OpenWrt设置exit-node的设备,例如tailscale set --exit-node=100.123.123.123 --exit-node-allow-lan-access=true,100.123.123.123替换成你tailscale网络中开启exit-node设备的IP
          3. 飞天橘猫说道:
            Firefox Windows 10
            成功了,非常感谢!我是410棒子成功有效从我自己电脑网络出口出去了。
          4. 飞天橘猫说道:
            Firefox Windows 10
            我是外出给switch或者VR提供网络,之前我尝试手机连接电脑网络出口,手机自身流量确实从电脑网络出口出去,但是手机开热点给其他设备连接,比如switch,热点的流量并不经过家里的电脑网络出口。因为switch有些游戏是需要P2P联机的,410棒子本身是插手机卡,基本不可能获得公网IP,所以是打算从自己家里的公网IP去代理连联机。如果手机热点也能经过家里公网IP出去的话,那就根本不需要410棒子了,更加方便一些。
          5. 博主说道:
            Google Chrome Windows 10
            感谢打赏~~
  7. eason说道:
    Google Chrome Windows 10
    防火墙图形化配置参考 https://chenprime.xyz/blog/tailscale/
  8. eason说道:
    Google Chrome Windows 10
    要访问subnet还需要给tailscale接口添加静态路由
  9. Linghu说道:
    Google Chrome Windows 10
    大神您好,我按照教程用搭建好之后,exit node选择openwrt,只能访问出国规则内的域名,所有国内的网站均无法打开(关闭tailscale里的“tailscale DNS 之后”更是什么都打不开),已经检查过所有设置都是对的,请问一下如何解决这个问题,十分感谢!QwQ
    1. 博主说道:
      Google Chrome Windows 10
      是不是你没设置这个https://wp.gxnas.com/10078.html
      1. Linghu说道:
        Google Chrome Android 10
        请问我的openwrt是直接拨号当主路由的,也需要配置允许入站和转发吗?我怕有安全问题(路由器是公网IP) 不过我试下,感谢回复
        1. 博主说道:
          Google Chrome Windows 10
          这条命令的作用是让数据包在离开网络时改变其源地址,目的是为了网络地址伪装,使内部网络设备可以共享一个外部IP地址访问外部网络。如果你需要设置端口转发,在防火墙里面另外设置。
          1. Linghu说道:
            Google Chrome Android 10
            好的谢谢!
          2. Linghu说道:
            Google Chrome Windows 10
            emmm我刚才试了下,还是无法访问国内的网站,浏览器会报connection refuse 和 address unreachable :lei:
  10. hank说道:
    Google Chrome Windows 10
    大神,我按照教程成功完成了安装运行正常了,也能异地组网访问了。 但是Openwrt系统在重新启动以后,Tailscale不能实现自动启动。我按照教程尝试了2-3次不成功。 爬网络看,有人说“将脚本设置为可执行文件,使用以下命令,chmod +x /etc/init.d/myscript” 再使用“使用以下命令,/etc/init.d/myscript enable” 帖子链接:https://www.cnblogs.com/conscience-remain/p/17386604.html 请问如何实现Tailscale开机自动启动?谢谢!!!
    1. 博主说道:
      Google Chrome Windows 10
      敲命令rm -rf /etc/rc.d/S*tailscale*删除tailscale的启动脚本,然后敲命令chmod 755 /etc/init.d/tailscale设置权限,再敲命令/etc/init.d/tailscale enable设置开机自启,最后敲命令ls /etc/rc.d/S*tailscale*查看设置是否成功。
      1. hank说道:
        Google Chrome Windows 10
        收到,等有空试一下!感谢!!!
      2. hank说道:
        Google Chrome Windows 10
        更新一下,按照您的新教程,可以自动启动使用了,感谢!!!
        1. 博主说道:
          Google Chrome Windows 10
          好的
      3. dudu说道:
        Google Chrome Windows 10
        但是这样操作的话路由表里面的tailscale项,引入不到其他设备的子网路由地址

发表回复