惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Google DeepMind News
Google DeepMind News
Martin Fowler
Martin Fowler
T
Threatpost
云风的 BLOG
云风的 BLOG
博客园 - 司徒正美
C
CERT Recently Published Vulnerability Notes
V
Vulnerabilities – Threatpost
Help Net Security
Help Net Security
Project Zero
Project Zero
博客园 - 聂微东
博客园_首页
T
Tor Project blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
Visual Studio Blog
人人都是产品经理
人人都是产品经理
The Register - Security
The Register - Security
Latest news
Latest news
K
Kaspersky official blog
L
LINUX DO - 热门话题
P
Proofpoint News Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
美团技术团队
C
Cyber Attacks, Cyber Crime and Cyber Security
A
Arctic Wolf
aimingoo的专栏
aimingoo的专栏
J
Java Code Geeks
F
Full Disclosure
Recent Announcements
Recent Announcements
SecWiki News
SecWiki News
C
Cybersecurity and Infrastructure Security Agency CISA
F
Fortinet All Blogs
The Hacker News
The Hacker News
Apple Machine Learning Research
Apple Machine Learning Research
NISL@THU
NISL@THU
The GitHub Blog
The GitHub Blog
量子位
Hugging Face - Blog
Hugging Face - Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
P
Palo Alto Networks Blog
T
Troy Hunt's Blog
O
OpenAI News
T
Threat Research - Cisco Blogs
博客园 - Franky
Hacker News - Newest:
Hacker News - Newest: "LLM"
A
About on SuperTechFans
C
Check Point Blog
Hacker News: Ask HN
Hacker News: Ask HN
AWS News Blog
AWS News Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tenable Blog

浮华生

Elasticsearch 检索性能优化 - 浮华生 舆情监控系统综述 - 浮华生 2024 半年度总结 - 浮华生 2023 年终总结 - 浮华生 Kubernetes 部署 Elasticsearch 和 Kibana - 浮华生 2022 年终总结 - 浮华生 RabbitMQ connection channel 的关系 - 浮华生 Kafka Java 客户端 Producer 原理分析 - 浮华生 RabbitMQ 和 Kafka 应用原理简单对比 - 浮华生 阿里云 OpenSearch 介绍 - 浮华生 Golang Array 和 Slice 区别 - 浮华生 Mac OS 下打造 golang nvim 编程环境之基础配置 - 浮华生 电商搜索技术总结 - 浮华生 电商搜索业务总结 - 浮华生 2021 年终总结 - 浮华生 Cypress 实践总结 - 浮华生 年终总结 - 浮华生 关于我 - 浮华生 使用 cucumber 进行行为驱动开发(BDD) - 浮华生 微服务应用集成 SpringCloud 步骤 - 浮华生 电商搜索数据同步方案 - 浮华生 通过一道数值转换题重温计算机补码 - 浮华生 macOS 系统推荐的一些软件 - 浮华生 DevOps 实施规划(持续更新) - 浮华生 rabbitmq 如何提高可靠性并保证消费端幂等 - 浮华生 AMQ Model总结 - 浮华生 结对编程 - 浮华生 RSocket 介绍 - 浮华生 面向对象的理解 - 浮华生 企业平台技术框架 - 浮华生 对创业的思考 - 浮华生 知难行易 - 浮华生 一年工作经验总结 - 浮华生 我与领域驱动之缘 - 浮华生 TDD 中使用的工具 - 浮华生 tf-idf 算法 - 浮华生 gitlab 添加代码规范检测 - 浮华生 query 改写 - 浮华生 阶段性总结 - 浮华生 操作系统作用 - 浮华生 - 浮华生 hamming-distance - 浮华生 ElasticSearch API 基本操作 - 浮华生 elasticsearch 集群容错 - 浮华生 ElasticSearch 基础概念 - 浮华生 技术选型怎么做 - 浮华生 条件概率、全概率与贝叶斯公式 - 浮华生 年终总结 - 浮华生 迁移到 ubuntu18 的问题及配置 - 浮华生 总结 - 浮华生 使用 psi-probe 监控 Tomcat - 浮华生 Tomcat 远程 Debug - 浮华生 jstack 死循环和死锁定位 - 浮华生 jmap & mat 内存溢出 - 浮华生 JVM 常用参数查看 - 浮华生 周总结(8.13-8.19) - 浮华生 周总结(7.30-8.4) - 浮华生 使用移位运算符 - 浮华生 master 公式 - 浮华生 VMware 12 NAT网络下配置 ubuntu 16.04 LTS 系统静态 IP - 浮华生 关于进制的计算 - 浮华生 项目总结 第三篇 - 浮华生 项目总结 第二篇 - 浮华生 editor.md 富文本编辑器的使用 - 浮华生 项目总结 第一篇 - 浮华生 2017至今总结 - 浮华生 谈谈微服务 - 浮华生 单例模式 - 浮华生 tor 使用 - 浮华生 归档 - 浮华生 搜索 - 浮华生 搜索 && 推荐 - 浮华生
异地机器组网方案 - 浮华生
浮华生 · 2023-05-23 · via 浮华生

最近要自己做一些项目,需要用到 k8s,自己单机搭建比较耗费性能,于是就利用其他资源:一个台式机、一台笔记本、一台阿里云 ECS,那怎么将这三台机器组到一个局域网内呢?

