本篇来拓展讲讲一些有意思的思路和注意事项。本篇也算是本系列结尾了吧,没有特别新奇的内容,就不做后续更新了。
克服QOS
tailscale底层协议是基于wireguard的,与ZeroTier私有协议一样,同样具备一些特征,当上行流量很大时,很可能被运营商判定为pcdn,给予限流措施,headcale配合自建derp中继节点方案难免可能遇到这类情形,虽然我目前没有遇到,可能是访问家里的需求量不大,比如远程看视频之类的。但这个方案在组网协议有个灵活的地方就是保底设施的derp中继,它暗藏玄机,为什么这么说呢,它是一个通用目的包中继协议,运行在HTTP之上,而大部分网络都是允许HTTP通信的,根据这个特性,当异地设备与家里TS节点直连协议被针对时,比如只有200Kb传输速率,非常影响观影体验,可以尝试阻挠打洞直连,强制其回退到保底策略derp中继,实现的方式可以是在异地客户端简单粗暴阻断udp协议,也可以是在家里的枢纽节点上配置阻断udp协议,注意放行dns流量和stun流量,中继节点就在家里,延迟这些都是有保障的,这也印证了这个回家方案优雅的原因之一,提供这么个思路,仅供参考。除了TS,你还知道哪些回家方案是支持http协议的呢。
配置其他中继Derp
为了优化使用体验,可能还想加入自建的外部一些derp中继,可以在headscale配置目录添加节点信息文件如headscale/config/derp-out.yaml,内容格式如下
regions:
17:
nodes:
- derpport: 8443
hostname: derp.evling.tech
ipv4: x.x.x.x
name: 17a
regionid: 17
stunonly: false
stunport: 3478
ipv6: x:x:x:x::x:x
regioncode: out
regionid: 17
regionname: "Out"
然后在主配置文件里添加这个节点信息即可,修改headscale/config/config.yaml如下
免费域名的坑
- ip-ddns.com免费版的主ns记录是不会生效的,需要对具体域名逐一添加ns记录,指向Cloudflare进行接管解析。
- 免费的三级域名如evling.ip-ddns.com,不建议在它基础上再扩展子域名,traefik申请letsencrypt免费tls证书可能会报错,lesencrypt可能并不支持该层级域名的通配证书生成。建议直接申请到*.evling.ip-ddns.com这个层级的通配即可
安全性分析
从信息泄漏角度来简单分析一下,这个方案中引用了cloudflare来暴露headscale主控服务,涉及到密钥交换要流经cloudflare反代,肯能存在泄漏风险,但异地客户端和家里枢纽客户端交换的是双方的公钥,属于可公开信息,风险也还好;另外一个风险点就是,当设置了永久加入链接,其mkey可能会被Cloudflare掌控,这个是属于敏感信息,可以设置一次性加入链接,避免设置永久生效链接,还可以通过严格的访问控制如白名单模式来防范此类极端情况的未授权接入家庭网络。当然,足够信任CF的话,当我没说。
小结
内网穿透方案确实是带来了一些便利,使用不当还会引入严重安全风险。比如frp通过VPS直接暴露家庭内网端口,CF ZeroTrust之流暴露家庭网盘、群晖之类的服务,都是高风险行为。最后再声明一点:家庭服务不要直接对外暴露,真的很危险,最佳实践是通过安全隧道加严格的访问控制,资源充沛的情况下可以考虑引入社区版WAF。