公网访问方案汇总:简介篇 - NASHomeLab外网访问指南

先上思维导图镇楼

常见公网访问方案汇总

写前叠甲

申明:

  • 本人表达观点仅字面含义,非引战,非水军,非反串,仅为个人感想无任何衍生含义内容不代表任何其他团体个人,无任何隐喻,暗示,反串,碰瓷,蹭热度等想法。本人家庭和睦安康、无任何心理或精神疾病,智力力正常水平。观点及言论仅代表我个人一点浅薄的看法,非专业学术内容仅为个人空间,部分内容仅为猜测不代表实际,与本人所在群体、父母亲朋、所在省市地区无关。
  • 如有不同观点欢迎礼貌讨论感谢指正,本言论不含有对任何群体的歧视,不含有任何挑起对立的含义。本人认知范围浅薄,无专业团队,内容偏个人想法,如有误会歧义欢迎指正。如有侵权请证明关联性作者会尽快处理。
  • 热爱地球文化文明,绝无任何反人类倾向,本人承诺未向三体发送过地球坐标,未向任何外星人、异次元文明、平行宇宙、其它宇宙、平行宇宙透露过地球信息,本人个人性别为男性,坚定支持男女平等,男女两字的排序不分前后,本人用词较为网络通用口语,绝无任何恶意,绝无任何将严肃话题娱乐话的意图。
  • 本人承诺热爱小动物,如把人比喻成狗仅通俗调侃,绝无任何践踏人类人格、尊严、人权等意图,绝无歧视动物的意图。本人素质为平均素质,发表言论不具备任何专业性,仅供参考。内容如有雷同纯属巧合。
  • 该申明来自网络改编非原创,原作者看到可以联系我删除
  • 这一句是原创:本文中提到的所有商家都没给我打钱,纯个人感觉评测(就你这小卡拉米人家知道你谁啊)

读者范围

本系列教程适用于家里有NAS/HomeLab/MC服务器/远程桌面等等一切存在外网访问需求的同学们

