家庭移动宽带无公网 IPv4 ,但经过一顿检测发现为 NAT1 型,有望实现大内网穿透,规划方案:Tailscale (客户端)+Headscale (服务端)+Derp (中继)+Cloudflare ( Origin rules ,DDNS )+IPv6+natter (开源打洞工具)
在家庭内网准备一台 Linux 虚拟机,做好网络隔离,设置 DMZ 。
打洞检测
docker run --net=host --rm nattertool/natter
如果打洞成功,则可以访问公网端口打开测试页面。
如果打洞失败,将服务器的入站默认策略改为允许,先验证是否能够打洞,才有必要往下开展工作。
CloudFlare API Key 获取
免费领取源码:公众号 易雾山庄 后台回复消息 领取 headscale
替换.env 域名下的域名为你自己的,修改邮箱为你自己的
粘贴上边的 cloudflare token 到 secrets/cf_api_token
拉起容器
docker compose up -d
多等会,traefik 反代需要获取 tls 证书需要点时间
功能
- 支持双栈自动切换,最大程度保障回家链路稳定性,确保各种环境下都能顺利接入
- 自动更新打洞 IP 和端口信息
- Headscale 和 Derp 证书统一由 traefik 反代接管,减少打洞端口数量
- 自动同步 traefik 生成的证书给 derp 使用
- 自动监测 ipv6 地址变化,并同步更新
- ipv6 防火墙仅开放 derp 端口和 stun 端口
项目中以集成了一个客户端,接入指令,建议关闭防火墙操作策略,自行配置比较好,我个人比较信奉内网互访能路由尽量路由,别搞什么源地址转换,不利于审查和网络策略管控。
示例:
tailscale up --reset --accept-dns=false --accept-routes --login-server=https://hs.evling.tech --advertise-exit-node --advertise-routes=10.32.0.0/16,10.8.0.0/16,172.16.0.0/16 --netfilter-mode=off
这个节点作为家里的入口枢纽。
其他终端接入参考网上各路教程即可。
在客户端进行网络验证,发现 ipv4 和 ipv6 均正常。
worker 容器日志查看,未发现报错异常。
|