家庭移动宽带无公网IPv4,但经过一顿检测发现为NAT1型,有望实现大内网穿透,规划方案:Tailscale(客户端)+Headscale(服务端)+Derp(中继)+Cloudflare(Origin rules,DDNS)+IPv6+natter(开源打洞工具)
在家庭内网准备一台Linux虚拟机,做好网络隔离,设置DMZ。
打洞检测
docker run --net=host --rm nattertool/natter
如果打洞成功,则可以访问公网端口打开测试页面。
如果打洞失败,将服务器的入站默认策略改为允许,先验证是否能够打洞,才有必要往下开展工作。
CloudFlare API Key获取
- 登录 CloudFlare
- 进入 https://dash.cloudflare.com/profile/api-tokens
- 点击 Create Token → Create Custom Token ,选择如下三项权限
克隆项目
git clone https://github.com/evling2020/hsmaker.git
替换.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容器日志查看,未发现报错异常。