技术文档收录
ASCII
Tcpdump
Linux
WireGuard 一键安装脚本 | 秋水逸冰
SSH Config 那些你所知道和不知道的事 | Deepzz's Blog
Linux 让终端走代理的几种方法
ubuntu 20.04 server 版设置静态 IP 地址 - 链滴
Linux 挂载 Windows 共享磁盘的方法 - 技术学堂
将 SMB/CIFS 网络硬盘永久的挂载到 Ubuntu 上 - 简书
linux 获取当前脚本的绝对路径 | aimuke
[Linux] Linux 使用 / dev/urandom 生成随机数 - piaohua's blog
Linux 生成随机数的多种方法 | Just Do It
Linux 的 Centos7 版本下忘记 root 或者普通用户密码怎么办?
Git 强制拉取覆盖本地
SSH 安全加固指南 - FreeBuf 网络安全行业门户
Linux 系统安全强化指南 - FreeBuf 网络安全行业门户
Linux 入侵排查 - FreeBuf 网络安全行业门户
sshd_config 配置详解 - 简书
SSH 权限详解 - SegmentFault 思否
CentOS 安装 node.js 环境 - SegmentFault 思否
如何在 CentOS 7 上安装 Node.js 和 npm | myfreax
几款 ping tcping 工具总结
OpenVpn 搭建教程 | Jesse's home
openvpn 一键安装脚本 - 那片云
OpenVPN 解决 每小时断线一次 - 爱开源
OpenVPN 路由设置 – 凤曦的小窝
OpenVPN 设置非全局代理 - 镜子的记录簿
TinyProxy 使用帮助 - 简书
Ubuntu 下使用 TinyProxy 搭建代理 HTTP 服务器_Linux_运维开发网_运维开发技术经验分享
Linux 软件包管理工具 Snap 常用命令 - 简书
linux systemd 参数详解
Systemd 入门教程:命令篇 - 阮一峰的网络日志
记一次 Linux 木马清除过程
rtty:在任何地方通过 Web 访问您的终端
02 . Ansible 高级用法 (运维开发篇)
终于搞懂了服务器为啥产生大量的 TIME_WAIT!
巧妙的 Linux 命令,再来 6 个!
77% 的 Linux 运维都不懂的内核问题,这篇全告诉你了
运维工程师必备:请收好 Linux 网络命令集锦
一份阿里员工的 Java 问题排查工具单
肝了 15000 字性能调优系列专题(JVM、MySQL、Nginx and Tomcat),看不完先收
作业调度算法(FCFS,SJF,优先级调度,时间片轮转,多级反馈队列) | The Blog Of WaiterXiaoYY
看了这篇还不会 Linux 性能分析和优化,你来打我
2019 运维技能风向标
更安全的 rm 命令,保护重要数据
求你了,别再纠结线程池大小了!
重启大法好!线上常见问题排查手册
Docker
「Docker」 - 保存镜像 - 知乎
终于可以像使用 Docker 一样丝滑地使用 Containerd 了!
私有镜像仓库选型:Harbor VS Quay - 乐金明的博客 | Robin Blog
exec 与 entrypoint 使用脚本 | Mr.Cheng
Dockerfile 中的 CMD 与 ENTRYPOINT
使用 Docker 配置 MySQL 主从数据库 - 墨天轮
Alpine vs Distroless vs Busybox – 云原生实验室 - Kubernetes|Docker|Istio|Envoy|Hugo|Golang | 云原生
再见,Docker!
Python
Pipenv:新一代Python项目环境与依赖管理工具 - 知乎
Python list 列表实现栈和队列
Python 各种排序 | Lesley's blog
Python 中使用 dateutil 模块解析时间 - SegmentFault 思否
一个小破网站,居然比 Python 官网还牛逼
Python 打包 exe 的王炸 - Nuitka
Window
批处理中分割字符串 | 网络进行时
Windows 批处理基础命令学习 - 简书
在Windows上设置WireGuard
Windows LTSC、LTSB、Server 安装 Windows Store 应用商店
中间件
Nginx 中的 Rewrite 的重定向配置与实践
RabbitMQ 的监控
RabbitMq 最全的性能调优笔记 - SegmentFault 思否
为什么不建议生产用 Redis 主从模式?
高性能消息中间件——NATS
详解:Nginx 反代实现 Kibana 登录认证功能
分布式系统关注点:仅需这一篇,吃透 “负载均衡” 妥妥的
仅需这一篇,妥妥的吃透” 负载均衡”
基于 nginx 实现上游服务器动态自动上下线——不需 reload
Nginx 学习书单整理
最常见的日志收集架构(ELK Stack)
分布式之 elk 日志架构的演进
CAT 3.0 开源发布,支持多语言客户端及多项性能提升
Kafka 如何做到 1 秒处理 1500 万条消息?
Grafana 与 Kibana
ELK 日志系统之通用应用程序日志接入方案
ELK 简易 Nginx 日志系统搭建: ElasticSearch+Kibana+Filebeat
记一次 Redis 连接池问题引发的 RST
把 Redis 当作队列来用,你好大的胆子……
Redis 最佳实践:业务层面和运维层面优化
Redis 为什么变慢了?常见延迟问题定位与分析
好饭不怕晚,扒一下 Redis 配置文件的底 Ku
rabbitmq 集群搭建以及万级并发下的性能调优
别再问我 Redis 内存满了该怎么办了
Nginx 状态监控及日志分析
数据库
SQLite全文检索
Mysql 查看用户连接数配置及每个 IP 的请求情况 - 墨天轮
防火墙-iptables
iptables 常用规则:屏蔽 IP 地址、禁用 ping、协议设置、NAT 与转发、负载平衡、自定义链
防火墙 iptables 企业防火墙之 iptables
Linux 防火墙 ufw 简介
在 Ubuntu 中用 UFW 配置防火墙
在 Ubuntu20.04 上怎样使用 UFW 配置防火墙 - 技术库存网
监控类
开箱即用的 Prometheus 告警规则集
prometheus☞搭建 | zyh
docker 部署 Prometheus 监控服务器及容器并发送告警 | chris'wang
PromQL 常用命令 | LRF 成长记
持续集成CI/CD
GitHub Actions 的应用场景 | 记录干杯
GithubActions · Mr.li's Blog
工具类
GitHub 中的开源网络广告杀手,十分钟快速提升网络性能
SSH-Auditor:一款 SHH 弱密码探测工具
别再找了,Github 热门开源富文本编辑器,最实用的都在这里了 - srcmini
我最喜欢的 CLI 工具
推荐几款 Redis 可视化工具
内网代理工具与检测方法研究
环境篇:数据同步工具 DataX
全能系统监控工具 dstat
常用 Web 安全扫描工具合集
给你一款利器!轻松生成 Nginx 配置文件
教程类
手把手教你打造高效的 Kubernetes 命令行终端
Keras 作者:给软件开发者的 33 条黄金法则
超详细的网络抓包神器 Tcpdump 使用指南
使用 fail2ban 和 FirewallD 黑名单保护你的系统
linux 下 mysql 数据库单向同步配置方法分享 (Mysql)
MySQL 快速删除大量数据(千万级别)的几种实践方案
GitHub 上的优质 Linux 开源项目,真滴牛逼!
WireGuard 教程:使用 Netmaker 来管理 WireGuard 的配置 – 云原生实验室 - Kubernetes|Docker|Istio|Envoy|Hugo|Golang | 云原生
Tailscale 基础教程:Headscale 的部署方法和使用教程 – 云原生实验室 - Kubernetes|Docker|Istio|Envoy|Hugo|Golang | 云原生
Nebula Graph 的 Ansible 实践
改进你的 Ansible 剧本的 4 行代码
Caddy 2 快速简单安装配置教程 – 高玩梁的博客
切换至 Caddy2 | 某不科学的博客
Caddy2 简明教程 - bleem
树莓派安装 OpenWrt 突破校园网限制 | Asttear's Blog
OpenVPN 路由设置 – 凤曦的小窝
个性化编译 LEDE 固件
盘点各种 Windows/Office 激活工具
[VirtualBox] 1、NAT 模式下端口映射
VirtualBox 虚拟机安装 openwrt 供本机使用
NUC 折腾笔记 - 安装 ESXi 7 - 苏洋博客
锐捷、赛尔认证 MentoHUST - Ubuntu 中文
How Do I Use A Client Certificate And Private Key From The IOS Keychain? | OpenVPN
比特记事簿: 笔记: 使用电信 TR069 内网架设 WireGuard 隧道异地组网
利用 GitHub API 获取最新 Releases 的版本号 | 这是只兔子
docsify - 生成文档网站简单使用教程 - SegmentFault 思否
【干货】Chrome 插件 (扩展) 开发全攻略 - 好记的博客
一看就会的 GitHub 骚操作,让你看上去像一位开源大佬
【计算机网络】了解内网、外网、宽带、带宽、流量、网速_墩墩分墩 - CSDN 博客
mac-ssh 配置 | Sail
如何科学管理你的密码
VirtualBox NAT 端口映射实现宿主机与虚拟机相互通信 | Shao Guoliang 的博客
CentOS7 配置网卡为静态 IP,如果你还学不会那真的没有办法了!
laisky-blog: 近期折腾 tailscale 的一些心得
使用 acme.sh 给 Nginx 安装 Let’ s Encrypt 提供的免费 SSL 证书 · Ruby China
acme 申请 Let’s Encrypt 泛域名 SSL 证书
从 nginx 迁移到 caddy
使用 Caddy 替代 Nginx,全站升级 https,配置更加简单 - Diamond-Blog
http.proxy - Caddy 中文文档
动手撸个 Caddy(二)| Caddy 命令行参数最全教程 | 飞雪无情的总结
Caddy | 学习笔记 - ijayer
Caddy 代理 SpringBoot Fatjar 应用上传静态资源
使用 graylog3.0 收集 open××× 日志进行审计_年轻人,少吐槽,多搬砖的技术博客_51CTO 博客
提高国内访问 github 速度的 9 种方法! - SegmentFault 思否
VM16 安装 macOS 全网最详细
2022 目前三种有效加速国内 Github
How to install MariaDB on Alpine Linux | LibreByte
局域网内电脑 - ipad 文件共享的三种方法 | 岚
多机共享键鼠软件横向测评 - 尚弟的小笔记
本文档发布于https://mrdoc.fun
-
+
首页
laisky-blog: 近期折腾 tailscale 的一些心得
> 本文由 [简悦 SimpRead](http://ksria.com/simpread/) 转码, 原文地址 [blog.laisky.com](https://blog.laisky.com/p/tailscale/) [近期折腾 tailscale 的一些心得](/p/tailscale/) ------------------------------------- 发布于:2021/10/24 15:10 近期折腾 tailscale 的一些心得 ==================== Changelog: * 2021/11/17: 改进 tailscale 的介绍 ![](https://s3.laisky.com/uploads/2021/10/Tailscale-Logo-Black.jpg) 一、我的需求 ------ 最近自己装了一台高配台式机,打算当作自己的主力机器使用,笔记本电脑就作为一个移动 UI,工作都远程连到家里台式机使用。 为了满足这个需求,就需要 NAT 穿透,正好最近 mesh vpn 的概念很火,又看到 tailscale 正好对个人用户免费,于是就想试试看了。 二、TailScale 是什么 --------------- VPN 是什么? 虽然国人看到 VPN 第一反应应该是 “翻墙”,但 VPN 最初应该也是最普遍的用途应该是用来做内网打通, 这也是其名字虚拟私有网络的用意,VPN 让你可以在公开的网络线路上建立一个私有的子网, 然后将所有接入的机器都分配一个私有的内网地址,让他们可以通过 VPN 的私有网络互联。 比如最常见的需求就是,公司有一个内网办公环境,当你外出办公时,也希望你的电脑能够接入办公网络。 因为外网的机器和内网的机器不能互联,所以一般会有一个中心服务器, 所有的子节点都和中心服务器相连,然后中心服务器转发所有的流量。 ![](https://s3.laisky.com/uploads/2021/11/hub.png) 这样做的缺点显而易见,首先是中心服务器(hub)会成为瓶颈。 其次,某种极端情况下,如果节点 A 和 节点 B 距离非常近,但是都离 hub 很远, 这样就会导致非常高的延迟。 ![](https://s3.laisky.com/uploads/2021/11/hub-2.png) 那么我们就会想,能不能让节点间直接互联呢? 这就是 mesh VPN,其实现就是 wireguard。 ![](https://s3.laisky.com/uploads/2021/10/scaleway-wireguard_mesh.png) wireguard 的每一个节点都会存储其他所有节点的信息,并且和其他所有的节点都建立 tls 连接。 如果涉及到内网穿透的话,那么你需要找到一台处于网关位置的节点(内外网都可达),将其设置为 coordinator, 扮演类似于 hub 的角色, 分发穿透内外网的流量。 wireguard 的缺点在于: * 配置比较繁琐 * 维护也比较困难,增删节点都需要改动所有节点的配置 基于上述这些痛点,tailscale 做了一些改进: 1. 在原有的 ICE、STUN 等 UDP 协议外,实现了 DERP TCP 协议来实现 NAT 穿透 2. 基于公网的 coordinator 服务器下发 ACL 和配置,实现节点动态更新 3. 通过第三方(如 Google) SSO 服务生成用户和私钥,实现身份认证 简而言之,我们可以认为 tailscale 是更为易用版的、功能封装更为完善的 wireguard。 三、TailScale 能做到什么 ----------------- 只要你的机器可以连到公网,tailscale 可以让所有的机器连接到同一个私有子网内。 你可以像在同一个局域网里那样,随时随地的连接你的任意设备。 比如现在我的台式机和我的笔记本都登录了同一个 tailscale 账号, 它们都共享同一个 `100.64/10` 的子网,也就是可以随时随地的互联。 即使我的笔记本在公司内网之中,无法和家里台式机直连,但是依靠 relay 转发流量, 两者依然可以畅通无阻的直接连接。 ### 1、传输文件 tailscale 内置 taildrop,可以在设备间传输文件,因为 tailscale 支持 android/ios/mac/windows/linux,所以实际上这也是一个很好用的全平台文件传输工具。 而且如果设备处在同一个局域网的话,传输速度也会非常快。 ### 2、远程开发 我家台式机安装的是 windows 系统,我启用了 wsl2,然后安装了 systemd、sshd。 笔记本上通过 vscode remote ssh 随时随地打开台式机上的 vscode server 进行远程开发。 这样做的一大优点是,台式机硬件的售价非常便宜,比如金士顿 32G 内存只要 880, 金士顿 1TB M2 SSD 也只要 800。WD 4TB 蓝盘不到 1 千,18 TB 黑盘也只要 2k。 也就是说,你可以用很低的成本组装一台超强配置的机器。 而同样的价钱去选购笔记本的话,只能买到很差的配置。 再说,我认为移动办公的精髓应该在与你可以随时随地的连接上一个统一且强大的工作环境, 而不是抱着同一台笔记本走南闯北。 ### 3、代理 tailscale 节点间是点对点 tls 连接,所以实际上也可以用来做网络代理。 比如我在境外服务器上安装一个 tailscale 的节点,然后再在境外服务器上安装一个 [cow](https://github.com/cyfdecyf/cow)(用来做 http proxy server)。 那我就可以在任意一台机器上,访问境外服务器的 tailscale 子网 IP + cow 端口的形式实现 HTTP/SOCKS 代理。 cow 的安装很简单: ``` curl -L git.io/cow | bash ``` 我选择将其安装到 `/usr/local/bin/cow`,然后配置文件 `/home/laisky/.cow/rc` 只需要一行: ``` listen = http://100.118.165.101:17777 ``` 可以将其添加进 systemd: ``` sudo vi /etc/systemd/system/cow.service [Unit] Description=cow service After=network.target StartLimitIntervalSec=0 [Service] Type=simple Restart=always RestartSec=1 User=laisky ExecStart=/usr/local/bin/cow -c /home/laisky/.cow/rc [Install] WantedBy=multi-user.target ``` 用 cow 当代理服务器是因为安装最方便,再说我此前本来也在用 cow,就顺便了。 四、安装、部署 ------- 参照这个官方页面安装,然后登录即可:[https://tailscale.com/download](https://tailscale.com/download) ### 1、自建中继 tailscale 提供的 relays 数量有限,而且全部在国外。 你也可以自建中继。 #### 安装 derper 自建中继服务器被称为 derper,是用 go 开发的,建议先安装 go 环境。 go 是预编译的,安装起来很简单,下载、解压即可。 拿 AMD64 linux 举例: ``` wget https://golang.org/dl/go1.17.2.linux-amd64.tar.gz tar -xzf go1.17.2.linux-amd64.tar.gz sudo mv go /opt/go sudo ln -s /opt/go/bin/* /usr/local/bin/ export GOROOT=/opt/go export GOPATH=/home/laisky/.go go version ``` 其他安装方式参考:[https://golang.org/doc/install](https://golang.org/doc/install) derper 的安装方式为: ``` # 安装 go install tailscale.com/cmd/derper@main # 启动 sudo derper -c=/root/derper.conf -hostname=xx.xx.xx -a=:443 -stun ``` 启动 derper 的参数: * `-hostname`:有效的公网域名,derper 会自动为这个域名申请 letsencrypt tls 证书。 * `-a`:指定 derper 监听的 tcp 端口,默认为 443,修改为其他端口的话似乎转发流量会有问题。 * `-stun`:stun 协议的 udp 端口,health check 的时候会用到。 需要注意的是,因为 derper 会申请公网 TLS 证书,如果你的服务器在国内,那么域名必须要备案。 而且由于中国封锁了 letsencrypt,所以你的 derper 在启动一会儿后,很可能会报这样的错: ``` http: TLS handshake error from client-a-ip:34379: acme/autocert: missing certificate ``` 上述错误表示证书申请失败,如果你有自己的证书的话,可以用 `-certmode=manual -certdir=xxx` 的形式指定证书文件夹。 顺带一提,如腾讯云这样的国内云服务器提供商,会审查 TLS handshake 里的 SNI 信息, 如果发现 SNI 域名未备案,会阻断 TLS 握手。 所以,我曾经也尝试过用一个境外服务器的域名,然后指向到境内服务器 IP 的形式尝试绕过备案, 然而短暂的用了几分钟后,就遇到了 tls handshake reset 的问题。 目前看来,只要你想用境内服务器,那么备案就是绕不过的问题。 Ps. 如果你有备案域名,那么可以用 nginx stream 反向代理的形式做 443 端口 4 层转发。 nginx stream 可以在四层探测 SNI 信息,然后分发到不同的后端,这样你 derper 的 443 和其他域名的 443 就可以共存在同一个服务器上了。 Ps2. 实际用下来之后,发现建设国内 derper 实际上也有问题。虽然因为境内延迟超低,在国内做穿透的时候会非常得爽。 但是如果要做跨境穿透,因为境内的 derper 和境外的 relays 通信也有干扰,很可能导致境内外的两个节点始终无法协商到同一个 relay 上。 综合而言,如果你仅有境内穿透的需求,那么搭一个境内 derper 会很爽;但如果你要跨境,那么在境外 HK、SG 等地搭一个 derper 可能更好。 因为 tailscale 的协议时常会更新,官方建议时不时重新执行一下 `go install tailscale.com/cmd/derper@main` 以更新 derper server。 derper 也可以加到 systemd 里自启动: ``` ➜ ~ sudo vi /etc/systemd/system/derper.service [Unit] Description=derper service After=network.target StartLimitIntervalSec=0 [Service] Type=simple Restart=always RestartSec=1 User=root ExecStart=/home/laisky/.go/bin/derper -c=/root/derper.conf -hostname=x.x.x.x -a :443 -stun [Install] WantedBy=multi-user.target ``` 你也可以在 go dockerfile 里执行上述步骤,然后以容器的形式运行 derper。 不过需要注意的是,因为 derper 会在后台申请 letsencrypt,你不要太频繁地对同一个域名创建运行容器, 否则很容易触发 letsencrypt 的频率限制(168hr 内申请 5 次。) #### 配置 ACL 安装好 derper 后,需要在网页上配置服务器信息,地址在 [https://login.tailscale.com/admin/acls](https://login.tailscale.com/admin/acls) ![](https://s3.laisky.com/uploads/2021/10/acl.png) 在其中加上一段 `derpMap`: ``` "derpMap": { "Regions": { "900": { "RegionID": 900, "RegionCode": "REGION_NAME", "Nodes": [ { "Name": "NODE_NAME", "RegionID": 900, "HostName": "xxx.xxx.com", // IPv4 可以不填,填的话可以绕过对域名的 DNS 解析 "IPv4": "x.x.x.x", } ] } } } ``` 其中 RegionID 必须是数字,而且必须是 9xx。 为了调试自己的 derper 是否可用,你可以先把官方的所有中继都禁用了: ``` "derpMap": { "OmitDefaultRegions": true, } ``` 在节点服务器上,需要重启 tailscaled 才能生效,win/mac 的话可以直接退出 tailscale 程序再重新打开。 linux 上,可以用: ``` sudo systemctl restart tailscaled ``` 重新进程后,可以查看 tailscale 网络的状态: ``` # 查看 relays 节点的列表和延迟,应该能看到你自己安装的 derper 节点 sudo tailscale netcheck # 查看当前 derper 和其他 derper 节点的连接状态 sudo tailscale status ``` 顺带一提,tailscale netcheck 实际上只 check 3478/udp 的端口, 就算 netcheck 显示能连,也不一定代表 443 端口可以转发流量。 最简单的办法是直接打开 [https://x.x.x.x](https://x.x.x.x) 的域名,如果看到如下页面,且地址栏的 SSL 证书标签显示正常可用,那才是真没问题了。 ![](https://s3.laisky.com/uploads/twitter/FCM_azhVcAc5Oxy.jpg) 分类:[技术笔记](/cate/it/) 标签:服务服务器节点务器安装 [评论](/p/tailscale/#disqus_thread)
Jonny
2022年1月8日 09:48
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
【腾讯云】爆款2核2G4M云服务器一年45元,企业首购最高获赠300元京东卡
【腾讯云】爆款2核2G4M云服务器一年45元,企业首购最高获赠300元京东卡
Markdown文件
Word文件
PDF文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
有效期