LnTrx

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

  •  
  •   LnTrx · Jan 4, 2020 · 18024 views
    This topic created in 2498 days ago, the information mentioned may be changed or developed.

    在外网控制家庭设备,是一种正常合理的需求。由于可以避免中心服务器的故障和延迟,现代前端技术的发达、便捷,以及跨设备、跨系统兼容等优势,许多网络设备和应用都通过网页方式直接访问、控制。
    可是,这样的模式最近面临了新的问题。过去家宽封禁了 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 似乎也还不够完善。

    Supplement 1  ·  Jan 4, 2020

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

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

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

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

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

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

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

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


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

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

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

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

    通过规则完美分流,翻墙 /直连 /回家 /回公司都是 365x24 无缝的。而且只用开一个非 http 端口,规避封宽带的问题。
    tankren
    tankren
    Jan 6, 2020
    51
    网关架设 1194VPN
    LnTrx
    LnTrx
    OP
    Jan 6, 2020
    52
    @taresky 你的完美方案里好像没有应对动态 IP 的部分?
    taresky
    taresky
    Jan 6, 2020
    53
    @talarax7 啊?动态 IP ddns 不就解决了,这不是最基础的么。。。
    LnTrx
    LnTrx
    OP
    Jan 6, 2020
    54
    @taresky 不知道你有没有仔细看过上下文讨论,非 http+DDNS 也有风险。目前的报告主要还是有特征的流量( IPsec、SOCKS5 ),但这样的话无特征的流量似乎也不太安全。相反,现在还没有无域名解析却被关照的案例。
    taresky
    taresky
    Jan 6, 2020 via iPhone
    55
    @talarax7 “ 非 http+DDNS 也有风险” 这个目前我还没看到案例。
    sadfQED2
    sadfQED2
    Jan 6, 2020 via Android
    56
    我自己的实现,这个定时脚本,每 5 分钟上报 ip 到网盘。在路由器上面装 openvpn,需要连回家的时候打开网盘看 ip,然后连 vpn
    marquina
    marquina
    Jan 6, 2020
    57
    @talarax7 DDNS 也能解决,home 可以通过多种方式上报 ip,本地发现 ip 有变动就重启 server,这样就避免解析了
    LnTrx
    LnTrx
    OP
    Jan 6, 2020
    58
    @taresky 两个案例的链接就在前面的一串讨论里
    godall
    godall
    Jan 6, 2020
    59
    @Archeb 用 port knock 的话,怎么支持各类终端登录?比如 pc/手机 /pad。。。
    godall
    godall
    Jan 6, 2020
    60
    @taresky 用 oracle 的免费云 cloud,在国内用国外域名访问,结果 http 直接被 ban,https 可以。
    taresky
    taresky
    Jan 6, 2020
    61
    @godall ?这说的不是一回事吧
    wslzy007
    wslzy007
    Jan 9, 2020
    62
    @all 使用 TCP 打洞的方案吧,没有 QoS 之痛,用 SG,github 搜索 smarGate
    ZeroKong
    ZeroKong
    Jan 11, 2020
    63
    zerotier 是个好东西
    wnjxyk
    wnjxyk
    Jan 18, 2021
    64
    使用群晖自带 DDNS 与 *.synology.me 可行吗?这个域名应该是群晖自己备案过的。
    wnjxyk
    wnjxyk
    Jan 18, 2021
    65
    @wnjxyk 是我的错,群晖的 DDNS 域名似乎都没有备案
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4774 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 97ms · UTC 08:13 · PVG 16:13 · LAX 00:13 · JFK 03:13
    ♥ Do have faith in what you're doing.