域名访问
目标:通过某个域名访问具体的服务。
在域名管理商处,设置某个域名的解析。对于家里云,解析类型应该是CNAME(使用另一个域名的值),目标为家里路由器的DDNS用的域名(如 home.example.com)
假设要通过media.example.com家中的Jellyfin
设置域名

这样,当访问 media.example.com,目标IP就和home.example.com相同。
由于电信公司已经封禁了家里云的网站访问的默认端口,所以需要设置一个其他端口,并且在访问时指定。假设要使用的端口是1270。
端口转发
在家里的路由器设置端口转发,将所有从外面访问端口1270的流量都转到服务器的端口 443。
OpenWRT > 网络 > 防火墙 > 端口转发 > 添加
反向代理(1Panel)
有的服务没有关于域名访问的方便功能,使用专用的服务可能会简便。
1Panel > 网站 > 创建网站 > 反向代理
加密传输
为了隐私,应该使用SSL证书加密传输的内容。
默认情况下,使用http(是明文传输协议)协议传输,导致数据在网上能被其他人看见。其他人能看见的内容和访问者差不多。
进入1Panel对网站的具体设置页。 
开启 启用HTTPS
关闭HSTS。这会让调试更加麻烦。如果你不清楚,不建议开启。
选择一个ACME账户、证书。
确定。
至此,传输被加密。数据在网络传输的过程中,其他设备看不到内容。
公开网站
公开自己家的IP是比较危险的事:很容易被找到家的位置(ipip.net显示的自家IP的位置,距离我家只有 2.1 km),而且可能面临骇客的觊觎。所以,使用一种方法来隐藏源IP很有意义。
对于家宽用户,不能使用默认的端口443;甚至没有公网IP,这使得公开网站变得困难。
反向代理可以解决这些问题,感谢赛博菩萨 Cloudflare 🙏。
INFO
正向代理和反向代理的区别是服务对象不同。
- 正向代理:服务对象:客户端、网站的访问者。隐藏、保护了客户端。典型场景:出国留学。
- 反向代理:服务对象:服务端、网站的提供者。隐藏、保护了服务端。典型场景:负载均衡。
Woker
使用Worker的前提是有公网IP,即使只有IPv6也可以。
假设你已经通过某种手段,使得可以在公网通过 https://home.example.com:25252 访问家里的Alist。
反代脚本
addEventListener("fetch", event => {
event.respondWith(handleRequest(event.request));
});
async function handleRequest(request) {
let url = new URL(request.url);
url.hostname = "home.example.com";
url.port = "25252";
url.protocol = "https"; // 传输协议:http/https
let modifiedRequest = new Request(url, request);
let response = await fetch(modifiedRequest);
return response;
}稍微修改此模板,在CloudFlare的控制面板添加一个 Woker。就能通过类似https://alist.user-name.workers.dev/ 的网址访问源站。而且还能利用CF的内容分发网络。 如果要使用自定义的域名,需要让CF托管域名(迁移域名到CF或在CF购买域名)。
Tunnels
对于无公网IP的设备,也有解决方法。使用CF Tunnels的前提是你有在CF托管的域名。
创建 Cloudflare零信任 账户
访问CF零信任管理页,按提示完成注册。可能要求提供付款信息,可以在某个不引人注目的角落找到跳过按钮;也可以通过刷新网页来跳过。
来到 账号 > 网络 > 隧道。创建隧道,类型:Cloudflared。为隧道命名。
INFO
一个隧道只能同时被一个设备使用。
配置隧道
Cloudflared
name: tunnel
services:
cloudflared:
image: cloudflare/cloudflared:latest
container_name: cloudflared
network_mode: host
restart: always
command: tunnel --no-autoupdate run --token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx我推荐用Docker安装Cloudflared。复制网页提供的运行命令,剪切其中很长的一串Token,替换上述的 Compose 中的XXX。Cloudflared,启动!
如果成功部署,那么零信任的隧道管理页就会显示此隧道的状态为正常,而且还有逐渐增长的运行时间。
进入这个隧道的管理页,点击上方的公共主机名,添加一个你的域名的子域(如 alist.example.com);服务即在内网的访问方式(例:http://192.168.5.30:2525);类型:建议HTTP。保存。
然后就能通过 https://alist.example.com 来访问你的服务了。😋