通过调研,发现 tailscale 似乎满足方案,使用开源的 WireGuard 协议,能够 p2p 访问,但它是一个商业产品,有连接数的限制,如果个人开发是没什么问题的,但是以后连接的设备一多就需要交钱了。那有没有不收费的?有,headscale,这个是一个免费开源产品,实现了一个三方的 tailscale 控制服务器,这样连接数的限制就可控了,客户端依然使用 tailscale。下面看一下操作步骤(均在 root 权限下操作)。

机器配置:

ecs 1c2g

安装控制服务器(control server)

这个控终端最好装在不容易断电、重启的机器上,那 ecs 是最佳的选择

下载

1
2
3
4
5
# 下载服务端
wget --output-document=/usr/local/bin/headscale \
https://github.com/juanfont/headscale/releases/download/v0.22.3/headscale_0.22.3_linux_amd64
# 设置执行权限
chmod +x /usr/local/bin/headscale

配置环境

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#创建配置目录:
mkdir -p /etc/headscale

#创建目录用来存储数据与证书:
mkdir -p /var/lib/headscale
#创建目录用来存 so 文件
mkdir -p /var/run/headscale/

#创建空的 SQLite 数据库文件:
touch /var/lib/headscale/db.sqlite

touch /var/run/headscale/headscale.sock



# 从example 创建 Headscale 配置文件:
wget https://github.com/juanfont/headscale/raw/main/config-example.yaml -O /etc/headscale/config.yaml

修改配置文件

进入到 config.yaml 中修改以下几个点:

  • server_url: 设置为http://<公网 ip>:8080 这个要看你当前机器的公网 IP
  • randomize_client_port:设为 true

创建启动服务

1
vi /etc/systemd/system/headscale.service

粘贴下面命令

 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
# /etc/systemd/system/headscale.service
[Unit]
Description=headscale controller
After=syslog.target
After=network.target

[Service]
Type=simple
User=headscale
Group=headscale
ExecStart=/usr/local/bin/headscale serve
Restart=always
RestartSec=5

# Optional security enhancements
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/lib/headscale /var/run/headscale
AmbientCapabilities=CAP_NET_BIND_SERVICE
RuntimeDirectory=headscale

[Install]
WantedBy=multi-user.target

创建用户

1
2
3
4
5
6
7
8
# 创建 headscale 用户:

useradd headscale -d /home/headscale -m

# 修改 /var/lib/headscale 目录的 owner:

chown -R headscale:headscale /var/lib/headscale

启动

启动测试

使用 headscale serve 测试能否正常运行,如果不行根据报错信息修改问题,确认无误后使用 systemctl 启动

使用 systemctl 后台运行

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# Reload SystemD 以加载新的配置文件:

systemctl daemon-reload

#启动 Headscale 服务并设置开机自启:

systemctl enable --now headscale

# 查看运行状态:

systemctl status headscale

验证

1
2
3
4
5
6
7
# 查看运行状态:

systemctl status headscale

# 查看占用端口:

ss -tulnp|grep headscale

操作

headscale 中有个 namespace 的概念,用来区分不同用户的组网,之间不能互通,类似于多租户的概念

1
2
3
4
5
6
# 创建一个 namespace,以便后续客户端接入,例如:
headscale namespaces create default

# 查看命名空间:

headscale namespaces list

安装 MacOS 客户端

访问控制服务中配置的公网 ip 地址,<公网 ip>:8080/apple,会出现一个页面。

找到 macOS - Standalone Client 客户端并下载,这是一个 tailscale 的客户端,需要本机授权才能访问

打开后会在顶部菜单栏中出现一个图标 image-20230523111148146

配置

打开终端,执行下面命令

1
defaults write io.tailscale.ipn.macsys ControlURL http://<你的公网ip>:8080

此时需要登录 tailscale,按住 alt 点击顶部的 tailscale 图标,会出现 debug 按钮 image-20230523111842985

点击 debug-> login,将你的控制服务器地址填进去,<公网 ip>:8080 并登录。

认证

此时浏览器会弹出一个页面

image-20230523112105457

拷贝并粘贴到控制服务器所在的机器,我这里是 ecs,在 ecs 终端执行

1
headscale nodes register --user 配置的namespace --key nodekey:fcb4522440ce686210

如果成功的话会有下面提示:

1
Machine 你的namespace registered

使用下面命令查看当前网络加入的节点

安装 Linux 客户端

https://pkgs.tailscale.com/stable/ 找到你系统对应的版本

image-20230523112734307

我的是 centos,直接粘贴官方文档上的命令就可以了。

配置

启动

1
2
3
4
# 启动 tailscaled.service 并设置开机自启:
systemctl enable --now tailscaled
# 查看服务状态:
systemctl status tailscaled

连接

1
2
3
4
5
6
7
tailscale up --login-server=http://<公网 ip>:8080 --accept-routes=true --accept-dns=false
# 如果申请为虚拟网关,需要使用下面命令
#tailscale up --login-server=http://<公网 ip>:8080 --accept-routes=true --accept-dns=false --advertise-routes=<当前节点 ip>/24
# 打开转发
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

此时控制台会出现一个访问地址,拷贝出来用浏览器打开,会得到一串和上面 macos 认证一样命令,可以参考 macos 认证部分

验证

此时局域网内有两个节点能够相互访问,可以使用 下面命令查询当前网段下的节点信息

image-20230523113814723

我们可以使用 ping 命令相互 ping 一下,看是否能互通。

image-20230523113906985