前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >比 Tailscale 更好的内网穿透方案 - Headscale

比 Tailscale 更好的内网穿透方案 - Headscale

作者头像
公众号: 云原生生态圈
发布2022-04-08 14:15:29
6.9K1
发布2022-04-08 14:15:29
举报
文章被收录于专栏:云原生生态圈

前言

headscale[1] 是一款今年 2021 年出现的一款 Tailscale 控制服务器的开源实现。也是唯一的一款。望能发展壮大。

环境

  1. Ubuntu 18.04.3(理论上正常支持 systemctl 的 Linux 发行版本都能搭建)
  2. 端口 8080
  3. 版本为 v0.11

注意事项

官方的当前时间也是本文章撰写的时间。最新版本的配置文件不兼容版本号为 v0.12.1

搭建过程

下载二进制文件与源代码

  • headscale_0.11.0_linux_amd64[2]
  • Source code (zip)[3]

文件

上传 headscale_0.11.0_linux_amd64 文件到/usr/local/bin并重命名为headscale并赋予执行权限

代码语言:javascript
复制
$ chmod 755 /usr/local/bin/headscale

登录服务器创建目录及文件

代码语言:javascript
复制
$ mkdir /etc/headscale
$ cd /etc/headscale
$ touch db.sqlite
$ touch config.yaml
$ touch derp.yaml

注意在 0.12 版本已不需要生成密钥会自动生成,或许需要安装wireguard我们是 0.11 版本所以需要手动生成

代码语言:javascript
复制
$ apt-get update
$ apt-get install wireguard
$ wg genkey > private.key

最后目录结构如下

代码语言:javascript
复制
root@10-255-1-181:/etc/headscale# tree
.
├── config.yaml
├── db.sqlite
├── derp.yaml
└── private.key

0 directories, 4 files
root@10-255-1-181:/etc/headscale#

填写 config.yaml 内容,内容来源于解压的 v0.11.0.zip 压缩包 config-example.yaml 内容

config-example

填写 derp.yaml 内容内容来源于解压的 v0.11.0.zip 压缩包 derp-example.yaml 内容

derp-example

撰写headscale.service

代码语言:javascript
复制
# /etc/systemd/system/headscale.service

[Unit]
Description=headscale
After=network.target

[Service]
WorkingDirectory=/etc/headscale
ExecStart=/usr/local/bin/headscale serve
# Disable debug mode
Environment=GIN_MODE=release

[Install]
WantedBy=multi-user.target

重载service与设置开机启动

代码语言:javascript
复制
$ systemctl daemon-reload
$ systemctl enable headscale
$ systemctl start headscale

状态

最后附上我的配置文件以供参考[4]

功能

首先看一下帮助文件

帮助

组网互联功能

控制端命令行下创建命名空间myfirstnamespace可以理解用户?

代码语言:javascript
复制
$ headscale namespaces create myfirstnamespace

客户端执行:

代码语言:javascript
复制
$ tailscale up --login-server YOUR_HEADSCALE_URL
##例子tailscale up --login-server http://headscale.gao4.top:8080

YOUR_HEADSCALE_URL 为服务器链接。

返回服务端命令行执行下面命令,意思是加入一个 myfirstnamespace 命名空间,YOURMACHINEKEY 为上面命令返回的密钥

代码语言:javascript
复制
$ headscale -n myfirstnamespace nodes register -k YOURMACHINEKEY

子网路由

当前时间段关于 headscale 中文教程谷歌几乎搜索不到,可以参考这个英文教材:

  • https://leffler.tech/2021/10/22/headscale-notes/

Linux 下设置 Ipv4 与 ipv6 路由转发

代码语言:javascript
复制
$ echo 'net.ipv4.ip_forward = 1' | tee /etc/sysctl.d/ipforwarding.conf
$ echo 'net.ipv6.conf.all.forwarding = 1' | tee -a /etc/sysctl.d/ipforwarding.conf
$ sysctl -p /etc/sysctl.d/ipforwarding.conf

客户端通告网段

代码语言:javascript
复制
$ tailscale up --advertise-routes=192.168.0.0/24 --login-server=https://headscale.domain.com

查看路由开启可以看到结果是关闭的:

代码语言:javascript
复制
$ headscale routes list --namespace $NAMESPACE $NODE_NAM
Route          | Enabled
192.168.0.0/24 | false

开启路由

代码语言:javascript
复制
$ headscale routes enable --namespace $NAMESPACE $NODE_NAME 192.168.0.0/24

查看结果

代码语言:javascript
复制
$ headscale routes list --namespace $NAMESPACE $NODE_NAME
Route          | Enabled
192.168.0.0/24 | true

其他节点查看路由结果

代码语言:javascript
复制
$ tailscale up --accept-routes --login-server=https://headscale.domain.com

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生生态圈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 环境
  • 注意事项
  • 搭建过程
    • 功能
      • 组网互联功能
      • 子网路由
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档