最近搞了几个个人的小项目,想要对外发布。家里有几个限制的小主机,计划是在上面部署起来,但是家里没有并且拿不到公网 IPv4 ,但是有 IPv6 。为了让 IPv4 用户能够访问,应该是要借助一个有公网 IPv4 的云服务器?是否需要这个服务器也需要 IPv6 才能与家里的服务器连接?目前有哪些可行的解决方案?

有公网服务器之后,家里网络什么公网都没有也可以。

你这个服务映射的需求,frp 之类的基本都能做。

如果还没买公网服务器,也确定以后不会有服务器需求,可以考虑一下更实惠的平台即服务,比如 SakuraFrp 、网云穿、ngrok 之类的。

有 ipv6 ,你自己设置一下防火墙,开放端口。解析绑定域名就行。方法很简单,自行 google 。
如果你的用户只有 ipv4 ,你自己用 cloudflare 就行。
没有 ipv6 的话,你自己内网穿透,或者也可以用 cf 免费的 tunels

开放 http/https 服务不怕被抄水表?

我是用域名跟 IPV6 绑定,然后套 CF 的 CDN 实现 ipv4 访问,有 ipv6 网络环境的时候就用另一个没套 CDN 的域名直连访问

不要暴露 ip 到公网

至少在中国境内,有对外发布的念头还是应该在云服务商买服务+做备案

简单的服务直接在云服务商搞,成本划不来转发到自家处理也可以。云服务器只有 IPv4 也可以通过虚拟组网等方法连到家中。

不嫌速度慢的话可以试试 Cloudflare Tunnel

方案:用家里主机做计算,租用云厂商的 IP

1.套 CDN 。CDN 回源指向家里 IP6 ,家里小主机设置白名单,屏蔽所有运营商检测。
2.套服务器转发。阿里云和腾讯云都推出了 200M 峰值带宽的 2C1G 最低配服务器每月 40 ,买来做入口转发指向家里小主机。

这种方案是性价比高又比较安全的,当然该备案还是要备案,只不过不用买高昂又低配的服务器。

Cloudflare Tunnel 是最省心的方案
但速度不一定好

Cloudflare Tunnel

个人玩玩拿来测试这种问题不大,如果真的拿来上线生产的话还是建议上云买个域名备案比较稳妥

frp

如果只需要几个人访问的话,那大家都装 zerotier 或者 tailscale ,
如果是需要给全世界人民访问的话,那就去买台有公网 ip 的虚机,然后用 frp 转发。

frp ,现成且高度匹配没有多余的东西。
服务端在正经服务器上,客户端在家庭服务器上,客户端所在机子不需要公网 ip 。
有一些提供 frp 服务的服务商,自己用云服务器部署或者直接买服务都行。我觉得生产可用。

我自己的折腾方案:

  1. 首先要买一台有公网 ipv4 的服务器,配置很低都行,带宽看你自己需求来定。
  2. 买域名,绑到你自己云服务器上,香港或境外服务器不用备案,国内需要备案,备案也没多麻烦,我是搭了个最简单博客,然后传了自己几张吃饭拍的饭菜,备注就是分享自己做饭,几天就过了
  3. 然后就是云和你家里组内网穿透,我是直接用 zerotier ,怕不安全自己组 wireguard 就行
  4. 云机装 nginx 反代,proxy adress 到你的内网地址,你就能用 http 访问了
  5. 这步不是必须。我全部配置的 https ,用 letsencrypt 自动生成二级泛域名证书+自动续期,这步是最麻烦的,不过配置好后一劳永逸,觉得麻烦其实 http 够了

然后就是外网用二级域名访问我自己的所有个人服务,比如 svn.domain.com ,git.domain.com

可以试试我的 FRP 内网穿透服务, sparknat.cn 目前是测试阶段,没有流量限制,生成配置后使用官方客户端启动即可

买一个阿里云域名,备案后通过 ddns-go 解析

买一个最便宜的公网服务器,装 zerotier 的服务端,自己的每台设备装 zerotier 客户端。进阶一点可以申请个域名,把域名解析到 zerotier 的私网 IP 上。

我是 tailscale + nginx 反代,A(家庭服务器) -> B(云服务器) -> C(Browser)

我是有速度要求的 FRP ,没要求的 Cloudflare Tunnel