V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
OpenWrt 是一个专门面向嵌入式设备的 Linux 发行版。你可以将 OpenWrt 支持的型号的嵌入式设备,比如各种路由器上的系统,换成一个有更多可能性可以折腾的 Linux 系统。
OpenWrt 官方网站
crazyBlack
V2EX  ›  OpenWrt

请教一个 openwrt + ipv6 + cloudflare 路由器回家的问题

  •  
  •   crazyBlack · 5 天前 · 1198 次点击

    这两天放假在家开始折腾路由器,遇到了一些问题没太搞明白想请教一下各位

    需求是我希望在外面可以通过域名访问家中的服务器 下面是我做的事情

    1. ipv6 已经准备好了,测试没问题,我可以正确的通过 ip 地址直接访问家中对应的服务(坐标上海移动,话说居然没封掉我的 80 端口,真是不可思议)

    2. 我的域名在 Cloudflare, 通过 openWrt 的 ddns-go 将 ipv6 动态绑定在我的域名上,赛博菩萨 Cludflare 还默认给了我 https 证书,在这一步我可以直接通过 https + 域名访问家中的路由器没有问题

    3. 我不太希望家里的服务裸奔,并且我不确定 80 端口是否一直都不会被封,所以我希望禁用掉 wan 口的入站数据,使用防火墙端口转发的方式仅开放部分我希望开放的端口,在这一步通过 ip 地址 + 端口号我可以正确的访问家中服务

    4. 问题出在这一步,我没办法通过域名 + 端口号的方式访问到我家中的服务(报错 SSL handshake failed )

    问题:

    1. 为什么我没办法通过域名 + 端口号的方式访问家中服务

    2. 我的 openwrt 的管理界面理论上应该是在 80 端口上,Cloudflare 给我提供了 https 证书,那么讲道理应该会访问到我服务的 443 端口,在我什么都没做的情况下为什么还是能正确访问到 80 端口上的服务

    3. 手机端运行 surge 或者电脑端的 surge 开启 enhanced mode 似乎都会会影响我直接访问 ipv6 地址,这个有什么解决办法吗

    我做的尝试: 我了解 Cloudflare 仅仅会代理部分端口 由于是 https 我特意将防火墙的对外端口设置为 2053 ,但是无论是开启代理还是关闭代理(黄云/灰云)都没办法通过域名 + 端口号访问服务 我在 itdog 使用 tcping 域名 + 端口是全绿的

    不是专业的,搞了好几天搞不定,来请教一下大家

    下面是各种配置的截图

    防火墙

    防火墙

    cf

    21 条回复    2025-02-02 14:05:37 +08:00
    Yanel
        1
    Yanel  
       5 天前   ❤️ 1
    端口转发是 V4 服务,而 CF 解析的是 V6

    V6 我记得是不需要端口转发的
    ik
        2
    ik  
       5 天前 via iPhone
    ipv6 已经准备好了,测试没问题,我可以正确的通过 ip 地址直接访问家中对应的服务(坐标上海移动,话说居然没封掉我的 80 端口,真是不可思议)


    是怎么测试的呢? 连 wifi 测试? 还是用蜂窝网络? 蜂窝网络是同一家运营商吗? 最好用海外 ipv6 测试试试
    crazyBlack
        3
    crazyBlack  
    OP
       5 天前
    @ik 服务在 80 上,我自己的手机用 5g 网络还有异地的朋友都是直接输 IP 不加端口号就能连上
    ik
        4
    ik  
       5 天前 via iPhone
    @crazyBlack 那看起来确实放通了,可能是#1 提到的问题
    ae
        5
    ae  
       5 天前
    我也在老家能直接输 ipv6 连上 openwrt 软路由,spaceship 注册的域名,前两天把域名 dns 改 CF ,刚开始可用,第二天早上起来就不行了,现在又改回 spaceship 的 dns 直接 CNAME 这个 ipv6 地址(反正这个地址装宽带到现在都没变过)
    crazyBlack
        6
    crazyBlack  
    OP
       5 天前
    @Yanel 抱歉,不是专业的这里没太看明白,这里说的端口转发是 v4 服务是指什么啊,如果我拒绝 wan 口入站数据的前提下,不开端口转发是没办法 ipv6 地址 + 端口号访问服务的,开了才能,下面这个是配置

    ![]( https://telegraph-image-92x.pages.dev/file/e35ae003198f6cc83814e-f1041d239ba6dfcf6c.png)
    zfjdif
        7
    zfjdif  
       5 天前   ❤️ 1
    1. 你开启了代理,[Cloudflare 只支持部分端口]( https://developers.cloudflare.com/fundamentals/reference/network-ports/) ,流量都走 Cloudflare 代理了一次,域名+端口应该是无法访问
    2. 同样是走了代理,Cloudflare 给套了反代
    3. 不了解

    “没办法通过域名 + 端口号访问服务”指的是 OpenWrt 的页面吗?如果不是的话,你只开了 2053 端口,肯定无法访问其他服务吧。

    我本地是:PVE 开了台虚拟机专门跑 Nginx ,专门来转发内部服务,都走 Cloudflare 代理,使用二级域名 + HTTPS 访问。流量从 Cloudflare -> OpenWrt -> Nginx 虚拟机(你可以试试 OpenWrt 反代内部服务?) -> 内部其他服务。
    zfjdif
        8
    zfjdif  
       5 天前
    @zfjdif 通过域名走 Cloudflare 代理的好处是:双栈访问,一些服务不需要有 IPv6 才能访问,一些 RDP 等的流量走 IPv6 或者 Zerotier 都可以
    crazyBlack
        9
    crazyBlack  
    OP
       5 天前
    @zfjdif 有什么解决办法吗,听上去关闭 cf 的代理就可以解决这个问题,但是我关闭代理 cf 仅作 dns 解析的情况下还是没办法访问到服务

    这里只开 2053 是因为目前我只是想访问 80 端口的服务,所以我只开了 2053 -> 80 的端口转发

    流量进来之后的事情我理解都可以再聊,现在好像流量还进不来呢哈哈
    edcopclub
        10
    edcopclub  
       5 天前 via Android   ❤️ 1
    浏览器到 cloudflare ,和 cloudflare 到路由器的 https 配置都可以检查一下
    itiao
        11
    itiao  
       5 天前 via Android   ❤️ 1
    有个 smbox,singbox+mosdns,也有回家服务,可以试试,免费的和收费的区别就是限制节点和机场订阅数量而已.
    https://smbox.buzheteng.org/

    https://t.me/buaizheteng
    Vancion
        12
    Vancion  
       5 天前
    我试了一下是不是防火墙规则里的目标区域是未指定?
    如果改成 lan 然后指定特定设备的 ip 呢。
    zfjdif
        13
    zfjdif  
       5 天前
    @crazyBlack 留个 wx 交流下哇,这里不太容易说清楚
    yufeng0681
        14
    yufeng0681  
       5 天前   ❤️ 1
    方案 1 、把 https 证书功能去掉, 只需要 http 服务,那你只开启映射 80 就没问题
    方案 2 、把内网 443 端口也开放出去,外网也是 443 ,内网也是 443. 这样 https 才能跑通( 80 重定向到 443 端口鉴权走 https 流程)
    kingloong
        15
    kingloong  
       5 天前 via Android
    常用端口肯定要封的,我之前也是运营商都放开的,用了几年,80 ,443 全开的,去年突然在外回不去了,到家一测试运营商升级把端口封了。我的 ipv6 防火墙端口直接全放了,反正我就自己一个人用,也不对外,不用若密码就完了,再说你个人有啥隐私值得人家费劲进去折腾一下。我目前主路由对外,NAS 对外,家里的电脑开起来,自动更新域名的 V6 地址,有需要远程桌面直接就连上了。用的很舒服,再说现在家宽对外那怕是自己用也会被查的。
    LnTrx
        16
    LnTrx  
       5 天前   ❤️ 1
    1. 先确保 cf 仅作 dns 解析情况的正确性。
    本地执行 nslookup 域名,确认结果是你的 IPv6 地址而不是 cf 。
    然后在非家庭网络分别测试 http://域名:端口,http://[IPv6]:端口 是否可以访问。
    如果还是有区别再做进一步判断。

    2. 确认 cf 反代的加密模式,Flexible 模式可能会 80 回源。

    如果需要挂 cf ,推荐 CloudFlare Tunnel ,没有公网也可以用,比常规回源方便很多。
    kingloong
        17
    kingloong  
       5 天前 via Android   ❤️ 1
    op 系统可以直接改 web 服务端口的,不想改就设置防火墙转发,外部访问 A 端口,路由直接把数据包给内部 B 端口也就是 80 端口。第 1 个问题应该是你防火墙规则不对,你说的第 2 个问题,op 系统的 80 ,443 默认全开的,你用 http 就走 80 ,https 就 443 ,不需要你操作啥。第 3 个问题,我的 VPS 是双栈的,但是开了也回不去,再说也没有开着代理回家的需求,没深入研究过,我估摸着开代理回不去大概率是 app 规则设置不对。CF 的代理确实只对部分端口有效,像你用的 2053 ,2096 啥的。去小破站多看看,视频大把
    crazyBlack
        18
    crazyBlack  
    OP
       5 天前
    @yufeng0681 啊感谢🙏,明知是 https 流量还转发到 80 端口确实是我思想滑坡了,方案 1 确实生效了,方案 2 我尝试了把 https 流量转发到 443 但是被 nginx 拦下来了,报了个 403 但是看起来至少请求进来了,我仔研究下,感谢各位
    crazyBlack
        19
    crazyBlack  
    OP
       5 天前
    @kingloong 感谢,你的回答是最专业的,我也反应过来了,确实不该把 https 流量转发到 80 ,ban 掉 cf 的 https 就起效了, 然后 op 也确实是对 80 和 443 两个全开,surge 是小问题我再研究研究
    muhahaha
        20
    muhahaha  
       5 天前   ❤️ 1
    用的 openwrt ?建议用 lucky 实现所需功能。
    SenLief
        21
    SenLief  
       4 天前   ❤️ 1
    不要用 cf 的 https ,直接在动态 ddns 把 ipv6 地址更新就可以,如果非要用 https 可以在 openwrt 上配置。

    如果你想用一个域名不同的端口来访问不同的服务,最好的办法是利用反代,比如 nginx 或者 caddy ,你有 80 推荐 caddy 。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1106 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:02 · PVG 02:02 · LAX 10:02 · JFK 13:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.