tailscale+headscale+derper+acme内网穿透
内网穿透的方法更改
之前一直是用 frp
作为内网穿透的工具,用起来的有一些不方便的地方,但是总比没有强
最近研究生考试刚结束,期末考试也结束了,留在学校没事干,就用 frp
内网穿透看放在家里的 NAS 上的番剧
就这么看了几天,突然脑子转过来了,查了一下用作中转服务的服务器的流量,这不看不知道,一看吓一跳,短短几天用掉了100-200G的流量,这我怎么受得了
于是我就找到了之前看到过的 ZeroTier
,在一个国内的服务器上搭建后,虽然内网穿透是实现了,但是走的是中转流量,这不还是要用掉大量的流量看番吗???
随即放弃 ZeroTier
方案,于是就找到了 tailscale
tailscale
用起来挺不错的,只是它的服务器搭建在国外,国内没有,所以速度会很慢,于是就想着自己搭建一个国内的管理器
前提知识储备
tailscale的工作由协调服务器和中转服务器完成,协调服务器用于让已验证的tailscale客户端建立p2p连接,中转服务器用于保证连接的正常进行
在网络通畅的情况下,协调服务器会让两个tailscale客户端完成p2p连接的建立,两台客户端建立连接完成后,就可以愉快的进行数据交换了,没有中转服务器的事,但是问题就是出在这,如果p2p连接建立失败,那么就需要中转服务器进行中转,以达到连接建立的目的
如果直接使用tailscale官方的服务,那么什么都不需要搭建,安装好tailscale客户端执行登录命令就可以连接
1 |
|
但是,如果不想使用tailscale官方的服务,那么就需要自己搭建了
此处搭建的中转服务器就是DERP服务,协调服务器就是headscale服务器
准备工作
我用的方案是最简单的方案,一台derper服务器,一台headscale,分别搭建在两个VPS上,这样不容易产生端口冲突的问题(因为我碰到了这样的问题),于是先准备如下材料
1 |
|
域名可以在namesilo上购买,一个 .top
的域名也就1、2美元一年
并创建一个 A
记录指向用于搭建derper的服务器的IP地址
搭建derper的服务器放行 3478(UDP)
端口,放行任意一个高位 TCP
端口(此处我使用的是12150端口)
搭建headscale服务器放行任意一个高位 TCP
端口(此处我用的是37125端口)
搭建derp服务
derper服务需要使用域名,虽然有不使用域名的方案,但是我还没用,先要域名解析到derper服务器
acme 申请证书
安装acme.sh
1 |
|
安装 socat
1 |
|
使用acme申请letsencrypt免费证书
1 |
|
创建 /opt/derper
目录
1 |
|
并导出证书到此处
1 |
|
安装golang
按照 go.dev 官网的方法,安装最新的golang
下载最新的golang包
1 |
|
删除可能残留的golang并安装最新的golang
1 |
|
将golang添加到环境变量中,可以将下列语句添加到 /etc/profile
中
1 |
|
如果添加了,source一下
1 |
|
查看是否安装成功
1 |
|
安装derp
首先将derp项目拉到本地,同时会把已将编译好的二进制也拉过来
1 |
|
将编译好的derp放到 /opt/derper
中
1 |
|
编辑 /etc/systemd/system/derper.service
文件,写入如下内容
1 |
|
其中 ExecStart
中的 -a
后面的参数就是derper服务器防火墙需要放行的端口,而 -http-port
仅为了防止端口冲突,随便设置一个就好了,如果这个服务器是一个人用的,可以追加 --verify-clients
参数,只允许验证过的客户端使用这个derper服务器
启动并设置开机启动derp
1 |
|
浏览器访问 域名:12150
可以看到derper搭建完成
搭建headscale
headscale是用于连接建立的服务器,流量要求比较小,搭建的headscale可以顺便安装一个ui,不过用处不大,命令行足够了
安装headscale服务
在headscale release中找到适合的deb包,下载到服务器上
安装
1 |
|
设置开机自启动
1 |
|
修改headscale配置文件
编辑 /etc/headscale/config.yaml
文件,修改如下配置,端口记得防火墙放行
1 |
|
设置反向代理
安装nginx
1 |
|
编辑 /etc/nginx/sites-available/default
文件,添加如下配置
1 |
|
这样就可以启动nginx和headscale了
1 |
|
headscale使用自己搭建的derp服务器
编辑 /etc/headscale/derp.yaml
文件,添加如下配置
1 |
|
在编辑 /etc/headscale/config.yaml
文件,修改如下配置
1 |
|
重启headscale服务
1 |
|
tailscale客户端加入headscale中
headscale先创建用户,以便tailscale客户端注册验证
1 |
|
tailscale客户端执行如下命令加入headscale协调服务器中,并验证
1 |
|
这回跳出一个网址,复制该网址到浏览器打开,会获得一串验证密钥
在headscale端执行验证命令即可
1 |
|
连接完成后,可以通过命令查看连接的状态
1 |
|
可能会遇到的问题
如下是我碰到的几个问题以及它们的解决方案
derper无法连接的问题
首先先看一下是否正确搭建了derper服务,如果都没问题,看看是否在搭建derper服务时,添加了 --verify-clients
参数
如果是因为添加了 --verify-clients
参数的原因导致的,那么 derper 服务器也安装 tailscale 并注册到 headscale 中就可以了
DNS 覆盖(overwriting)问题
目前只出现在了 Arch Linux 的 tailscale 客户端上,原因是 dhcpcd
服务器会修改 DNS 的配置导致的,所有做如下修改即可
不允许dhcpcd修改resolve.conf配置,修改 /etc/dhcpcd.conf
文件,添加如下配置
1 |
|
重启dhcpcd服务
1 |
|
不允许NetworkManager修改resolve.conf配置,修改 /etc/NetworkManager/NetworkManager.conf
文件,添加如下配置
1 |
|
重启服务NetworkManager服务
1 |
|
让systemd-resolved来管理resolve.conf配置
1 |
|
重启tailscale服务
1 |
|
考完研了,又有大把的时间可以折腾了(ゝ∀・)b
该说折腾了个tailscale是省了流量吗,毕竟为了搭建tailscale用了整整3天,踩了好多的坑,做梦都在敲命令(☍﹏⁰)
然后折腾着折腾着,我已经到家了,不需要内网穿透,直接用内网就能不用流量开看了(。ŏ_ŏ)
嘛,至少我有学会了个新技能不是吗
不过这个假期也不能全拿来折腾了,还得准备考研复试和毕业设计呢( º﹃º )