内网穿透技术

基础

网络传输需要知道目的ip地址,并附带上源ip地址使得数据包可以返回

基本知识:全球的ipv4的数量是有限的,在局域网内并没有一个公网ip,而是局域网的私网IP。在网络到达路由器时,路由器通过NAT分配一个公网ip从而实现网路的传输。

  • NAT 是一种网络技术,用于在私有网络和公共网络之间转换IP地址。它允许多个设备共享一个公共IP地址,是解决IPv4地址耗尽问题的一种方法。网络层
  • NAPT 是NAT的一种扩展,它不仅转换IP地址,还包括端口号的转换。这允许多个设备不仅共享同一个公共IP地址,还可以通过不同的端口标识,实现更加高效的地址和端口的映射。传输层

假设家用路由器的公网IP为 12.0.2.1,内网设备分别为 192.168.1.100192.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

image-20240422102615340

image-20240422010212314

同时路由器记录下一个ip端口映射表,根据映射表将8.8.8.8:800再转换回10.10.10.10:1000

image-20240422010639177

所以私网可以轻松访问公网,但公网访问私网的前提是建立好了端口映射规则

公网IP+DDNS

手动建立端口映射规则

image-20240422011135737

  • 在光猫处,可以设置为桥接模式,使得光猫只负责光电信号转换,不负责nat和拨号

  • 在运营商处,我们没有操作权限,只能向运营商申请一个公网ip(不一定是固定的,重启后可能会变,但一定要是公网ip,而不是10.这种私网ip)

  • 最后,手动设置路由器的端口转发

    image-20240422011754041

    image-20240422012853045

DDNS

公网IP:重启后可能跟会变,想要更好的访问需要DDNS

DNS:记录下域名和ip的对应关系,但无法动态更新

DDNS:额外引入一个服务器,路由器客户端有一个监控负责监控ip变化,变化后通知DDNS,DDNS通知DNS

image-20240422012322564

需要购买DDNS服务(花生壳、ddns-go、路由器厂商、NAS),并在路由器配置DDNS

image-20240422012630536

IPV6公网,很容易申请,缺点是难记,并且部分网络可能不支持IPV6

  • 上面的方案是基于公网实现设备间访问,下面的通常都需要一个中转的服务器(公网)来搭桥
  • 中转服务器和内网客户端保持连接,使得中转服务器可以找到内网服务
  • 访问中转服务器就可以间接访问到内网服务

傻瓜式方案

如果有nas,可以用nas厂商提供的内网穿透,比如说群晖的qc,这种方案一般只支持转发nas自带的官方套件(威联通可以用自带的browser station实现另类的访问内网其他服务,极空间也在内测自定义端口内网穿透。据个人体验,群晖的内网穿透速度好像是最差的)。便宜又傻瓜的ddns to也是没有nas的良好选择,每七天一签到就可以无限免费续杯,哪怕付费,26元/年的价格也很便宜。蒲公英在无法打洞的情况下,也提供中转服务器,但价格有点贵,优点是稳定(同一家公司的花生壳,好像也有内网穿透功能)。

其实是虚拟局域网的一种

虚拟局域网

  • 创建一个全球的虚拟局域网,适合需要多点直接连接的场景
  • 想加入局域网的都需要安装客户端连接到服务器

蒲公英

用起来很简单,打洞成功率不如后两者,但哪怕打洞失败,也有保底的服务器中转,缺点是免费套餐可用设备数量太少

内网穿透 异地组网 端口映射 蒲公英x1

image-20240422164122349

zerotier

image-20240422105218332

image-20240422164157388

0.1mbps 太慢了

③tailscale:基于wg,和zerotier差不多,哪个好用用哪个

在自己有服务器的情况下,也可以自建其他方案

反向代理

  • 上面的是建立多点直连,访问设备被访问设备都需要安装并配置相应的客户端软件,例如访问面板下载文件
  • 反向代理使用一个网络服务来接收来自外网的请求,然后将这些请求转发到内网中的服务器,并将服务器的响应返回给外网的客户。这样可以有效地隐藏服务器的真实IP地址。
  • 暴露特定的内网应用port到互联网上,例如图床服务,相当于暴露给所有人;访问设备不需要安装客户端

frp

frp:知名的内网穿透方案,需要有一个拥有公网IP的服务端,可以自建,也可以用别人搭好的,比如说樱花frp。缺点是每次更改配置文件都需要重启,在我这里连接效果不如nps

FRP 的客户端(frpc)在内部网络中运行,与服务器(frps)之间建立连接,用于建立隧道。通过这些隧道,FRP 服务器将接收到的公网请求转发到内部网络中的服务。

image-20240422160813814

CloudFare

如何利用Cloudflare实现低成本群辉NAS内网穿透【原创】

  • 建立隧道:在内部网络中运行 Cloudflare Tunnel 的客户端(cloudflared),该客户端与 Cloudflare 的服务器建立一个安全的长连接。
  • 配置转发:(配置域名 -> 内网ip:port)
  • 请求转发:所有公网的请求首先到达 Cloudflare,Cloudflare 再通过已建立的安全隧道转发到内网服务。

ngrok

可以使用官方的免费服务器,暴露80端,然后服务器会分配一个域名就可以访问到内网80的服务

image-20240422165051957

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)

参考