写这个系列的原因

  • 主要原因肯定是闲,要不是闲得,谁会来更新博客啊(bushi
  • 然后是发现其实很多朋友有这个需求然而在完成的过程中一头雾水…从什么是内网穿透,怎么公网访问,到IPV6是什么,防火墙是什么。
  • 感觉NAS用户越来越多,相关需求也在不断提升,而俺其实很久以前也写过几篇内网穿透(其实这个说法现在来看不太标准)有关的文章,所以脑子一抽,就有了这个系列。

image

方法简介

公网IP访问类

什么是公网IP?

既然要说公网IP访问类,那么什么是公网IP呢?

先用我浅薄的认识介绍一下。最简单直白的说法,公网IP就是在全球都能访问的IP地址,而内网IP则是只有在同一内网能够访问的IP。

举个简单的例子,我们家庭网络一般使用192.168.x.x这样的IP,在连上家庭网络(如WIFI什么的)时,我们的设备可以通过这些IP进行访问,但是当我们断掉WIFI,使用流量,或者走出家门使用外面的工作网络,酒店网络时,这个IP就无法被访问到了。对于一个公网IP,也举个例子CF的dns服务器1.1.1.1,它为全世界提供DNS服务,当然得全球可访问才行。

什么是IPV4,什么是IPV6?

IPV4是一种使用32位地址的互联网协议,至今是互联网的主流,但是其只有42亿个(去掉保留地址内网地址什么的更少),远远少于现在上网设备总量,而且地址分配严重不均。而我国互联网起步较晚,三大运营商分配到的IP其实都较为有限,另一方面,我国网民数量极大,所以根本不可能给每个家庭都分配公网IP。

image

为了缓解或解决IPV4地址不足的问题,各路大佬想了一大堆办法,这里仅仅介绍与我们有关的两种

  • 网络地址转换(英语:Network Address Translation,缩写:NAT),又称IP动态伪装(英语:IP Masquerade)[1]:176,是一种在IP数据包通过路由器防火墙时重写来源或目的IP地址端口的技术。这种技术普遍应用于有多台主机,但只通过一个公有IP地址访问互联网私有网络中。

    还是拿家庭网络举例。一个很常见的家庭网络拓扑,光猫拨号,DHCP了192.168.0.0/24网段,然后连接到路由器,路由器使用路由模式,下层设备在192.168.1.0/24网段。这个时候192.168.0.0/24相当于处于192.168.1.0/24的上层网段,而路由器作为两个网段的枢纽,它的Lan口连接.1.0网段的下游设备,它的Wan口会从光猫获取一个.0.0/24网段的IP,这时候,对于.0.0/24网段来说,它只用1个IP,就让下游一整个网段的设备连上了网。

  • 网际协议第6版(英语:Internet Protocol version 6,缩写:IPv6)是网际协议的最新版本,用作互联网的协议。用它来取代IPv4主要是为了解决IPv4地址枯竭问题,同时它也在其他方面对于IPv4有许多改进。

    IPV6作为新一代网络技术,它的地址多到我懒得说,你就知道它能给全世界每一粒沙子分配一个公网IP就行了,缺点是现在网络对V6支持不完善,很多公共场合的网络没有V6,很多网站也不提供V6访问

我有没有公网IP?

先看IPV4。

  1. 首先,登录你拨号的设备,路由器拨号就登录路由器,光猫拨号就登录光猫,查看WAN口IP
  2. 然后,打开这个链接。如果这里获得的IPV4地址和上面的WAN口一致,那么恭喜你拥有一个公网IP啦

至于IPV6,如果上面那个链接能显示V6地址,那就是公网了,不用担心V6还是私网的问题

如果没有,我该怎么获取公网IP

还是先说V4,现在随着IP资源的紧缩和运营商对PCDN打击力度的加大,想获取公网IP已经变成了一件越来越难的事情

  • 如果你是移动家庭宽带,那么放弃吧,由于起步的原因,移动的IP本来就少,根本不会分给家宽用户
  • 如果你是电联用户,可以尝试打电话给本地运营商,或者干脆就打给装维师傅,能办的就给你办了,或者说加10块钱什么的也相当划算
  • 最后,世界加钱可及。家宽不给,办条带公网的商宽不就完了,还是固定IP,可惜博主囊中羞涩…

如果没有V6,请先自查

  • 因为国家大力推广V6的原因,基本家宽都能分到V6前缀
  • 如果没有,请先检查你的所有设备,路由器是否开启V6(比较老的路由器不支持V6),终端设备是否开启…
  • 如果这些都确认过,那就还是找装维吧,有一定的可能,是光猫拨号然后光猫没开
  • 据我所知,的确有些地区的运营商机房就没给V6,如果你恰好不幸在这些地方,那就自认倒霉吧…​​

image

为什么有了公网,外网却无法访问

即使确定你有了公网IP,那也不意味着你马上就能通过公网地址访问家里的服务,原因可能有下面几个

  • 光猫/路由器有防火墙,光猫的可能得超管密码,建议闲鱼找个人买一下,路由器的话,小米是可以自己关闭的,TP-LINK可能需要找客服要一份没有防火墙的固件进行升级,其他路由器不熟
  • 如果你是公网V4,那么你还需要端口映射或者开启DMZ主机。上面简单介绍过NAT相关知识,家宽只分配了一个公网IP,那么显然下层这么多设备都是NAT到这个IP的。端口映射,就是将你某内网IP的内网端口,映射到公网IP的端口。DMZ就是将单独一个设备直接放在公网下。
  • 最后,即使你拥有公网IP,很有可能部分端口也是被屏蔽的。比如建站常用的80/443/8443/8080和远程桌面的3389等

接下来做啥

DDNS

先明确一点,家庭宽带,分配的公网IP,都是动态的,就是重新拨号或随机时间之后就会变化,这是很不方便我们使用的。所以,我们需要做一步DDNS。DDNS,就是将这个动态IP,绑定到一个静态的域名,之后我们就只要记这个静态的域名就完了。在DDNS这一步,推荐的工具为DDNS-GO或Lucky

反向代理

接下来,如果不想通过域名:端口这种方式访问服务,而是懒得记端口,那么你需要的是反代–反向代理

这里引用别人的文章稍微解释一下

  • 正向代理是一种位于客户端和服务器之间的代理服务器。客户端将请求发送给正向代理,然后由代理服务器将请求转发给目标服务器。服务器将响应返回给代理服务器,再由代理服务器将响应转发给客户端。正向代理对客户端是透明的,客户端无需知道实际服务器的地址。

image

  • 反向代理是一种位于服务器和客户端之间的代理服务器。客户端将请求发送给反向代理,然后由代理服务器根据一定的规则将请求转发给后端服务器。后端服务器将响应返回给代理服务器,再由代理服务器将响应转发给客户端。反向代理对客户端是透明的,客户端无需知道实际服务器的地址,只需将反向代理当作目标服务器一样发送请求就可以了。

image

如果要做反向代理,推荐工具为NPM,Lucky,如果你有相关知识,也可以使用Caddy或者手搓Nginx

可选项-套CF

请注意,V6只能访问V6网络,V4只能访问V4,如果你家里只有V6,但由于特殊原因(比如工作网络只有V4)想要实现双栈网络,那么最简单的方法就是套CF,将域名托管在Cloudflare做DDNS,但是请注意,CF只支持部分非标准端口,所以这个方案后来被我用Cloudflared取代了,如果有兴趣,可以参考我的文章这个这个

内网穿透类

虽然有人把本文介绍的所有方法都称为内网穿透,但是个人觉得至少把公网IP访问类丢尽内网穿透是绝对不合适的。内网穿透在百度百科上的介绍如下:内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。而公网IP访问类,本来就不会被NAT设备屏蔽,当然也不符合这个说法(还是那句话,你杠就是你对)

在这个篇章,我会介绍一些常见的内网穿透方案,另外简单说一嘴,既然要连接中转服务器,那么速度就和服务端-中转服务器-客户端的速度有关了

自建或白嫖中转服务器类

最传统的方案

  • FRP,使用率极高,功能相当丰富,可以穿透TCP,HTTP,HTTPS多种隧道,可以打洞,支持KCP。那些樱花FRP,OPENFRP(不知道还活没活着)的商业化站点采用的都是FRP,一般签到可以领取免费流量,可以白嫖。缺点就是只能配置文件穿透,可视化面板只能查看情况不能进行修改
  • NPS,协议支持也不少,可以说应有尽有。性能对比比FRP略低,功能略少,但是可视化面板极为强大,适合小白上手使用
  • ngrok,后来我才知道这玩意是一个开发者常用的工具。不过我提一嘴的原因仅仅是因为我记得国内有提供免费公共服务器的,但是说实话限速128k,聊胜于无吧

CloudFlared

我自个最后采用的方案,先有大善人后有天,大善人YYDS

说白了就是Cloudflare提供的免费隧道,只要你有个域名托管在CF就能免费用,不用DDNS,不用自己配置反代,不用中转服务器,甚至自动帮你配置了SSL证书,无限流量,缺点就是国内访问速度差强人意,但我觉得完全瑕不掩瑜,看个人吧

向日葵

image

或者这里应该说花生壳更合适?贝锐家推出的内网穿透服务,我反正用不起,不多做评价

节点小宝

image

很多博主吹的一个商家,体验不清楚,单单有偷跑流量的曝光就能被我拉进黑名单

DDNSTO

image

当初第一次建还以为和ddns有啥关系,其实就是一个内网穿透的商家。相比上面那俩,这个我刚入坑还真用过一段时间,免费版本感觉还行,带宽小了点,延迟不错

组网类

其实完整名称应该叫虚拟局域网类,相比前面的内网穿透类,它能实现的功能更加丰富。它能将在外面的手机和家里的设备建立一个新的虚拟局域网,然后访问操作什么的,就使用这个虚拟局域网的IP就完了。也就是说,它直接就是全端口穿透的,如果通过合适的路由,甚至能将两个相隔很远的局域网组成一个新的虚拟局域网。

总结一下功能特点有下面这些

  • 全端口穿透
  • 拓展性极大
  • 在可以客户端打洞的情况下优先通过打洞P2P直连,此时客户端和服务端直连,速度快
  • 无法打洞的情况下,流量通过中转服务器,速度与中转服务器相关

Zerotier

image

  • 最老牌的组网类工具
  • 可以使用国内VPS自建planet或moon节点提高使用体验
  • 官方中转服务器个人感觉速度一般

Tailscale

image

  • 使用Wireguard作为内核,相对轻量和高性能
  • 可以使用国内VPS自建Derper提高使用体验
  • 官方中转服务器个人感觉比Zerotier略好(也有收到相反的反馈,看地区吧)

Headscale

image

  • 相当于Tailscale的开源版本
  • 全流程自主可控,配合自建Derper效果相对不错

蒲公英组网

image

  • 同贝锐家的(就是花生壳向日葵那家)
  • 同样贼贵,买不起仅提一嘴

打洞类

打洞又叫NAT打洞,在上面的组网类和FRP处已经提高过,你让我解释我也说不明白,简单介绍一下需要的环境和效果吧

  • 本地必须NAT1类型(全锥形),不知道自己网络NAT类型的可以通过NatTypeTester来进行测试
  • 最后达到的效果是可以通过本地的IP访问,即假如运营商给你分配了个8.8.8.8,但是不是公网IP,通过打洞,你最后还是可以通过这个IP进行外网访问,好处就是和原生公网IP的速度,非常快
  • 缺点就是外部端口是随机的,在有公网IP的情形,我们通过端口映射决定内网端口和外网端口的对应关系,而在打洞中,外部端口不可确定,或者说不可长期确定,会发生变化
  • 虽然可以通过CF重定向实现域名和服务的对应关系,但是吧…你都走CF重定向了,能快到哪去,也是相当鸡肋了
  • 所以最后建议的使用场景只有BT下载时打洞可以提高连接性和MC服务器可以提高SRV域名记录实现端口跟随(这个词是我自己造的)
  • 推荐的工具是Natter或者Lucky(没错又是它)

最后

如果你能看到这里,那我真是太感动了…

本文只是对内网穿透相关知识的一个汇总介绍,至于具体实现,尽情期待吧嘿嘿嘿(鸽!)

参考文献

  1. 网络地址转换
  2. 图文总结:正向代理与反向代理
  3. 内网穿透的百度百科
  4. IPV6监控发展平台
  5. 未标明的图片均来自相应官网