V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xavierskip
V2EX  ›  分享发现

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

  •  1
     
  •   xavierskip · 233 天前 · 1536 次点击
    这是一个创建于 233 天前的主题,其中的信息可能已经有所发展或是发生改变。

    众所周知,家庭宽带是不被允许对外提供 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 服务,然后路由上做好端口映射。

    推荐阅读:

    10 条回复    2023-11-13 13:11:42 +08:00
    chenjia404
        1
    chenjia404  
       233 天前 via Android
    不过可以通过协议识别提供 http 服务吗
    xavierskip
        2
    xavierskip  
    OP
       233 天前
    @chenjia404 #1 你试一下呗。

    好像不行,只支持 HTTP/2 和 HTTP/3 协议。https://docs.dnspod.cn/dns/help-https/
    chenjia404
        3
    chenjia404  
       233 天前
    @xavierskip #2 你的 https 服务,运营商也能识别到,然后停你的服务。
    yoyoluck
        4
    yoyoluck  
       232 天前
    在非国内的域名服务商买个域名 然后做个隐式或显式 url 转换
    digimoon
        5
    digimoon  
       232 天前
    不管你 web 服务开在什么端口,isp 查到就能请你喝茶
    cccer
        6
    cccer  
       232 天前
    可是 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
        7
    xavierskip  
    OP
       232 天前
    @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
        8
    deorth  
       232 天前 via Android
    大清亡了
    AnotherWorld
        9
    AnotherWorld  
       103 天前
    我也试了下这个方法,谷歌,edge 配置 doh 也不行。只有火狐 和我手机自带的浏览器可以。感觉用处不大,还有其他方案吗,不想用反代 流量会受限制
    xavierskip
        10
    xavierskip  
    OP
       103 天前
    @AnotherWorld #9 是的,使用场景受限,自己宽带提供的服务自己用用得了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2759 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 08:18 · PVG 16:18 · LAX 00:18 · JFK 03:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.