在外网控制家庭设备,是一种正常合理的需求。由于可以避免中心服务器的故障和延迟,现代前端技术的发达、便捷,以及跨设备、跨系统兼容等优势,许多网络设备和应用都通过网页方式直接访问、控制。
可是,这样的模式最近面临了新的问题。过去家宽封禁了 80/443 端口,就算禁了 Web。而根据论坛网友的报告,现在似乎只要同时满足以下条件,就很可能会被“关照”:
随着法制观念的深入,如果规定合理,大家并不会排斥。然而想适应新的变化,目前还存在着不小的问题:
除了上述提到的几类解决方案,不知道是否还有其他便于 外网控制家庭设备 的思路?欢迎讨论
抛砖引玉一下,个人感觉不依赖域名解析的 IP 地址记录或许是一种解决方案。(不过还是有上述方案的影子)
这个方案包括以下部分:
当用户访问页面时,js 自动查询 IP 地址,然后跳转或在框架里显示网页,亦或者是直接用 jsproxy。
IP 地址在线记录的方式有很多。除了用免费的数据库服务,其实还可以写死在网页里,然后用一个自动化的更新 + git push 维护。
为了防止非用户主动访问 IP,可以用 js 实现类似 port knocking 的机制。这样直接访问网页端口可以做到无任何响应。
为了规避 http 特征,或许也可以进一步发展基于 js 的无客户端代理机制。(服务端在家庭的网络设备)
不过,跳转或框架显示似乎不太好解决 https,而目前 jsproxy 似乎也还不够完善。
忘了提了,还有一类与VPN有一点相似的解决方案统称为“内网穿透”,不管有没有公网IP都可以实现公网访问。
由于内网穿透到公网的端口不固定,且流量被其他协议封装,暂时未见算作违规的案例。
常用于内网穿透的工具有frp、Ngrok、n2n、ZeroTier、Wireguard等。其中有不少因为需要本地客户端,其实跟VPN类差别不大。
这类服务常常面临以下的权衡取舍:
(不知道有没有基于js实现的P2P模式NAT打洞)
1
n37r06u3 2020-01-04 15:40:51 +08:00 via iPhone
群晖 nas 装个 windows 虚拟机最简单
|
2
Archeb 2020-01-04 15:55:25 +08:00 via Android
我觉得 port knocking 就足够了
成功之后就把当前 ip 加入白名单,然后正常访问就是 基于 js 的无客户端代理 可以试试用 webrtc 打洞,这样也不需要中转服务器只需要 stun 服务器 |
3
ZRS 2020-01-04 15:56:16 +08:00 1
nebula 这类组网方案其实比较理想
|
4
ETiV 2020-01-04 16:10:52 +08:00 via iPhone
Surge
手机电脑都能用 |
5
LnTrx OP |
6
Mai1me 2020-01-04 16:33:33 +08:00 via Android
frp
vpn |
7
explore365 2020-01-04 16:44:26 +08:00
悦 me 智能网关 设备型号 F450G 端口转发后,任何数据都不行
telnet 连接路由,把路由器的防火墙关了,可以连通,但是 http 的还是不行,估计是在电信上层设备的防火墙给拦截了吧 |
8
soulzz 2020-01-04 16:53:42 +08:00
非 443 htttps
配置一下 ngnix 就行 |
9
0gys 2020-01-04 17:02:55 +08:00 via iPhone
解决不了问题,解决搞出问题的人^_^
|
11
tia 2020-01-04 17:18:12 +08:00
|
12
Archeb 2020-01-04 17:22:43 +08:00
> (不知道有没有基于 js 实现的 P2P 模式 NAT 打洞)
就是基于 WebRTC DataChannel 的方式啊,比如说 PeerJS |
14
Archeb 2020-01-04 17:23:49 +08:00
peerjs 可以运行在 node 上(服务器端),客户端只需要浏览器,然后用一个公网 stun 服务器打洞就可以直接建立连接
|
15
des 2020-01-04 17:29:29 +08:00 via Android
ddns+vpn 就行,ipsec psk 我现在就在用,各个设备都直接支持
有的路由器就有这个功能,不存在需要安装的情况 |
16
hlz0812 2020-01-04 17:32:45 +08:00 via Android
如果你是用于物联网设备,放心,今后物联网设备都是服务器中转,不需要公网 ip。如果是访问家里内部网络,用 vpn 连回去就行了,至少现在不管,哪天管了再说。现在运营商提供 APP 查询当前 ip 地址,不做 ddns 问题不大
|
17
LnTrx OP @Archeb 感觉理论上具有一定可行性。(不过万一碰上 Symmetric NAT 能稳定么?)
现在有没有基于这个思路实现在网页中,通过 WebRTC 以 P2P 形式传输内网网页内容的案例? |
19
des 2020-01-04 17:37:40 +08:00 via Android
还有 ddns 如果不选国内的,不太可能有人把互联网的所有域名都扫描一遍。
除非 ddns 的那个请求是 http 的,用 ddns 被警告 99%都不是 ddns 本身导致的 除非你用的 ddns 是国内厂商的,因为我也不清楚他们有没有上报 |
21
xenme 2020-01-04 17:43:00 +08:00 via iPhone
VPN 或者跟翻滚墙一样,开个端口搭建个你客户端支持的服务,然后加一条规则,你家里的 IP 段走对应的服务器就好了。
反正你哥哥电脑必然有你出墙的客户端。 再加上 ssid 或者网络判断规则,即使你回家了,也可以直联。 目前就该这样全自动的使用的 |
22
LnTrx OP @des 理论上监控 DNS 解析的情况,也可以发现未备案的境外域名-境内 IP 关系。不过如果没有 http 服务,应该还没有被干预的案例。
|
23
cwek 2020-01-04 17:57:47 +08:00
简单的做法,装一个绳子,对外端口只开绳子的,所有服务当内网使用。
|
24
LnTrx OP @soulzz 其实现在非标准端口的纯 https、纯 IPv6 公网网页还都未见被干预的案例,但技术上发现难度应该不大。(毕竟 TLS 的 ESNI 还不是很成熟)
|
25
brMu 2020-01-04 18:16:10 +08:00 via Android
ZeroTier,轻松搞定。
|
28
Archeb 2020-01-04 19:27:43 +08:00 via Android
|
30
cst4you 2020-01-04 19:43:09 +08:00 1
zerotier 目前还是香
|
31
fetich 2020-01-04 21:17:50 +08:00
|
32
133qaz 2020-01-04 23:59:57 +08:00 via Android
zerotier 路由器模式有点难以理解,只把 zerotier 部署在 omv 系统中。就目前使用来说,跨营运商高峰期 ping 值过大和丢失严重;速度还可以。移动 to 电信 https://s2.ax1x.com/2020/01/04/l0Lhc9.png
|
34
alphatoad 2020-01-05 02:01:30 +08:00 via iPhone
ddns 不能用,有没开 web 被搞的 report
|
35
wazon 2020-01-05 02:21:24 +08:00
|
37
cst4you 2020-01-05 05:49:17 +08:00 1
@fetich zt 有些创建出来的 network 就被限速甚至连不上, 重新创建直到打通即可.
我自己只试过上海同市同运营商(电信), 内网直通跑满所有可以用的带宽. 在日本玩, 用 surface pro 连回去上海, 也还勉强可以用. moon 的话可以尝试自己创建, 但是我在自己的 moon 上也没检测过中转流量在走, 可能我是打通了的关系吧 |
38
z7356995 2020-01-05 08:32:42 +08:00 via Android
有个服务器的话还是比较简单的,,家里 nas 每隔 5 分钟访问一下股务器报一下 ip, 服务器在根据 ip 生成网址导航页就可以了
|
39
xl224 2020-01-05 08:48:45 +08:00 via iPhone
我家目前的方案
1.阿里云一台轻量,然后部署 pptp 打隧道,家里反向链接到阿里云 2.阿里云配置路由把家里内网映射过去,直接配置转发规则 3.阿里云做域名备案 |
40
Liuman 2020-01-05 10:06:10 +08:00
我是买的 蜗牛 nas 和阿里云域名,nas 装了虚拟机 ,自己写的 nodejs 服务(开机自启) 10 秒获取一次公网 ip,然后判断是否 变更,如果变更了 ,那么调用 阿里云解析接口,自动修改域名解析的 ip 地址
|
41
Chigogo 2020-01-05 10:23:30 +08:00 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` |
42
FS1P7dJz 2020-01-05 11:09:59 +08:00
duckdns
|
43
locoz 2020-01-05 11:14:07 +08:00 via Android
不需要纠结那么多…转发+VPN 双方案够了,怕被检测出来就再套一层伪装(极端情况下自己写),fq 软件都是这么做的,gfw 都检测不了你担心运营商检测啥?
|
44
LnTrx OP 忽然想到,既然是境内的互联,经典的 sock5 网页代理现在是否可行?
|
45
prenwang 2020-01-05 12:58:09 +08:00
家庭 sdwan 市场终于到来
|
46
ety001 2020-01-05 13:43:46 +08:00 1
买的阿里云最便宜的弹性 ecs+5Mbps 带宽,部署的 nps/npc,机房选择跟自己同省的机房。
目前使用很稳定,速度也很快。从家里到机房的 ping 值 6ms 以内。 |
48
niubee1 2020-01-05 17:24:05 +08:00
为什么不用 MQTT ?为什么非要外面能直接连上家庭内网?用消息驱动设备不好么?
|
50
taresky 2020-01-06 08:04:59 +08:00 via iPhone
完美方案是各类 server,ss/snell/ssr/v2ray 都无所谓,你平时用什么翻墙就用什么类型。
通过规则完美分流,翻墙 /直连 /回家 /回公司都是 365x24 无缝的。而且只用开一个非 http 端口,规避封宽带的问题。 |
51
tankren 2020-01-06 09:02:28 +08:00
网关架设 1194VPN
|
54
LnTrx OP @taresky 不知道你有没有仔细看过上下文讨论,非 http+DDNS 也有风险。目前的报告主要还是有特征的流量( IPsec、SOCKS5 ),但这样的话无特征的流量似乎也不太安全。相反,现在还没有无域名解析却被关照的案例。
|
56
sadfQED2 2020-01-06 13:35:46 +08:00 via Android
我自己的实现,这个定时脚本,每 5 分钟上报 ip 到网盘。在路由器上面装 openvpn,需要连回家的时候打开网盘看 ip,然后连 vpn
|
57
marquina 2020-01-06 13:43:10 +08:00
@talarax7 DDNS 也能解决,home 可以通过多种方式上报 ip,本地发现 ip 有变动就重启 server,这样就避免解析了
|
60
godall 2020-01-06 16:24:12 +08:00
@taresky 用 oracle 的免费云 cloud,在国内用国外域名访问,结果 http 直接被 ban,https 可以。
|
63
ZeroKong 2020-01-11 01:42:46 +08:00
zerotier 是个好东西
|
64
wnjxyk 2021-01-18 14:36:20 +08:00
使用群晖自带 DDNS 与 *.synology.me 可行吗?这个域名应该是群晖自己备案过的。
|