4

仅IPv6家庭内网服务实现v6+v4双栈访问

 1 year ago
source link: https://blog.heysh.xyz/2023/02/07/beyond-nat-2023/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

是的,连回家里 NAS 的正常手段,当然是 ZeroTier/Tinc/OpenVPN 之类。但是如果还有其他人想要看照片的话,不要期待手机上会有除了浏览器之外的东西。

在这种场景,如果:

  1. 有一台常开的 NAS、矿渣或 whatever,
  2. 在 Cloudflare 上有一个自己的域名,
  3. 家里的宽带有 IPv6,而且防火墙可以自己控制(aka 光猫桥接),
  4. 不想或者不能打开 80、443 端口,没办法直接使用 Cloudflare 代理;

那么可以通过本文的方案,获得高位端口的 CF 代理。这样,在没有 IPv6 的地方也能够访问家里的服务了。

如果上面的条件不满足的话,可以尝试 FRPCloudflare Tunnel 之类的东西。

打开端口、DDNS

首先我们需要保证 NAS 上的 IPv6 端口能从公网访问,并把域名指向家里的 IPv6 地址。打开端口的部分可以看看之前的博文;DDNS 我在使用 ddns-go(这里可能需要科学上网)。注意,此时先不要开启 Cloudflare 代理。

完成这部分之后,我们的域名(比如说 home.example.net)指向了家里的 IP,并且防火墙打开了端口(比如 38000)。可以在 NAS 上开个 python -m http.server 38000,并用移动网络测试一下。

对了,Cloudflare 的 token 不要扔,待会还有用。

Caddy

安装 Caddy。因为家里没有 80 和 443 端口,所以需要用 DNS-01 方式申请 TLS 证书:

## cat /etc/caddy/Caddyfile
(cloudflare) {
      tls {
        dns cloudflare abcdefgh #刚才说的Cloudflare的token
      }
}
home.example.net:38000 {
      reverse_proxy http://localhost:1234 #这里是内网服务的地址
      import cloudflare #申请证书的部分

开启 Caddy。这里结束后,移动网络(就是有 IPv6 地址的网络)应该能够通过 https://home.example.net:38000 访问服务了。

Cloudflare

SSL_TLS.png

把 SSL/TLS 加密模式改为完全;

Origin_Rules.png

添加 Origin Rules,把请求转至高位端口;

开启 Cloudflare 代理。在 DDNS 服务上也开启 Cloudflare 代理

好了,大概就是这样。通过 CF,也许自家的网络也能稍微安全一点。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK