一、背景
最近装了台nas,为了方便访问,打算配置成在家的内网解析成内网ip,在外面解析到内网穿透的地址。
二、实现方式
我有一个域名nas.novitechie.com
,并且已经托管到了CloudFlare,假设我的nas的内网IP是172.26.1.34
,首先为了内网能够用域名解析到这个ip,在华硕路由器的Merlin Clash插件中配置DNS,让局域网所有设备都能正确解析(对加密的dns解析不管用)。
在nas上安装cloudflared,并且配置tunnel
tunnel是https的,为了协议一致,在nas上也是配置启用https,并且配置了证书。
配置好后,理想情况下,无论内网外网都能使用 https://nas.novitechie.com
访问我的nas。
三、坑
内网访问出现以下错误
查了下资料,这是Encrypted Client Hello (ECH)错误,那么为什么会出错呢?查询了资料,发现cloudflare已经开始给免费用户开启ECH,Chrome 查询到域名支持ECH就会采用ECH的方式进行握手,但是Nas上的Nginx是不支持这种的。在cloudflare关闭小黄云后,局域网是能够正常使用https访问的,但是外网就无法访问了。只能考虑换种方式,于是我选择关闭ECH。
chrome中关闭ECH我之查询到1种方式,通过policy。
在Windows上使用这几行powershell脚本可以实现
$PATH = "HKLM:\\Software\Policies\Google\Chrome\"
$NAME = "EncryptedClientHelloEnabled"
if (-not(Test-Path $PATH)) {New-Item -Path $PATH -Force}
New-ItemProperty -Path $PATH -Name $NAME -Value 0x0 -Force
在linux/mac下,将下面的json文件存放于 /etc/opt/chrome/policies/managed
{
"EncryptedClientHelloEnabled": false
}
完成后,在 chrome://policy 页面就能看到下面内容,nas也能正常访问了。
参考文档:
https://chromeenterprise.google/policies/#EncryptedClientHelloEnabled
https://support.google.com/chrome/a/answer/9027408
评论区