用自定义域名访问Tailscale节点

news2024/11/17 23:55:13

在这里插入图片描述

需求

tailscale 是好东西,在任何地方都可以和在局域网访问一样,但是也有着 IP 访问的不便,一方面 IPtailscale 分配的(非子网路由模式),另一方面还要记住各种端口

tailscale 也考虑到了这些问题,所以推出了 MagicDNS,允许你为 tailscale网络中的节点配置 SSL 证书,让你可以通过域名来访问

在这里插入图片描述

但这种方式也不好用,因为:

  • 这个域名中后面的 tailnet name 也是固定分配的,又长又难记;
  • 一个节点(也就是一台设备),只能有一个域名,这也就导致只能是类似 DDNS 的用法,每个服务都要加端口访问;
  • 最重要的是,老苏不会玩。在群晖上执行 tailscale cert ds3617xs.tailxxxxx.ts.net 获取证书时遇到了错误,一直也没找到解决的办法
500 Internal Server Error: acme.GetReg: Get "https://acme-v02.api.letsencrypt.org/directory": tls: failed to verify certificate: x509: certificate signed by unknown authority

老苏理想中的玩法应该是👇这样的:

  • 不需要公网 IP,因为 vps 不便宜;
  • 能使用自定义域名,毕竟老苏在 freenom申请了好几个好记的短域名;
  • 能够让 tailnet 中的节点能够支持泛域名,这样就不用记端口了;
  • 最好能使用默认的 80443 端口,这样就不用带尾巴了;

解决方案

老苏设想了下面的应用场景:

在这里插入图片描述

  1. 访问机器上安装 tailscale 客户端;
  2. 群晖上也要安装 tailscale 套件,假设其 tailscale IP100.x.y.z
  3. 因为访问机器上已经安装了 tailscale 客户端,所以我们可以将 100.x.y.z 视为是公网 IP,我们需要将域名解析到 100.x.y.z
  4. 但实际上100.x.y.z 并不是公网 IP,所以 SSL 证书无法通过 HTTP 方式验证,而只能通过 DNS 方式验证;
  5. 要想使用默认的 80443 端口,需要更改群晖 WebStation 的默认端口;
  6. 使用 npm 作为反代服务器,并自动完成 SSL证书的申请和管理;

思路理顺了,接下里就是按部就班的实施、验证了

DNS 解析

老苏选择了 cloudflareDNS 解析

浏览器中打开 https://dash.cloudflare.com/ ,先 添加站点,然后添加 DNS 记录

在这里插入图片描述

  1. 只要添加两条 A 记录,一条名称是 @,一条名称是 *
  2. 关闭代理,仅使用 DNS

Cloudflare API 令牌

在此处创建 Cloudflare API 令牌:https://dash.cloudflare.com/profile/api-tokens

创建令牌

在这里插入图片描述

拉到最下面,创建自定义令牌

在这里插入图片描述

检查权限设置

  • 区域:区域:读取
  • 区域:DNS:编辑

在这里插入图片描述

如果你是英文界面,应该是这样

在这里插入图片描述

确认权限

在这里插入图片描述

创建令牌

【注意】:这个令牌只会显示一次,请务必保存好

在这里插入图片描述

修改 WebStation 端口

SSH 客户端登录到群晖,在命令行执行下面的命令

# 进入目录
cd /usr/syno/share/nginx

用内置的 vi编辑器修改 server.mustacheDSM.mustacheWWWService.mustache 中的 80443 端口改为1508015443

老苏只改了 IPv4,没有改 IPv6,当然你要都改,也没问题;

在这里插入图片描述

重启 WebStation,可以在套件中心中操作,也可以用命令行

# 重启 WebStation套件
synoservice --restart  pkgctl-WebStation

在这里插入图片描述

再次查看端口,nginxIPv4 已经变成了 15080

在这里插入图片描述

这样修改带来的后遗症就是,假如原本访问 phpMyAdminhttp://192.168.0.197/phpMyAdmin/,现在要加上端口 15080 ,变成 http://192.168.0.197:15080/phpMyAdmin/,这个问题,后面用域名很容易解决

安装 npm

如果是新安装,将下面的内容保存为 docker-compose.yml 文件

本次安装使用了默认的 SQLite 作为数据库,如果要使用 MySQL,可以去看往期的文章

version: '3'

services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    container_name: npm
    restart: unless-stopped
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

然后执行下面的命令

# 新建目录
mkdir -p /volume1/docker/npm/{data,letsencrypt}

# 进入目录
cd /volume1/docker/npm

# 将 docker-compose.yml 放入当前目录

# 一键启动
docker-compose up -d

