<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>内网穿透 on 寻 Mi 处</title>
        <link>https://blog.mibase.top/tags/%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F/</link>
        <description>Recent content in 内网穿透 on 寻 Mi 处</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <lastBuildDate>Tue, 10 Mar 2026 18:25:00 +0800</lastBuildDate><atom:link href="https://blog.mibase.top/tags/%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>卸载了向日葵和 ToDesk，我用 Tailscale 连回了家里的电脑</title>
            <link>https://blog.mibase.top/p/%E5%8D%B8%E8%BD%BD%E4%BA%86%E5%90%91%E6%97%A5%E8%91%B5%E5%92%8C-todesk%E6%88%91%E7%94%A8-tailscale-%E8%BF%9E%E5%9B%9E%E4%BA%86%E5%AE%B6%E9%87%8C%E7%9A%84%E7%94%B5%E8%84%91/</link>
            <pubDate>Tue, 10 Mar 2026 18:25:00 +0800</pubDate>
            <guid>https://blog.mibase.top/p/%E5%8D%B8%E8%BD%BD%E4%BA%86%E5%90%91%E6%97%A5%E8%91%B5%E5%92%8C-todesk%E6%88%91%E7%94%A8-tailscale-%E8%BF%9E%E5%9B%9E%E4%BA%86%E5%AE%B6%E9%87%8C%E7%9A%84%E7%94%B5%E8%84%91/</guid>
            <description>&lt;img src=&#34;https://blog.mibase.top/p/%E5%8D%B8%E8%BD%BD%E4%BA%86%E5%90%91%E6%97%A5%E8%91%B5%E5%92%8C-todesk%E6%88%91%E7%94%A8-tailscale-%E8%BF%9E%E5%9B%9E%E4%BA%86%E5%AE%B6%E9%87%8C%E7%9A%84%E7%94%B5%E8%84%91/cover.jpg&#34; alt=&#34;Featured image of post 卸载了向日葵和 ToDesk，我用 Tailscale 连回了家里的电脑&#34; /&gt;&lt;p&gt;我出门在外的时候，经常要连回出租屋里的台式机。&lt;/p&gt;&#xA;&lt;p&gt;有时候是要跑一个本地才有的编译环境，有时候是要从家里那台机器上拷个文件，有时候纯粹是想用大屏幕看个东西。&lt;/p&gt;&#xA;&lt;p&gt;最早用的是向日葵，免费版画质一般，而且经常提示&amp;quot;当前为免费通道，画质受限&amp;quot;。后来换了 ToDesk，好一些，但免费版有连接时长限制，一个月四十小时，用超了就得等。&lt;/p&gt;&#xA;&lt;p&gt;更让我介意的是，这两个软件都要经过它们自己的服务器中转。我不知道我的屏幕画面在中间经过了什么，这让我不太舒服。&lt;/p&gt;&#xA;&lt;p&gt;后来在论坛上看到有人提 Tailscale，说是基于 WireGuard 的组网工具，免费版给一百个设备。我试了一下，之后就再也没打开过那两个软件。&lt;/p&gt;&#xA;&lt;h2 id=&#34;它解决的是什么问题&#34;&gt;它解决的是什么问题&#xA;&lt;/h2&gt;&lt;p&gt;先说清楚它不是什么。&lt;/p&gt;&#xA;&lt;p&gt;它不是远程桌面软件。它做的是组网，让你的设备之间能像在同一个局域网里一样互相访问。&lt;/p&gt;&#xA;&lt;p&gt;组好网之后，你可以用任何远程桌面工具连过去，Windows 自带的 RDP、macOS 的屏幕共享、VNC、甚至 &lt;code&gt;ssh -X&lt;/code&gt;。因为从系统的角度看，对面就是局域网里的另一台机器。&lt;/p&gt;&#xA;&lt;p&gt;它也不是传统的 VPN。传统的 VPN 是星型结构，所有流量都经过中心服务器。Tailscale 是网状结构，两台设备之间尽量直连，服务器只负责协调和 NAT 穿透。&lt;/p&gt;&#xA;&lt;p&gt;这个区别很重要。直连意味着低延迟，也意味着数据不经过第三方。&lt;/p&gt;&#xA;&lt;h2 id=&#34;底层是-wireguard&#34;&gt;底层是 WireGuard&#xA;&lt;/h2&gt;&lt;p&gt;WireGuard 是这几年很火的一个 VPN 协议，已经进了 Linux 内核。它的特点是代码量小、性能好、配置简单。&lt;/p&gt;&#xA;&lt;p&gt;Tailscale 用的是 WireGuard 做数据平面，自己做了控制平面。控制平面负责设备注册、密钥分发、NAT 穿透协调。数据平面是设备之间的 WireGuard 隧道。&lt;/p&gt;&#xA;&lt;p&gt;所以它的流量是端到端加密的，中间没有任何人能看懂。就算是 Tailscale 自己的服务器，也只能看到谁和谁在通信，看不到内容。&lt;/p&gt;&#xA;&lt;p&gt;这个架构比传统的 VPN 好很多，也比那些中转式的内网穿透工具好。&lt;/p&gt;&#xA;&lt;h2 id=&#34;装&#34;&gt;装&#xA;&lt;/h2&gt;&lt;p&gt;官网下载对应平台的安装包，一路下一步。&lt;/p&gt;&#xA;&lt;p&gt;Windows、macOS、Linux、iOS、Android、甚至群晖和 OpenWrt 都有客户端。&lt;/p&gt;&#xA;&lt;p&gt;Linux 上最方便的是官方脚本：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://tailscale.com/install.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sh&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;它会自动识别发行版，配好软件源，装完就能用。&lt;/p&gt;&#xA;&lt;h2 id=&#34;登录&#34;&gt;登录&#xA;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo tailscale up&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;它会输出一个链接，复制到浏览器打开，用 Google、GitHub 或者微软账号登录。&lt;/p&gt;&#xA;&lt;p&gt;登录之后，这台设备就出现在你的管理后台里了。后台地址是 &lt;code&gt;https://login.tailscale.com/admin/machines&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;每台设备会分到一个 &lt;code&gt;100.x.x.x&lt;/code&gt; 的地址，这个网段是 Tailscale 专用的，叫 CGNAT 段，和公网地址不冲突。&lt;/p&gt;&#xA;&lt;p&gt;我给每台设备都改了名字，方便识别。后台里点设备名就能改。&lt;/p&gt;&#xA;&lt;h2 id=&#34;把第二台也接进来&#34;&gt;把第二台也接进来&#xA;&lt;/h2&gt;&lt;p&gt;同样的流程，装完登录同一个账号。&lt;/p&gt;&#xA;&lt;p&gt;登录之后，两台设备之间就通了。在 A 上 &lt;code&gt;ping 100.x.x.x&lt;/code&gt;（B 的地址）应该能通。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tailscale status&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这个命令能看到所有设备的状态，包括是否直连、延迟多少。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;100.64.0.1   desktop-win    mingyue@  windows  -&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;100.64.0.2   laptop-mac     mingyue@  macOS    active; direct 192.168.1.5:41641, tx 1234 rx 5678&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;100.64.0.3   vps-hk         mingyue@  linux    active; relay &amp;#34;hkg&amp;#34;, tx 999 rx 888&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;&lt;code&gt;direct&lt;/code&gt; 表示两台设备直连，后面的地址是实际的公网 IP 和端口。&lt;code&gt;relay&lt;/code&gt; 表示没能直连，走了中继，延迟会高一些。&lt;/p&gt;&#xA;&lt;h2 id=&#34;magicdns&#34;&gt;MagicDNS&#xA;&lt;/h2&gt;&lt;p&gt;Tailscale 有个功能叫 MagicDNS，它会给每台设备分配一个域名，形如 &lt;code&gt;设备名.你的账号名.ts.net&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;开了之后，你不需要记 IP，直接用名字访问：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ping desktop-win&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh laptop-mac&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这个在设备多了之后特别方便。IP 是会变的，名字不会。&lt;/p&gt;&#xA;&lt;p&gt;在后台的 DNS 页面里开启。开启之后，Tailscale 会接管设备的 DNS 解析，把 &lt;code&gt;*.ts.net&lt;/code&gt; 的查询指向自己的解析器。&lt;/p&gt;&#xA;&lt;p&gt;这个接管可能会和你的其他 DNS 配置冲突。如果你用了 Pi-hole 或者自定义的 DNS，要注意一下。&lt;/p&gt;&#xA;&lt;h2 id=&#34;远程桌面&#34;&gt;远程桌面&#xA;&lt;/h2&gt;&lt;p&gt;组好网之后，远程桌面就简单了。&lt;/p&gt;&#xA;&lt;p&gt;Windows 那边，先在系统设置里开启&amp;quot;远程桌面&amp;quot;，然后在另一台机器上：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mstsc /v:desktop-win&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;或者用 Microsoft Remote Desktop 客户端，地址填 &lt;code&gt;desktop-win&lt;/code&gt; 或者 &lt;code&gt;100.64.0.1&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;macOS 那边，开启&amp;quot;屏幕共享&amp;quot;，然后：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;open vnc://laptop-mac&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;Linux 上可以用 &lt;code&gt;xrdp&lt;/code&gt; 或者 &lt;code&gt;gnome-remote-desktop&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;我平时用的是 Windows 自带的 RDP。画质可以调，延迟低，而且支持多显示器。比那些第三方软件流畅多了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;subnet-router让整个局域网都通&#34;&gt;subnet router：让整个局域网都通&#xA;&lt;/h2&gt;&lt;p&gt;这是我最喜欢的功能。&lt;/p&gt;&#xA;&lt;p&gt;Tailscale 默认只让你访问装了客户端的设备。但如果你家里有一台 NAS、一台打印机、一个树莓派，不可能每台都装客户端。&lt;/p&gt;&#xA;&lt;p&gt;subnet router 的作用是，让一台设备充当网关，把整个局域网的路由转发出去。&lt;/p&gt;&#xA;&lt;p&gt;在家里那台常年开着的小主机上：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;net.ipv4.ip_forward=1&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee -a /etc/sysctl.conf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sysctl -p&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo tailscale up --advertise-routes&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;192.168.1.0/24&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;然后在后台的 Machines 页面，找到这台设备，点右边的三个点，选 &amp;ldquo;Edit route settings&amp;rdquo;，把 &lt;code&gt;192.168.1.0/24&lt;/code&gt; 勾上。&lt;/p&gt;&#xA;&lt;p&gt;之后你在外面，就能直接访问 &lt;code&gt;192.168.1.x&lt;/code&gt; 下面的任何设备了。NAS、打印机、路由器管理页，全都能打开。&lt;/p&gt;&#xA;&lt;p&gt;这个功能让我出门在外的时候，感觉像是回到了家里的局域网。&lt;/p&gt;&#xA;&lt;p&gt;注意，&lt;code&gt;--advertise-routes&lt;/code&gt; 要在 &lt;code&gt;tailscale up&lt;/code&gt; 的时候传，不是单独的命令。如果之前已经 up 过了，要重新跑一次。&lt;/p&gt;&#xA;&lt;h2 id=&#34;exit-node把流量都走家里&#34;&gt;exit node：把流量都走家里&#xA;&lt;/h2&gt;&lt;p&gt;这个功能更激进一点。&lt;/p&gt;&#xA;&lt;p&gt;配了 exit node 之后，你所有设备的出网流量都会经过家里那台机器出去。相当于你人在外面，但网络出口在家里。&lt;/p&gt;&#xA;&lt;p&gt;用处有两个。&lt;/p&gt;&#xA;&lt;p&gt;一个是访问那些限制地区的服务。比如某些流媒体只允许家庭宽带 IP 访问。&lt;/p&gt;&#xA;&lt;p&gt;另一个是安全性。在咖啡厅的公共 Wi-Fi 上，所有流量都走加密隧道回家，不用担心被人抓包。&lt;/p&gt;&#xA;&lt;p&gt;配置：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo tailscale up --advertise-exit-node&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;然后在后台勾上 &amp;ldquo;Use as exit node&amp;rdquo;。&lt;/p&gt;&#xA;&lt;p&gt;客户端那边选择使用这个 exit node：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo tailscale up --exit-node&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;100.64.0.1 --exit-node-allow-lan-access&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;&lt;code&gt;--exit-node-allow-lan-access&lt;/code&gt; 是让本地局域网的访问不走隧道。不加的话，你连本地打印机都会绕到家里去。&lt;/p&gt;&#xA;&lt;p&gt;Windows 和 macOS 的客户端有图形界面，在菜单里选就行。&lt;/p&gt;&#xA;&lt;h2 id=&#34;acl控制谁能访问谁&#34;&gt;ACL：控制谁能访问谁&#xA;&lt;/h2&gt;&lt;p&gt;免费版也支持 ACL，用的是类似 JSON 的配置语言。&lt;/p&gt;&#xA;&lt;p&gt;默认的 ACL 是允许所有设备互相访问。如果你只想让自己访问，别人不行，就得改。&lt;/p&gt;&#xA;&lt;p&gt;在后台的 Access Controls 页面：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;acls&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;action&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;accept&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;src&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;autogroup:member&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;dst&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;*:*&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;ssh&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;action&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;check&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;src&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;autogroup:member&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;dst&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;autogroup:self&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;users&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;autogroup:nonroot&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;&lt;code&gt;autogroup:member&lt;/code&gt; 是账号下的所有成员。&lt;code&gt;autogroup:self&lt;/code&gt; 是设备的所有者自己。&lt;/p&gt;&#xA;&lt;p&gt;上面的配置意思是，所有成员可以访问所有设备的所有端口，但 SSH 只能访问自己的设备。&lt;/p&gt;&#xA;&lt;p&gt;如果给家里人开了子账号，可以限制他们只能访问特定设备：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;9&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nt&#34;&gt;&amp;#34;acls&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;action&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;accept&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;src&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;user1@&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;nt&#34;&gt;&amp;#34;dst&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;nas:445,5000&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这样 user1 只能访问 NAS 的 SMB 和 Web 端口，别的都不行。&lt;/p&gt;&#xA;&lt;h2 id=&#34;速度到底怎么样&#34;&gt;速度到底怎么样&#xA;&lt;/h2&gt;&lt;p&gt;我测过几次。&lt;/p&gt;&#xA;&lt;p&gt;从公司连回家里，两台机器都在国内，走的是直连。延迟在二十到四十毫秒之间，取决于公司的网络质量。这个延迟下用 RDP 基本感觉不到卡。&lt;/p&gt;&#xA;&lt;p&gt;从国外连回来，延迟会高一些，一百多毫秒。看视频还行，操作桌面会有点迟钝。&lt;/p&gt;&#xA;&lt;p&gt;速度方面，家里的宽带上行是一百兆，实测通过 Tailscale 传输能跑到七八十兆。这个速度对于传文件来说够用了。&lt;/p&gt;&#xA;&lt;p&gt;如果没打通直连，走中继的话，速度会降到十几兆，延迟也会高一些。所以看 &lt;code&gt;tailscale status&lt;/code&gt; 里是不是 &lt;code&gt;direct&lt;/code&gt; 很重要。&lt;/p&gt;&#xA;&lt;h2 id=&#34;几个坑&#34;&gt;几个坑&#xA;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;DNS 冲突&lt;/strong&gt;。开启 MagicDNS 之后，它会接管系统的 DNS。如果你有自定义的 DNS 服务（比如 Pi-hole），可能会冲突。可以在 &lt;code&gt;tailscale up&lt;/code&gt; 的时候加 &lt;code&gt;--accept-dns=false&lt;/code&gt; 关掉。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Android 上的省电策略&lt;/strong&gt;。很多国产 ROM 会把 Tailscale 的后台进程杀掉，导致连不上。要在系统设置里给它加白名单，允许后台运行。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;子网路由不生效&lt;/strong&gt;。多半是没在后台勾选。&lt;code&gt;--advertise-routes&lt;/code&gt; 只是宣告，还需要在管理后台批准。这一步很多人会漏。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;iOS 上的 VPN 图标常亮&lt;/strong&gt;。这是正常的，Tailscale 在 iOS 上是以 VPN 的形式工作的。电量消耗会比平时多一点，但不算严重。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;多网卡环境&lt;/strong&gt;。如果机器上有多个网卡（比如同时连了有线和无线），有时候会出现路由混乱。可以用 &lt;code&gt;--netfilter-mode=off&lt;/code&gt; 关掉自动的防火墙规则，自己配。&lt;/p&gt;&#xA;&lt;h2 id=&#34;免费版够不够&#34;&gt;免费版够不够&#xA;&lt;/h2&gt;&lt;p&gt;免费版叫 Personal，给三个用户、一百个设备。&lt;/p&gt;&#xA;&lt;p&gt;对于个人用来说，一百个设备根本用不完。三个用户，家里人也够。&lt;/p&gt;&#xA;&lt;p&gt;付费的 Starter 是六个美元一个月，给更多用户和高级功能（比如设备审批、日志导出）。&lt;/p&gt;&#xA;&lt;p&gt;我觉得个人用免费版完全够。除非你是在公司里推广，需要审计日志之类的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;现在的状态&#34;&gt;现在的状态&#xA;&lt;/h2&gt;&lt;p&gt;我现在的设备列表里，一台 Windows 台式机、一台 MacBook、一台 Linux 小主机、两部手机、还有一台香港的 VPS，全都接在里面。&lt;/p&gt;&#xA;&lt;p&gt;出门在外的时候，随时能连回家里。VPS 上跑的服务也不用暴露公网，直接从 Tailscale 内网访问。&lt;/p&gt;&#xA;&lt;p&gt;这套东西彻底替代了我之前用的那堆内网穿透工具。而且它是基于标准协议的，万一哪天 Tailscale 这个公司不行了，WireGuard 本身还在，可以自己搭一套。&lt;/p&gt;&#xA;&lt;p&gt;这种不完全依赖某一家公司的感觉，挺好。&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>家里那台小主机没有公网 IP，我用 Cloudflare Tunnel 把它挂上了网</title>
            <link>https://blog.mibase.top/p/%E5%AE%B6%E9%87%8C%E9%82%A3%E5%8F%B0%E5%B0%8F%E4%B8%BB%E6%9C%BA%E6%B2%A1%E6%9C%89%E5%85%AC%E7%BD%91-ip%E6%88%91%E7%94%A8-cloudflare-tunnel-%E6%8A%8A%E5%AE%83%E6%8C%82%E4%B8%8A%E4%BA%86%E7%BD%91/</link>
            <pubDate>Thu, 29 Feb 2024 19:44:00 +0800</pubDate>
            <guid>https://blog.mibase.top/p/%E5%AE%B6%E9%87%8C%E9%82%A3%E5%8F%B0%E5%B0%8F%E4%B8%BB%E6%9C%BA%E6%B2%A1%E6%9C%89%E5%85%AC%E7%BD%91-ip%E6%88%91%E7%94%A8-cloudflare-tunnel-%E6%8A%8A%E5%AE%83%E6%8C%82%E4%B8%8A%E4%BA%86%E7%BD%91/</guid>
            <description>&lt;img src=&#34;https://blog.mibase.top/p/%E5%AE%B6%E9%87%8C%E9%82%A3%E5%8F%B0%E5%B0%8F%E4%B8%BB%E6%9C%BA%E6%B2%A1%E6%9C%89%E5%85%AC%E7%BD%91-ip%E6%88%91%E7%94%A8-cloudflare-tunnel-%E6%8A%8A%E5%AE%83%E6%8C%82%E4%B8%8A%E4%BA%86%E7%BD%91/cover.jpg&#34; alt=&#34;Featured image of post 家里那台小主机没有公网 IP，我用 Cloudflare Tunnel 把它挂上了网&#34; /&gt;&lt;p&gt;搬进新租的房子之后，第一件让我难受的事就是宽带没有公网 IP。&lt;/p&gt;&#xA;&lt;p&gt;装机师傅上门那天我特意问了，他说现在都这样，上面统一做的 NAT，想开端口得另外找客服申请，而且就算申请下来也是动态的，重启光猫就换一个。我试着在路由器上拨号看了一下，WAN 口拿到的是 &lt;code&gt;100.64.x.x&lt;/code&gt;，运营商级 NAT 的内网地址，彻底没戏。&lt;/p&gt;&#xA;&lt;p&gt;问题是我家里有台常年开着的小主机，跑着几个自己写的小服务。一个是用来看照片的相册，一个是给家里人用的备忘录，还有一个是给小孩做的手工课视频站。以前在旧房子那边有公网 IP，路由器上做个端口映射，出门在外随时能打开。现在全断了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;试过的几种方案&#34;&gt;试过的几种方案&#xA;&lt;/h2&gt;&lt;p&gt;先说被排除的。&lt;/p&gt;&#xA;&lt;p&gt;花生壳那类内网穿透我最早试过，免费版带宽小得可怜，而且域名是一长串随机字符，发给家里人他们根本记不住。付费版按年收费，我看了一眼价格，不如直接买台有公网 IP 的 VPS。&lt;/p&gt;&#xA;&lt;p&gt;frp 我用了差不多一年。自己在香港买了台 1 核 1G 的小机器当跳板，家里跑 frpc，外面跑 frps。能用，但有几个麻烦。跳板机的带宽是个硬瓶颈，我买的那台是 30M 峰值，实际晚上跑起来经常掉到 5M 以下，看个视频就卡。而且这台机器我得自己维护，系统更新、证书续期、被扫了还得上去看看，一年下来也是一笔精力。&lt;/p&gt;&#xA;&lt;p&gt;后来在 V2EX 上看到有人提 Cloudflare Tunnel，我一开始以为是那种要企业套餐的付费功能，点进去看了才知道，免费版也能用，而且不限流量。这个就值得试了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;它到底是怎么工作的&#34;&gt;它到底是怎么工作的&#xA;&lt;/h2&gt;&lt;p&gt;原理说起来很简单。&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;cloudflared&lt;/code&gt; 这个程序装在你的内网机器上，它主动往外连 Cloudflare 的边缘节点，建立一条长连接。这条连接是出站的，所以你不需要有公网 IP，也不需要动路由器上的任何设置。外面的人访问你的域名，请求先到 Cloudflare，Cloudflare 顺着这条已经建好的隧道把请求送进来，你的机器响应之后再原路返回。&lt;/p&gt;&#xA;&lt;p&gt;因为隧道是 &lt;code&gt;cloudflared&lt;/code&gt; 主动发起的，中间不存在任何入站端口，家里的防火墙和运营商的封禁都不受影响。&lt;/p&gt;&#xA;&lt;p&gt;还有个好处是，你不需要在路由器上开任何端口。以前做端口映射的时候，我总担心哪天路由器固件有漏洞被人扫到，现在这条路直接堵死了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;装起来&#34;&gt;装起来&#xA;&lt;/h2&gt;&lt;p&gt;我的小主机是 Debian 12，直接加官方源装最省事。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir -p --mode&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0755&lt;/span&gt; /usr/share/keyrings&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /usr/share/keyrings/cloudflare-main.gpg &amp;gt;/dev/null&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared any main&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /etc/apt/sources.list.d/cloudflared.list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo apt install cloudflared&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;装完 &lt;code&gt;cloudflared --version&lt;/code&gt; 能出版本号就行。&lt;/p&gt;&#xA;&lt;p&gt;接下来登录。这一步会给你一个很长的链接，你得复制到浏览器里打开：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cloudflared tunnel login&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;浏览器里会让你选一个域名授权。我的域名在 Cloudflare 上托管，选它，然后它会自动在你的 DNS 里加一条 &lt;code&gt;cert.pem&lt;/code&gt; 用的授权。授权文件落在 &lt;code&gt;~/.cloudflared/cert.pem&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;注意这个 cert 是按域名授权的，一个域名一个文件。如果你有多个域名都要用，得分别登录一次。&lt;/p&gt;&#xA;&lt;h2 id=&#34;创建隧道和配置&#34;&gt;创建隧道和配置&#xA;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cloudflared tunnel create homelab&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;它会生成一个 UUID，并且在 &lt;code&gt;~/.cloudflared/&lt;/code&gt; 下面放一个同名的 json 文件，里面是隧道的凭据。这个文件是密钥，别传 GitHub 上去。&lt;/p&gt;&#xA;&lt;p&gt;然后写配置文件，位置在 &lt;code&gt;~/.cloudflared/config.yml&lt;/code&gt;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;tunnel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;homelab&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;credentials-file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;/home/mingyue/.cloudflared/8f3c1a2b-xxxx-xxxx-xxxx-xxxxxxxxxxxx.json&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;ingress&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;hostname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;photo.mibase.top&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;service&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;http://127.0.0.1:8081&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;hostname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;note.mibase.top&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;service&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;http://127.0.0.1:8082&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;hostname&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;craft.mibase.top&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;    &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;service&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;http://127.0.0.1:8083&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;service&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;http_status:404&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;&lt;code&gt;ingress&lt;/code&gt; 是从上往下匹配的，最后那条兜底必须写，不然配置检查会报错。&lt;/p&gt;&#xA;&lt;p&gt;还有一个细节，如果你内网的服务绑的是 &lt;code&gt;0.0.0.0&lt;/code&gt;，用 &lt;code&gt;127.0.0.1&lt;/code&gt; 也没问题。但如果服务只监听 IPv6，就得写成 &lt;code&gt;http://[::1]:8081&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;h2 id=&#34;把-dns-指过去&#34;&gt;把 DNS 指过去&#xA;&lt;/h2&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cloudflared tunnel route dns homelab photo.mibase.top&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cloudflared tunnel route dns homelab note.mibase.top&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cloudflared tunnel route dns homelab craft.mibase.top&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;它会自动在 Cloudflare 里加 CNAME，指向 &lt;code&gt;&amp;lt;UUID&amp;gt;.cfargotunnel.com&lt;/code&gt;，并且是橙云状态，也就是走代理。&lt;/p&gt;&#xA;&lt;p&gt;这三条加完，DNS 那块就不用手动动了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;跑成服务&#34;&gt;跑成服务&#xA;&lt;/h2&gt;&lt;p&gt;前台跑着测试没问题之后，换成 systemd 托管：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo cloudflared service install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; --now cloudflared&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;然后看状态：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;&#xA;&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1&#xA;&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td class=&#34;lntd&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl status cloudflared&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo journalctl -u cloudflared -f&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;日志里能看到四条连接建起来的信息。Cloudflare 默认会建四条，冗余用的，一条断了另外几条顶上，切换的时候用户基本无感。&lt;/p&gt;&#xA;&lt;h2 id=&#34;访问控制和登录验证&#34;&gt;访问控制和登录验证&#xA;&lt;/h2&gt;&lt;p&gt;隧道跑通之后，第一个冒出来的念头是：这玩意儿是不是谁都能访问。&lt;/p&gt;&#xA;&lt;p&gt;是的，默认就是公开的。所以我立刻去配了 Cloudflare Access。&lt;/p&gt;&#xA;&lt;p&gt;在 Zero Trust 后台里，Access 下面的 Applications，新建一个 Self-hosted 应用。域名填 &lt;code&gt;note.mibase.top&lt;/code&gt;，然后建一条策略，Action 选 Allow，Include 里选 Emails，把我自己和家里人的邮箱填进去。&lt;/p&gt;&#xA;&lt;p&gt;配完之后再访问，会先跳到一个 Cloudflare 的登录页，输入邮箱收验证码，通过了才放行。免费版给五十个用户，够用了。&lt;/p&gt;&#xA;&lt;p&gt;给小孩看的视频站我没加验证，那个本来就是想分享给亲戚的，加了反而麻烦。&lt;/p&gt;&#xA;&lt;h2 id=&#34;顺手做的一件事&#34;&gt;顺手做的一件事&#xA;&lt;/h2&gt;&lt;p&gt;既然流量都过 Cloudflare 了，缓存规则也可以顺手配上。视频站的封面图我设了一年的 Edge TTL，这样重复访问基本不消耗回源带宽。&lt;/p&gt;&#xA;&lt;p&gt;这个和博客那边是同一套思路，静态的东西缓存长一点，动态的别缓存。&lt;/p&gt;&#xA;&lt;h2 id=&#34;和-frp-比到底差在哪&#34;&gt;和 frp 比到底差在哪&#xA;&lt;/h2&gt;&lt;p&gt;用了一个多月，我的感受是这样的。&lt;/p&gt;&#xA;&lt;p&gt;带宽上 Cloudflare 明显强。它是全球任播，国内访问会落到就近的节点，实际测下来晚上也能跑满我家的上行。frp 那台跳板机受限于单机带宽，这点没法比。&lt;/p&gt;&#xA;&lt;p&gt;省心程度上也是 Cloudflare 好。跳板机不用自己维护，证书它帮你签，系统补丁不用管，被打也不用管。这一点对我这种懒得折腾的人来说很重要。&lt;/p&gt;&#xA;&lt;p&gt;但也不是没代价。&lt;/p&gt;&#xA;&lt;p&gt;延迟会比直连高一些，毕竟多绕了一层。我在家用局域网访问，走的是本地地址，没影响；在外面访问大概多二十毫秒，日常用感觉不出来，但如果你要跑远程桌面，那点延迟是能感觉到的。&lt;/p&gt;&#xA;&lt;p&gt;另外就是把一部分控制权交出去了。域名、证书、访问日志都在 Cloudflare 那边。真要哪天它改政策或者涨价，迁移的成本不算低。所以我一直保留着 frp 的配置没删，算是个备份方案。&lt;/p&gt;&#xA;&lt;p&gt;还有一点，免费版对 WebSocket 的支持是有的，但长连接有时候会被掐。我那个相册里的实时同步功能就偶尔断，后来改成轮询才稳定下来。&lt;/p&gt;&#xA;&lt;h2 id=&#34;遇到的两个坑&#34;&gt;遇到的两个坑&#xA;&lt;/h2&gt;&lt;p&gt;一个是 &lt;code&gt;cloudflared&lt;/code&gt; 的内存占用。这东西跑久了会慢慢涨，我有一次看它吃了 400 多兆。后来加了个定时重启，每天凌晨重启一次，问题就没了。官方 issue 里也有人反馈过，看起来还没彻底修。&lt;/p&gt;&#xA;&lt;p&gt;另一个是回源协议。我的服务是 http，如果 &lt;code&gt;service&lt;/code&gt; 写成 &lt;code&gt;https://127.0.0.1:8081&lt;/code&gt;，会报 TLS 握手失败。改成 &lt;code&gt;http://&lt;/code&gt; 就好。这个错我当时找了半天，因为日志里只写了个 502，没提 TLS。&lt;/p&gt;&#xA;&lt;h2 id=&#34;现在的情况&#34;&gt;现在的情况&#xA;&lt;/h2&gt;&lt;p&gt;三个服务稳定跑了一个多月，家里人也习惯了直接输域名访问，不再问我&amp;quot;那个链接是多少&amp;quot;。&lt;/p&gt;&#xA;&lt;p&gt;回头看，这件事最舒服的地方不是技术多新，而是它把一件需要长期维护的事情变成了不用管的事情。以前跑 frp，我每个月至少要看一眼那台跳板机，现在这块彻底从我待办里消失了。&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
