应对家宽 Web 的收紧,讨论一下在外网控制家庭设备的方案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LnTrx
V2EX    宽带症候群

应对家宽 Web 的收紧,讨论一下在外网控制家庭设备的方案

  •  
  •   LnTrx 2020 年 1 月 4 日 16817 次点击
    这是一个创建于 2222 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在外网控制家庭设备,是一种正常合理的需求。由于可以避免中心服务器的故障和延迟,现代前端技术的发达、便捷,以及跨设备、跨系统兼容等优势,许多网络设备和应用都通过网页方式直接访问、控制。
    可是,这样的模式最近面临了新的问题。过去家宽封禁了 80/443 端口,就算禁了 Web。而根据论坛网友的报告,现在似乎只要同时满足以下条件,就很可能会被“关照”:

    1. 上海 /深圳 电信的 家宽 /商宽 用户,且获得了公网 IPv4
    2. 存在一解析结果指向该 IP 的域名(含子域名),且这对关系未经系统备案
    3. 用户的 IP 存在任意一个向外部开放的端口,且能给出符合 HTTP 特征的响应

    随着法制观念的深入,如果规定合理,大家并不会排斥。然而想适应新的变化,目前还存在着不小的问题:

    1. 为避免域名解析,直接用 IP 访问。然而手动查询最新的 IP 地址十分麻烦,也很难实现可被浏览器信任的 HTTPS。(其实 IP 访问严格来讲也要备案)
    2. 为避免网页特征,通过 VPN 进入内网。然而 VPN 类解决方案往往需要安装和开启额外的客户端,为避免所有本地流量都走 VPN 还要进一步的配置,相比能跨设备、跨系统快捷访问的网页麻烦不少。(自建 VPN 也存在着合规的风险)
    3. 为避免合规风险,正式申请备案。这对于有固定 IP 的商宽是可行的。然而家宽是动态 IP,目前不存在合规可行的备案方式。

    除了上述提到的几类解决方案,不知道是否还有其他便于 外网控制家庭设备 的思路?欢迎讨论


    抛砖引玉一下,个人感觉不依赖域名解析的 IP 地址记录或许是一种解决方案。(不过还是有上述方案的影子)
    这个方案包括以下部分:

    • 一个在境内外都可以免费托管的静态页面
    • 一个可实时更新和在线查询的 IP 地址记录

    当用户访问页面时,js 自动查询 IP 地址,然后跳转或在框架里显示网页,亦或者是直接用 jsproxy。
    IP 地址在线记录的方式有很多。除了用免费的数据库服务,其实还可以写死在网页里,然后用一个自动化的更新 + git push 维护。

    为了防止非用户主动访问 IP,可以用 js 实现类似 port knocking 的机制。这样直接访问网页端口可以做到无任何响应。
    为了规避 http 特征,或许也可以进一步发展基于 js 的无客户端代理机制。(服务端在家庭的网络设备)

    不过,跳转或框架显示似乎不太好解决 https,而目前 jsproxy 似乎也还不够完善。

    第 1 条附言    2020 年 1 月 4 日

    忘了提了,还有一类与VPN有一点相似的解决方案统称为“内网穿透”,不管有没有公网IP都可以实现公网访问。
    由于内网穿透到公网的端口不固定,且流量被其他协议封装,暂时未见算作违规的案例。
    常用于内网穿透的工具有frp、Ngrok、n2n、ZeroTier、Wireguard等。其中有不少因为需要本地客户端,其实跟VPN类差别不大。

    这类服务常常面临以下的权衡取舍:

    1. 需要有第三方中继服务器。使用公共的服务器则稳定性较差,使用自建的服务器则成本上升。
    2. 稳定性和速度不太有保证。如果流量经服务器中继则严重受其制约,而P2P模式一般需要本地客户端且在NAT下的可靠性相当没有保证。

    (不知道有没有基于js实现的P2P模式NAT打洞)

    65 条回复    2021-01-18 14:56:45 +08:00
    n37r06u3
        1
    n37r06u3  
       2020 年 1 月 4 日 via iPhone
    群晖 nas 装个 windows 虚拟机最简单
    Archeb
        2
    Archeb  
       2020 年 1 月 4 日 via Android
    我觉得 port knocking 就足够了
    成功之后就把当前 ip 加入白名单,然后正常访问就是
    基于 js 的无客户端代理 可以试试用 webrtc 打洞,这样也不需要中转服务器只需要 stun 服务器
    ZRS
        3
    ZRS  
       2020 年 1 月 4 日   1
    nebula 这类组网方案其实比较理想
    ETiV
        4
    ETiV  
       2020 年 1 月 4 日 via iPhone
    Surge
    手机电脑都能用
    LnTrx
        5
    LnTrx  
    OP
       2020 年 1 月 4 日
    @n37r06u3 在能找到 IP 的情况下也算是一个折中的方案,不过非 Windows 环境下的客户端还是免不了,要调取文件也不是很方便。

    @Archeb 即便有 port knocking,感觉保留 DDNS 解析还是有算作违规的可能。如果纯 IP 访问倒是可以用,而且可以交给公网可访问的带 js 的静态页面实现。

    @ZRS 使人想起了像 IPFS 这样的非中心化网络
    Mai1me
        6
    Mai1me  
       2020 年 1 月 4 日 via Android
    frp
    vpn
    explore365
        7
    explore365  
       2020 年 1 月 4 日
    悦 me 智能网关 设备型号 F450G 端口转发后,任何数据都不行
    telnet 连接路由,把路由器的防火墙关了,可以连通,但是 http 的还是不行,估计是在电信上层设备的防火墙给拦截了吧
    soulzz
        8
    soulzz  
       2020 年 1 月 4 日
    非 443 htttps
    配置一下 ngnix 就行
    0gys
        9
    0gys  
       2020 年 1 月 4 日 via iPhone
    解决不了问题,解决搞出问题的人^_^
    ccc008
        10
    ccc008  
       2020 年 1 月 4 日
    @talarax7 #5 DDNS 解析应该没事。就算 DDNS 不行了。还可以主动上报 ip 到一个接口。方法总比困难多。
    tia
        11
    tia  
       2020 年 1 月 4 日
    Archeb
        12
    Archeb  
       2020 年 1 月 4 日
    > (不知道有没有基于 js 实现的 P2P 模式 NAT 打洞)
    就是基于 WebRTC DataChannel 的方式啊,比如说 PeerJS
    abbottcn
        13
    abbottcn  
       2020 年 1 月 4 日 via iPhone
    @ZRS 这个方案,。处于可用状态,虽然没达到手册里说的场景。
    Archeb
        14
    Archeb  
       2020 年 1 月 4 日
    peerjs 可以运行在 node 上(服务器端),客户端只需要浏览器,然后用一个公网 stun 服务器打洞就可以直接建立连接
    des
        15
    des  
       2020 年 1 月 4 日 via Android
    ddns+vpn 就行,ipsec psk 我现在就在用,各个设备都直接支持
    有的路由器就有这个功能,不存在需要安装的情况
    hlz0812
        16
    hlz0812  
       2020 年 1 月 4 日 via Android
    如果你是用于物联网设备,放心,今后物联网设备都是服务器中转,不需要公网 ip。如果是访问家里内部网络,用 vpn 连回去就行了,至少现在不管,哪天管了再说。现在运营商提供 APP 查询当前 ip 地址,不做 ddns 问题不大
    LnTrx
        17
    LnTrx  
    OP
       2020 年 1 月 4 日
    @Archeb 感觉理论上具有一定可行性。(不过万一碰上 Symmetric NAT 能稳定么?)
    现在有没有基于这个思路实现在网页中,通过 WebRTC 以 P2P 形式传输内网网页内容的案例?
    LnTrx
        18
    LnTrx  
    OP
       2020 年 1 月 4 日
    @hlz0812 推广 IPv6 的原因之一就是避免物联网设备服务器中转带来的各种问题
    des
        19
    des  
       2020 年 1 月 4 日 via Android
    还有 ddns 如果不选国内的,不太可能有人把互联网的所有域名都扫描一遍。
    除非 ddns 的那个请求是 http 的,用 ddns 被警告 99%都不是 ddns 本身导致的
    除非你用的 ddns 是国内厂商的,因为我也不清楚他们有没有上报
    LnTrx
        20
    LnTrx  
    OP
       2020 年 1 月 4 日
    @des 部分地区 500、4500 端口也被封了,你的客户端能支持非标准端口么?
    xenme
        21
    xenme  
       2020 年 1 月 4 日 via iPhone
    VPN 或者跟翻滚墙一样,开个端口搭建个你客户端支持的服务,然后加一条规则,你家里的 IP 段走对应的服务器就好了。

    反正你哥哥电脑必然有你出墙的客户端。
    再加上 ssid 或者网络判断规则,即使你回家了,也可以直联。


    目前就该这样全自动的使用的
    LnTrx
        22
    LnTrx  
    OP
       2020 年 1 月 4 日
    @des 理论上监控 DNS 解析的情况,也可以发现未备案的境外域名-境内 IP 关系。不过如果没有 http 服务,应该还没有被干预的案例。
    cwek
        23
    cwek  
       2020 年 1 月 4 日
    简单的做法,装一个绳子,对外端口只开绳子的,所有服务当内网使用。
    LnTrx
        24
    LnTrx  
    OP
       2020 年 1 月 4 日
    @soulzz 其实现在非标准端口的纯 https、纯 IPv6 公网网页还都未见被干预的案例,但技术上发现难度应该不大。(毕竟 TLS 的 ESNI 还不是很成熟)
    brMu
        25
    brMu  
       2020 年 1 月 4 日 via Android
    ZeroTier,轻松搞定。
    des
        26
    des  
       2020 年 1 月 4 日 via Android
    @talarax7
    解析情况确实有可能,但是我觉得凭这个就把人封了
    真要是这样,我就能让全国人民都上不了网
    des
        27
    des  
       2020 年 1 月 4 日 via Android
    @talarax7 我这里没有,要是端口都要封的话,那就只能转发或者打洞了
    Archeb
        28
    Archeb  
       2020 年 1 月 4 日 via Android
    @talarax7 summetric nat 应该就不行了

    目前主要用在 im 视频通话里面,提供 web 我还没见过

    不过理论可行 改天有空我造个轮子试试
    Archeb
        29
    Archeb  
       2020 年 1 月 4 日 via Android
    @Archeb *symmetric
    cst4you
        30
    cst4you  
       2020 年 1 月 4 日   1
    zerotier 目前还是香
    fetich
        31
    fetich  
       2020 年 1 月 4 日
    @brMu
    @cst4you 两位老哥,想咨询下 ZeroTier 使用中遇到的问题,谢谢。
    部署 ZeroTier 在路由器后的设备上,需要在路由器设置端口转发的规则么?
    如果两个内网的设备通过 ZeroTier 连接,可以访问对方内网中的其他设备么?可以的话,如何设置?
    133qaz
        32
    133qaz  
       2020 年 1 月 4 日 via Android
    zerotier 路由器模式有点难以理解,只把 zerotier 部署在 omv 系统中。就目前使用来说,跨营运商高峰期 ping 值过大和丢失严重;速度还可以。移动 to 电信 https://s2.ax1x.com/2020/01/04/l0Lhc9.png
    133qaz
        33
    133qaz  
       2020 年 1 月 5 日 via Android
    @fetich 看介绍是软交换机模式,不需要做端口转发。
    alphatoad
        34
    alphatoad  
       2020 年 1 月 5 日 via iPhone
    ddns 不能用,有没开 web 被搞的 report
    wazon
        35
    wazon  
       2020 年 1 月 5 日
    @des
    @ccc008
    @alphatoad
    确实存在没有开 http 域名解析也被提醒的案例(/t/632414 ),但感觉有点奇怪。不是很理解发现的机制是什么,以及如何排除被未知人士恶意解析的情况。
    alphatoad
        36
    alphatoad  
       2020 年 1 月 5 日 via iPhone
    @wazon 布隆过滤器就好了技术上没难度,国内都是有 dpi 的
    cst4you
        37
    cst4you  
       2020 年 1 月 5 日   1
    @fetich zt 有些创建出来的 network 就被限速甚至连不上, 重新创建直到打通即可.
    我自己只试过上海同市同运营商(电信), 内网直通跑满所有可以用的带宽.
    在日本玩, 用 surface pro 连回去上海, 也还勉强可以用.
    moon 的话可以尝试自己创建, 但是我在自己的 moon 上也没检测过中转流量在走, 可能我是打通了的关系吧
    z7356995
        38
    z7356995  
       2020 年 1 月 5 日 via Android
    有个服务器的话还是比较简单的,,家里 nas 每隔 5 分钟访问一下股务器报一下 ip, 服务器在根据 ip 生成网址导航页就可以了
    xl224
        39
    xl224  
       2020 年 1 月 5 日 via iPhone
    我家目前的方案
    1.阿里云一台轻量,然后部署 pptp 打隧道,家里反向链接到阿里云
    2.阿里云配置路由把家里内网映射过去,直接配置转发规则
    3.阿里云做域名备案
    Liuman
        40
    Liuman  
       2020 年 1 月 5 日
    我是买的 蜗牛 nas 和阿里云域名,nas 装了虚拟机 ,自己写的 nodejs 服务(开机自启) 10 秒获取一次公网 ip,然后判断是否 变更,如果变更了 ,那么调用 阿里云解析接口,自动修改域名解析的 ip 地址
    Chigogo
        41
    Chigogo  
       2020 年 1 月 5 日   1
    这两天折腾成功:路由器 ip 改变则报告,向云服务器报告(腾讯云):

    ```
    mkdir /etc/ppp/ip-up.d/ #OpenWrt 在 pppoe ip 改变 Event 发生后,会自动这个脚本,无需其他配置

    echo '#!/bin/sh
    me=homeNas #声明这个变量是为了在家庭路由器下写 Hosts 中
    ip=$(ifconfig | grep -A 1 "wan" |grep inet | grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}"|sed -n '1p') #获取 wan 口 ip
    sed -i "/$me$/d" /etc/myhosts # 在自定义的 myhosts 中删除上次记录的 wan ip ;自定义 hosts 可以让路由器下设备无痛访问家里 ip
    echo $ip $me >>/etc/myhosts # 在自定义的 myhosts 中更新本次新获得 wan ip ;依然,自定义 hosts 可以让路由器下设备无痛访问家里 ip

    # 下面这个从路由器 ssh 到云服务器;请把 your-server-ip/port 换成你自己的;记住云服务器 ip 后,可以删除-y -y
    ssh root@your-server-ip/port -y -y -i /root/.ssh/id_ras "bash -s" <<EOF
    echo $ip>$me
    EOF
    '>/etc/ppp/ip-up.d/push-route-ip-to-server
    chmod +x /etc/ppp/ip-up.d/push-route-ip-to-server

    # 使用上述 EOF 方法,可以将 ip 变量写入云服务器中,这个方法很好了
    ```

    脚本写好后,每次 ip 改变,OpenWrt 会自动 push-route-ip-to-server。亦可以手动执行:
    `sh /etc/ppp/ip-up.d/push-route-ip-to-server`
    FS1P7dJz
        42
    FS17dJz  
       2020 年 1 月 5 日
    duckdns
    locoz
        43
    locoz  
       2020 年 1 月 5 日 via Android
    不需要纠结那么多…转发+VPN 双方案够了,怕被检测出来就再套一层伪装(极端情况下自己写),fq 软件都是这么做的,gfw 都检测不了你担心运营商检测啥?
    LnTrx
        44
    LnTrx  
    OP
       2020 年 1 月 5 日
    忽然想到,既然是境内的互联,经典的 sock5 网页代理现在是否可行?
    prenwang
        45
    prenwang  
       2020 年 1 月 5 日
    家庭 sdwan 市场终于到来
    ety001
        46
    ety001  
       2020 年 1 月 5 日   1
    买的阿里云最便宜的弹性 ecs+5Mbps 带宽,部署的 nps/npc,机房选择跟自己同省的机房。

    目前使用很稳定,速度也很快。从家里到机房的 ping 值 6ms 以内。
    LnTrx
        47
    LnTrx  
    OP
       2020 年 1 月 5 日
    @ety001 nps 似乎还是免不了服务端和客户端,但看起来平台覆盖和文档都做得比较好,是一个功能全面的内网穿透工具
    niubee1
        48
    niubee1  
       2020 年 1 月 5 日
    为什么不用 MQTT ?为什么非要外面能直接连上家庭内网?用消息驱动设备不好么?
    shunf4
        49
    shunf4  
       2020 年 1 月 6 日 via Android
    taresky
        50
    taresky  
       2020 年 1 月 6 日 via iPhone
    完美方案是各类 server,ss/snell/ssr/v2ray 都无所谓,你平时用什么翻墙就用什么类型。

    通过规则完美分流,翻墙 /直连 /回家 /回公司都是 365x24 无缝的。而且只用开一个非 http 端口,规避封宽带的问题。
    tankren
        51
    tankren  
       2020 年 1 月 6 日
    网关架设 1194VPN
    LnTrx
        52
    LnTrx  
    OP
       2020 年 1 月 6 日
    @taresky 你的完美方案里好像没有应对动态 IP 的部分?
    taresky
        53
    taresky  
       2020 年 1 月 6 日
    @talarax7 啊?动态 IP ddns 不就解决了,这不是最基础的么。。。
    LnTrx
        54
    LnTrx  
    OP
       2020 年 1 月 6 日
    @taresky 不知道你有没有仔细看过上下文讨论,非 http+DDNS 也有风险。目前的报告主要还是有特征的流量( IPsec、SOCKS5 ),但这样的话无特征的流量似乎也不太安全。相反,现在还没有无域名解析却被关照的案例。
    taresky
        55
    taresky  
       2020 年 1 月 6 日 via iPhone
    @talarax7 “ 非 http+DDNS 也有风险” 这个目前我还没看到案例。
    sadfQED2
        56
    sadfQED2  
       2020 年 1 月 6 日 via Android
    我自己的实现,这个定时脚本,每 5 分钟上报 ip 到网盘。在路由器上面装 openvpn,需要连回家的时候打开网盘看 ip,然后连 vpn
    marquina
        57
    marquina  
       2020 年 1 月 6 日
    @talarax7 DDNS 也能解决,home 可以通过多种方式上报 ip,本地发现 ip 有变动就重启 server,这样就避免解析了
    LnTrx
        58
    LnTrx  
    OP
       2020 年 1 月 6 日
    @taresky 两个案例的链接就在前面的一串讨论里
    godall
        59
    godall  
       2020 年 1 月 6 日
    @Archeb 用 port knock 的话,怎么支持各类终端登录?比如 pc/手机 /pad。。。
    godall
        60
    godall  
       2020 年 1 月 6 日
    @taresky 用 oracle 的免费云 cloud,在国内用国外域名访问,结果 http 直接被 ban,https 可以。
    taresky
        61
    taresky  
       2020 年 1 月 6 日
    @godall ?这说的不是一回事吧
    wslzy007
        62
    wslzy007  
       2020 年 1 月 9 日
    @all 使用 TCP 打洞的方案吧,没有 QoS 之痛,用 SG,github 搜索 smarGate
    ZeroKong
        63
    ZeroKong  
       2020 年 1 月 11 日
    zerotier 是个好东西
    wnjxyk
        64
    wnjxyk  
       2021 年 1 月 18 日
    使用群晖自带 DDNS 与 *.synology.me 可行吗?这个域名应该是群晖自己备案过的。
    wnjxyk
        65
    wnjxyk  
       2021 年 1 月 18 日
    @wnjxyk 是我的错,群晖的 DDNS 域名似乎都没有备案
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4749 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 03:10 PVG 11:10 LAX 19:10 JFK 22:10
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86