如果已经安装过 npm,只要修改端口就可以, npm 前置的 frp或者 cloudflard 转发的端口也要同步修改,这样可以多个应用共用同一个 npm

证书设置

Add SSL Certification --> Let's Encrypt

在这里插入图片描述

启用 Use a DNS Challenge 才是 DNS 验证

在这里插入图片描述

  • Domain Names 中填 *.域名,例如 *.laosu.ml
  • DNS Provider 中选择 Cloudflare
  • Credentials File Content 中,涂抹的地方,填入之前获取的 Cloudflare API 令牌

更详细的说明可以去看『 nginx-proxy-manager在线申请证书』

在这里插入图片描述

稍等一会儿,就会看到证书,有效期是 3 个月,到期会自动续期

在这里插入图片描述

示例

将本机的 npm 管理界面反代处理

如果服务在其他主机上,IP 可以填局域网 IP ,也可以填 Tailscale IP

在这里插入图片描述

证书选择前面申请的 Cloudflare 证书

在这里插入图片描述

现在在浏览器中直接打开 https://npm.laosu.ml 就会看到登录界面了

在这里插入图片描述

共享服务

到目前为止,只有你自己(Tailscale 管理员),有权访问这些服务。

当你希望将服务分享给别人时,可以在 https://login.tailscale.com/admin/machines 中,生成分享链接

在这里插入图片描述

虽然老苏没试过分享,但是从原理来说,肯定是没问题的

小结

这是目前老苏找到的最安全的一种随时随地访问群晖服务的方案

  • 不需要买 vps更省钱
  • 虽然使用域名,但没有公网 IP,所以更安全
  • 相比纯 Tailscale IP,不用记 IP 和端口,使用更简单
  • 相比 cloudflare tunnel,因为未使用 Cloudflare代理,所以带宽和流量都没有了限制,使用起来更放心

如果大家还在找内网穿透方案,老苏强烈建议你试试这个,当然,如果你清楚了这里面的逻辑,Zerotier 等其他的 vpn 应该也是可以这么折腾的

参考文档

Failed to get cert on Synology · Issue #4060 · tailscale/tailscale
地址:https://github.com/tailscale/tailscale/issues/4060

Tailscale to the Rescue - Self-Hosted Services without Port-Forwarding + your Domain and SSL Certificates
地址:https://www.ajfriesen.com/tailscale-to-the-rescue/

Exploring the Tailscale-Traefik Integration | Traefik Labs
地址:https://traefik.io/blog/exploring-the-tailscale-traefik-proxy-integration/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/682114.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot 使用 TestRestTemplate 进行 RESTful API 集成测试

SpringBoot 使用 TestRestTemplate 进行 RESTful API 集成测试 RESTful API 集成测试是测试应用程序与其外部依赖项之间的集成。SpringBoot提供了TestRestTemplate来测试RESTful API,本文将介绍如何使用TestRestTemplate进行RESTful API集成测试。 1. 什么是 TestR…

java File类 和 IO流

