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

2020-01-04 15:16:49 +08:00
 LnTrx

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

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

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

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

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


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

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

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

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

14928 次点击
所在节点    宽带症候群
65 条回复
Chigogo
2020-01-05 10:23:30 +08:00
这两天折腾成功:路由器 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
2020-01-05 11:09:59 +08:00
duckdns
locoz
2020-01-05 11:14:07 +08:00
不需要纠结那么多…转发+VPN 双方案够了,怕被检测出来就再套一层伪装(极端情况下自己写),fq 软件都是这么做的,gfw 都检测不了你担心运营商检测啥?
LnTrx
2020-01-05 12:23:55 +08:00
忽然想到,既然是境内的互联,经典的 sock5 网页代理现在是否可行?
prenwang
2020-01-05 12:58:09 +08:00
家庭 sdwan 市场终于到来
ety001
2020-01-05 13:43:46 +08:00
买的阿里云最便宜的弹性 ecs+5Mbps 带宽,部署的 nps/npc,机房选择跟自己同省的机房。

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

通过规则完美分流,翻墙 /直连 /回家 /回公司都是 365x24 无缝的。而且只用开一个非 http 端口,规避封宽带的问题。
tankren
2020-01-06 09:02:28 +08:00
网关架设 1194VPN
LnTrx
2020-01-06 11:46:14 +08:00
@taresky 你的完美方案里好像没有应对动态 IP 的部分?
taresky
2020-01-06 11:55:59 +08:00
@talarax7 啊?动态 IP ddns 不就解决了,这不是最基础的么。。。
LnTrx
2020-01-06 12:25:09 +08:00
@taresky 不知道你有没有仔细看过上下文讨论,非 http+DDNS 也有风险。目前的报告主要还是有特征的流量( IPsec、SOCKS5 ),但这样的话无特征的流量似乎也不太安全。相反,现在还没有无域名解析却被关照的案例。
taresky
2020-01-06 13:27:07 +08:00
@talarax7 “ 非 http+DDNS 也有风险” 这个目前我还没看到案例。
sadfQED2
2020-01-06 13:35:46 +08:00
我自己的实现,这个定时脚本,每 5 分钟上报 ip 到网盘。在路由器上面装 openvpn,需要连回家的时候打开网盘看 ip,然后连 vpn
marquina
2020-01-06 13:43:10 +08:00
@talarax7 DDNS 也能解决,home 可以通过多种方式上报 ip,本地发现 ip 有变动就重启 server,这样就避免解析了
LnTrx
2020-01-06 13:54:39 +08:00
@taresky 两个案例的链接就在前面的一串讨论里
godall
2020-01-06 16:21:35 +08:00
@Archeb 用 port knock 的话,怎么支持各类终端登录?比如 pc/手机 /pad。。。
godall
2020-01-06 16:24:12 +08:00
@taresky 用 oracle 的免费云 cloud,在国内用国外域名访问,结果 http 直接被 ban,https 可以。

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

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

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

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

© 2021 V2EX