内网穿透技术
基础
网络传输需要知道目的ip地址,并附带上源ip地址使得数据包可以返回
基本知识:全球的ipv4的数量是有限的,在局域网内并没有一个公网ip,而是局域网的私网IP。在网络到达路由器时,路由器通过NAT分配一个公网ip从而实现网路的传输。
- NAT 是一种网络技术,用于在私有网络和公共网络之间转换IP地址。它允许多个设备共享一个公共IP地址,是解决IPv4地址耗尽问题的一种方法。网络层
- NAPT 是NAT的一种扩展,它不仅转换IP地址,还包括端口号的转换。这允许多个设备不仅共享同一个公共IP地址,还可以通过不同的端口标识,实现更加高效的地址和端口的映射。传输层
假设家用路由器的公网IP为
12.0.2.1
,内网设备分别为192.168.1.100
和192.168.1.101
。当这两个内网设备同时使用HTTP(假设使用端口80)访问外网时:
- 路由器可能会将
192.168.1.100:80
的流量映射到12.0.2.1:10000
- 将
192.168.1.101:80
的流量映射到12.0.2.1:10001
同时路由器记录下一个ip端口映射表,根据映射表将8.8.8.8:800再转换回10.10.10.10:1000
所以私网可以轻松访问公网,但公网访问私网的前提是建立好了端口映射规则
公网IP+DDNS
手动建立端口映射规则
在光猫处,可以设置为桥接模式,使得光猫只负责光电信号转换,不负责nat和拨号
在运营商处,我们没有操作权限,只能向运营商申请一个公网ip(不一定是固定的,重启后可能会变,但一定要是公网ip,而不是10.这种私网ip)
最后,手动设置路由器的端口转发
DDNS
公网IP:重启后可能跟会变,想要更好的访问需要DDNS
DNS:记录下域名和ip的对应关系,但无法动态更新
DDNS:额外引入一个服务器,路由器客户端有一个监控负责监控ip变化,变化后通知DDNS,DDNS通知DNS
需要购买DDNS服务(花生壳、ddns-go、路由器厂商、NAS),并在路由器配置DDNS
IPV6公网,很容易申请,缺点是难记,并且部分网络可能不支持IPV6
- 上面的方案是基于公网实现设备间访问,下面的通常都需要一个中转的服务器(公网)来搭桥
- 中转服务器和内网客户端保持连接,使得中转服务器可以找到内网服务
- 访问中转服务器就可以间接访问到内网服务
傻瓜式方案
如果有nas,可以用nas厂商提供的内网穿透,比如说群晖的qc,这种方案一般只支持转发nas自带的官方套件(威联通可以用自带的browser station实现另类的访问内网其他服务,极空间也在内测自定义端口内网穿透。据个人体验,群晖的内网穿透速度好像是最差的)。便宜又傻瓜的ddns to也是没有nas的良好选择,每七天一签到就可以无限免费续杯,哪怕付费,26元/年的价格也很便宜。蒲公英在无法打洞的情况下,也提供中转服务器,但价格有点贵,优点是稳定(同一家公司的花生壳,好像也有内网穿透功能)。
其实是虚拟局域网的一种
虚拟局域网
- 创建一个全球的虚拟局域网,适合需要多点直接连接的场景
- 想加入局域网的都需要安装客户端连接到服务器
蒲公英:
用起来很简单,打洞成功率不如后两者,但哪怕打洞失败,也有保底的服务器中转,缺点是免费套餐可用设备数量太少
zerotier:
- 各方面都不错,但会被部分地区的运营商限制,nas、电脑都需要安装客户端;
- Zerotier——免费的虚拟局域网 | 内网穿透 | 解决方案 - 简书 (jianshu.com) 群晖DSM7.x使用ZeroTier套件的简单办法 - 我不是矿神 (imnks.com)
- https://my.zerotier.com/
0.1mbps 太慢了
③tailscale:基于wg,和zerotier差不多,哪个好用用哪个
在自己有服务器的情况下,也可以自建其他方案
反向代理
- 上面的是建立多点直连,访问设备和被访问设备都需要安装并配置相应的客户端软件,例如访问面板下载文件
- 反向代理使用一个网络服务来接收来自外网的请求,然后将这些请求转发到内网中的服务器,并将服务器的响应返回给外网的客户。这样可以有效地隐藏服务器的真实IP地址。
- 暴露特定的内网应用port到互联网上,例如图床服务,相当于暴露给所有人;访问设备不需要安装客户端
frp
frp:知名的内网穿透方案,需要有一个拥有公网IP的服务端,可以自建,也可以用别人搭好的,比如说樱花frp。缺点是每次更改配置文件都需要重启,在我这里连接效果不如nps
FRP 的客户端(frpc)在内部网络中运行,与服务器(frps)之间建立连接,用于建立隧道。通过这些隧道,FRP 服务器将接收到的公网请求转发到内部网络中的服务。
CloudFare
如何利用Cloudflare实现低成本群辉NAS内网穿透【原创】
- 建立隧道:在内部网络中运行 Cloudflare Tunnel 的客户端(
cloudflared
),该客户端与 Cloudflare 的服务器建立一个安全的长连接。 - 配置转发:(配置域名 -> 内网ip:port)
- 请求转发:所有公网的请求首先到达 Cloudflare,Cloudflare 再通过已建立的安全隧道转发到内网服务。
ngrok
可以使用官方的免费服务器,暴露80端,然后服务器会分配一个域名就可以访问到内网80的服务
nps
nps:知名的内网穿透方案,需要有一个拥有公网IP的服务端,可以自建,也可以用别人搭好的。优点是有良好的web管理界面,每次添加穿透的隧道也不需要重启,在我这里的连接效果也比frp更好,官方仓库(https://github.com/ehang-io/nps)好久没更新了,推荐使用第三方分支库:https://github.com/yisier/nps,个人测试linux下效果比windows下更好,所以推荐部署在linux设备上
nat打洞
natmap,lucky(大吉),natter等,请自行前往github搜索,本方案的所有软件都需要自家网络的nat类型为全锥型(fullcone)