File类 文件和文件夹(文件路径)的抽象表示,是专门来出来磁盘上面的文件或文件夹的 构造方法 方法 返回boolean creatNewFile() 生成一个文件,当且仅当具有该名称的文件尚不存在时 public class Demo02 {public static void main(String[] args) th…

知了汇智网安项目实训助力高校实战型人才培养

当前,随着信息技术的高速发展和网络的普及应用,网络安全面临着日益复杂和严峻的挑战。恶意黑客、网络病毒、数据泄露等安全威胁不断涌现,给个人、企业和国家的信息资产和社会稳定带来了巨大风险。新形势之下,培养网络安全实战型人…

深眸科技受邀参加昆山元宇宙装备展与产业论坛,为工业视觉注智赋能

为落实《“十四五”数字经济发展规划》,进一步夯实元宇宙在终端装备领域的落地与拓展,江苏昆山将于6月27至29日,举办“2023元宇宙装备展”。本届展会由昆山市人民政府主办,昆山市工业和信息化局、赛迪工业和信息化研究院集团&…

力扣题库刷题笔记8--字符串转换正数(atoi)

1、题目如下: 2、个人Python代码实现如下: 这里可以看到,解答错误很多次,实际上就是对于题目的条件读的不够细,导致很多边界值的用例跑不过。而且个人习惯极其不好,没有输入各种可能的输入进行调试&#xf…

【计算机网络自顶向下】计算机网络期末自测题(一)答案

2019-2020 学年第 2 学期自测题答案及评分标准 (卷 1) 计算机网络 一、 填空题: 参考答案: 1 、 01000101 、11100111 3 、 100Mbps、双绞线、基带、全双工 [10Mbps 要求单位] 4 、 报文 5 、 ICMP 6 、 虚电路 7 、 距离矢量、链路状态 …

考虑充电负荷空间可调度特性的分布式电源与电动汽车充电站联合配置方法(matlab代码)

目录 1 主要内容 目标函数 电动汽车负荷建模 算例系统图 程序亮点 2 部分代码 3 程序结果 ​4 下载链接 1 主要内容 该程序复现博士文章《互动环境下分布式电源与电动汽车充电站的优化配置方法研究》第四章《考虑充电负荷空间可调度特性的分布式电源与电动汽车充电站联…

【抗扰PID控制】干扰抑制PID控制器研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Excel管理工具简陋但强大 vs 雷军为何说“没有设计是最好的设计

解密:雷军为何说“没有设计是最好的设计” 雷军洗白:没有刻意的设计才是最好的设计! 有的人开发了10个到50个,甚至几百个Excel管理工具。每个工具里面有VBA代码几千行。 还有个高手,趁过年一个月左右时间完成一个公司用…

SAP ABAP DIALOG 表格控件的简单例子<转载>

本文是一个很见到的ALV表格控件例子,但是原文作者写的很详细,所以借过来一用,很适合新手练手用。在这里感谢原文作者大大! 原文链接:https://mp.weixin.qq.com/s/bhP3w5DIADdf9P624C5kpw 表格控件是ABAP编程中最常用的…

0基础学习VR全景平台篇第48篇:高级功能-密码访问

功能位置示意 一、本功能将用在哪里? 密码访问功能,常用于暂未交付的项目,使用密码访问保护作品数据的私密性; 或为满足不同情境下的推广需求使用。 二、如何使用本功能? 1、选择-密码访问功能; 2、输入…

nvm使用大全nvm如何动态切换node版本

注意: nvm use node版本时,要使用管理员权限打开cmd输入命令,否则报错 常用命令 nvm ls :列出所有已安装的 node 版本 nvm list :列出所有已安装的 node 版本 nvm list available :显示所有可下载的版本 …

较旧系统的轻量级的LINUX发行版—FATDOG64

导读我们回顾FatDog64 Linux,这个轻量级的Linux发行版可能不是现代的,但它非常适合于老化的计算机,fatdog64 Linux是一个小而灵活的64位多用户Linux发行版。 有一个Linux发行版几乎每一个都需要,有Linux分布的黑客,天…

【NLP】Word2vec概念和演进史

一、说明 “万物都有一种模式,它是我们宇宙的一部分。它具有对称、优雅和优雅——这些品质你总能在真正的艺术家捕捉到的作品中找到。” ~ 沙丘 (1965) 对于word2vec,它不是一个或一种算法,而是一系列思想和算法的综合。本文通过有限篇幅&…

信创优选,国产开源,Solon v2.3.6 发布

Solon 是什么开源项目? 一个,Java 新的生态型应用开发框架。它从零开始构建,有自己的标准规范与开放生态(历时五年,已有全球第二级别的生态)。与其他框架相比,它解决了两个重要的痛点&#xff…

uniapp中小程序的生命周期

一、uni-app应用生命周期 函数名说明onLuaunch当uni-app 初始化完成时触发(全局只触发一次)onShow当 uni-app 启动,或从后台进入前台显示onHide当 uni-app 从前台进入后台onError当 uni-app 报错时触发onUniNViewMessage对 nvue 页面发送的数…

linux下查看某进程内有多少个线程的方法(ps、top、Htop)

文章目录 1 确认进程号2 方式一:ps(查看指定进程内的线程情况)3 方式2:使用top(实时显示指定线程内各个线程情况)4 方式3:使用htop5 传递signal给指定PID:kill -signal PID 1 确认进…

MySQL调优---文件排序(FileSort)详解

目录 产生 分类对比 产生情况 进行优化 产生 如果索引不能用于满足ORDER BY子句,MySQL将执行filesort读取表行并对它们进行排序的操作用Explain语句可以看到最后一列显示using filesortEXPLAIN展示的执行计划的Extra这个字段中的“Using filesort”表示的就是需…

DEV中TextEdit的keydown事件与click事件

DEV中TextEdit的keydown事件与click事件 gridview中加了一列textedit,并给其加了keydown事件,里面调用了另一个gridview1。 现在想给click事件也加上相同的功能,但是不管是复制相同的代码还是直接调用keydown事件,gridview1都调不…

django线上兼职平台系统-计算机毕设 附源码83320

django线上兼职平台系统 摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对线上兼职等问题&am…