一种通过设置 DNS 记录解决家庭宽带提供 https 服务省去端口号的方法

2023-07-06 15:01:39 +08:00
 xavierskip

众所周知,家庭宽带是不被允许对外提供 web 服务的,所以运营商会主动封禁 80 和 443 端口,这两个端口一个是 http 服务另一个是 https 服务的默认端口。

如果家庭宽带利用 DDNS 技术绑定了域名,例如f.example.home域名,我们访问家里 https 服务的链接会是如下的形式:https://f.example.home:6789/share

我最近在逛博客时发现了一种方法可以省去链接中的端口号,这样我们访问的链接变成了:https://f.example.home/share。是不是简洁美观多了,而且在技术上也灵活了。

方法来源:涛叔:解决家庭宽带 443 端口封禁问题

首先要声明的是,虽然对于服务提供者来说只需要添加一条 DNS 记录,但是目前这种方法对于访问者来说并不适用于大多数场景及用户,就是说对于绝大数访问者想要以不带端口号的形式访问服务需要手动设置及浏览器相关支持。原因在于 DoH 技术还未普及到成为 DNS 的默认设置,以及浏览器对其相关功能的实现。

具体点说,就是访问者想要通过省去端口号的链接来访问服务,需要设置浏览器的 DNS 为 DoH

就目前的测试情况来看,在 Windows 系统下,Chrome 和 Edge 在 DNS 已经设置为 DoH 的情况下依旧不可以❌,只有 Firefox 在设置 DNS 为 DoH 的情况下可以 ✅。在 iPad 上 Safari 在无任何特别配置的情况下直接可以✅。

系统 浏览器 DNS 设置 结果
Windows 10 Chrome DoH
Windows 10 Edge DoH
Windows 10 Firefox DoH
iOS 16 Safari 默认

添加 DNS HTTPS 记录

我以 DNSPod 为例:

主机记录:f
记录类型:HTTPS ,
记录值:f.example.home. alpn="h2" port="6789"

添加好记录,然后等待生效,就可以测试是否可以通过不带端口号的链接访问服务了。

我在 Firfox 中添加的是 DNSPod 的 DoH 。参考

家庭网络服务简介:家里的宽带通过 DDNS 绑定 IP ,家里的服务通过 Caddy web server 来获取证书并提供 https 服务,然后路由上做好端口映射。

推荐阅读:

2059 次点击
所在节点    分享发现
10 条回复
chenjia404
2023-07-06 15:05:51 +08:00
不过可以通过协议识别提供 http 服务吗
xavierskip
2023-07-06 15:34:54 +08:00
@chenjia404 #1 你试一下呗。

好像不行,只支持 HTTP/2 和 HTTP/3 协议。https://docs.dnspod.cn/dns/help-https/
chenjia404
2023-07-06 15:46:55 +08:00
@xavierskip #2 你的 https 服务,运营商也能识别到,然后停你的服务。
yoyoluck
2023-07-06 16:31:15 +08:00
在非国内的域名服务商买个域名 然后做个隐式或显式 url 转换
digimoon
2023-07-06 16:39:24 +08:00
不管你 web 服务开在什么端口,isp 查到就能请你喝茶
cccer
2023-07-06 17:24:02 +08:00
可是 DNSPod 并不支持 HTTPS 记录,另外 Chrome 的 HTTPS 记录是需要打开一个实验 flag 才能用。

```
curl --http2 -H "accept: application/dns-json" "https://doh.pub/dns-query?name=www.cloudflare.com&type=HTTPS"
dig www.cloudflare.com @119.29.29.29 HTTPS
```

```
curl --http2 -H "accept: application/dns-json" "https:/1.1.1.1/dns-query?name=www.cloudflare.com&type=HTTPS"
dig www.cloudflare.com @1.1.1.1 HTTPS
```
xavierskip
2023-07-06 21:42:17 +08:00
@cccer #6 dnspod 可以添加呀,还有文档 https://docs.dnspod.cn/dns/help-https/

你试一下
`curl --http2 -H "accept: application/dns-json" "https://doh.pub/dns-query?name=www.cloudflare.com&type=65" `
上面的的这个命令我在 Windows 系统下报错`{"code":"UrlParameterError"}`,但是在另一台 linux 机器上得到了正常的返回

dig 话你试一下这个命令`dig www.cloudflare.com -t type65 @1.1.1.1`

另外也没说非要用 DNSPod 的,只不过我自己的域名在哪个上面,所以我的设定是这样的,其他支持 https 记录的 dns 服务提供商都可以的。
deorth
2023-07-06 23:30:15 +08:00
大清亡了
AnotherWorld
2023-11-13 11:45:49 +08:00
我也试了下这个方法,谷歌,edge 配置 doh 也不行。只有火狐 和我手机自带的浏览器可以。感觉用处不大,还有其他方案吗,不想用反代 流量会受限制
xavierskip
2023-11-13 13:11:42 +08:00
@AnotherWorld #9 是的,使用场景受限,自己宽带提供的服务自己用用得了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/954585

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX