Tailscale Funnel
超级黑科技
-
不需要复杂的反向代理配置
-
不需要花钱注册域名
-
不需要进行备案
-
不需要任何的公网ip
-
直接把自己的服务免费搬上公网
这个是tailscale 的 beta 服务, 也就是还在测试阶段, 现在完全免费, 跑满带宽
nginx + tailscale funnel 一键配置
只需要一个命令, 可以把nginx监听的80端口流量全部代理到公网上
nginx 配置 (监听80端口 -> 本地 http://localhost:80/)
server {
listen 80; # 有这一行就不需要调整
listen [::]:80;
server_name localhost 127.0.0.1
location / {
root /var/www/html;
index index.html index.htm index.
}
}
tailsacale 配置
sudo tailscale funnel --bg --set-path / http://localhost:80
这条命令由几个关键部分组成:
tailscale funnel:核心指令,通知 Tailscale 创建一个从公网到你本地服务的加密隧道,并提供一个以 ts.net 结尾的固定域名
-
–bg:后台运行。加上它,关闭命令行窗口后服务也不会中断
-
–set-path /:设置访问路径为根路径 /。这意味着访问你的域名时,流量会被直接转发到后端服务,而不添加任何子路径
-
http://localhost:80:指定了流量的最终目的地,即你本地正在监听的 80 端口的 HTTP 服务
-
Funnel 负责处理公网入站流量并自动完成HTTPS加密,再通过安全的隧道将请求转发给你指定的本地服务 用户访问时,只能看到 Funnel 的入口,无法感知后端服务的真实细节。
基本介绍
tailscale funnel 并不是自己起一个服务, 它的作用是反向代理
-
什么是反向代理 ?
反向代理就是不暴露服务器真实端口的一种手段, 客户端只需访问特定的域名, 反向代理的服务就会把流量转发到对应的端口, 也就是起一个中间人的作用. 比如 https 的端口固定在443, 却可以实现很多服务, 本质上就是反向代理在工作, 比如反向代理中的规则是 /api -> 8000, 也就是客户端访问 域名/api, 之后, 就会向服务器上的8000端口发送请求并处理业务逻辑
-
tailscale funnel 需要什么条件才能起作用 ?
你的服务器端口(即使没有公网ip也行)必须要在监听状态, 为了实现这一点, 你可以使用诸如 python, node 或者其他的方法, 这里介绍最容易的python (毕竟所有的linux都自带)
# 这里做一个静态路径托管的实例
# 来到你需要托管的目录路径下 常用的是 /var/www/html/ 但是你可以在任何一个地方起服务
cd path/to/your/dict/
python -m http.server 8000 # 开放8000端口暴露当前目录下的文件, 也就是静态托管
这里做完之后, 我们就可以通过 http://localhost:8000/ 来访问这个文件夹下的东西了, 如果你有index.html 的话, 会直接显示相应内容
-
tailscale funnel 如何启动 ?
你需要先进行两个认证
# 直接输入这个命令, 如果尚未认证会自动弹出 网址让你认证, 你直接 ctrl 然后鼠标点就可以了 sudo tailscale funnel 8000
认证完成之后应该没有任何变化, 这个时候 ctrl + c中断这个命令, 重新执行, 直到所有认证完成
你会看到这样的画面, 这没有问题

- 当你做完所有的认证再次重启服务之后, 你会看到这样的画面(注意这个过程中不要关掉python的http本地服务)

这里带https协议的这个网址, 全世界都可以访问, 当然前提是你的python后端没有问题
进阶用法
- 后台静默运行(当然也可以使用tmux来替代, 只是这个自带的参数比较简单)
sudo tailscale funnel --bg 8000 # 在后台代理8000这个端口, 关掉这个终端之后, 服务不会终止
需要注意的是, 你的python服务很可能会因为你关掉终端而终止, 所以如果你有长期跑服务的需求, **建议使用tmux来保住进程**
- 查看 tailscale funnel 状态
```bash
# 如果你使用的是后台的运行的话, 这个还是很实用的
sudo tailscale funnel status
# 会显示你代理的端口和具体的https网址
-
停止反向代理
sudo tailscale funnel off -
清空所有已经配置的规则
sudo tailscale serve --reset -
路径转发 (最常用)
# 制定转发规则 sudo tailscale serve /api http://localhost:8080 sudo tailscale serve / http://localhost:3000 # 开启公网的服务 sudo tailscale funnel on
这个时候, 别人可以通过你的网址加上路径来访问不同端口的服务
两大原则
- Funnel 必须指向本地运行的端口
- 必须先启动服务, 再开Funnel
日常三步走
-
开启python或者其他的端口监听服务
建议用 tmux 保住服务 # tmux python -m http.server 8000 --bind 127.0.0.1 # 这里建议绑定 回环防止直接暴露端口到局域网 -
开启funnel
sudo tailscale funnel 8000 # 反向代理8000端口
-
查看公网地址
sudo tailscale status