本文内容是根据作者自身的设备以及经验写的,所以覆盖面以及深度可能严重不足,仅供参考!
1、实现方案
想要在外部访问家里的设备/服务,要么用公网ip,要么就得内网穿透。
1.1、公网ip
公网IP(Public IP)是指可以在互联网中直接访问的IP地址。它是由互联网服务提供商(ISP)分配给用户的,用于在全球互联网上标识和定位网络设备。
一般运营商分配给用户的都是内网ip(ipv4),因为ipv4是有限的,公网ip可以拿来给企业做企业宽带提供固定ip。
家庭宽带即使是公网ip也都是动态ip,也就是ip地址会变化。所以需要配合域名和DDNS(动态域名解析)使用。
随着ipv6的普及,现在大多数家庭网络都已经支持ipv6,而且获取到的ipv6的ip也是公网ip(ipv6数量庞大),并且每个设备都可以获取到一个v6公网!
公网ipv4目前已经极难获取(少部分地区仍可以获取,可以打运营商的客服尝试下)。
而公网ipv6,大多数的家庭网络已经普及,但是可能默认是关闭的,需要手动打开。
开启方式:参考文档(注意:此教程中的关闭防火墙的步骤不建议操作,建议开启特定端口作为入口)
优点:
1、访问速度快,因为是直连,不经过中转,直接利用的宽带的上传带宽。
2、成本较低,不需要额外购买服务器。只需要买个域名即可。
3、配置和使用简单,只需要配置家里的设备,在外部即可访问。
缺点:
1、因为ip地址会变,所以需要配合域名使用。
2、公网v6需要访问的设备和网络都支持ipv6才可以访问。一般公司或一些公共场所的wifi都是没有ipv6的,手机流量和大多数的家庭网络可以正常访问。
3、由于运营商禁用了80、443、22等常用的协议端口,所以如果访问一些网页等 服务需要配置其他端口,访问的时候需要带端口访问,看起来会丑一些。
1.2、内网穿透
内网穿透又大致分为以下三种:
1.2.1、frp端口映射
由于需要使用云服务器,这里只做简单的介绍和总结,详细使用教程就不写了,网上教程很多,可以详细了解。
frp需要有一台公网的服务器,用作中转,将服务器的ip+端口映射到家庭设备的ip+端口。
优点:
1、操作相对简单,不需要家庭设备和访问设备做太多配置,主要配置云服务器。
2、连通性好,因为云服务器(国内)的静态v4公网的连通性是很好的,基本不会有因为网络环境导致的连不上或访问慢的问题。
3、无端口封禁,可以将服务器的80、443等端口映射到家庭设备的非标端口上,实现使用标准端口访问家庭服务。
缺点:
1、速度慢,由于经过了中转设备,所以访问速度受到中转设备的带宽影响,云服务器的带宽昂贵,一般购买不会太高带宽。
2、成本较高,即使相对便宜的云服务器,一年也得小100了。
3、需要一定的linux操作,否则配置起来会比较容易遇到问题。
1.2.2、异地组网
基本工作原理是组建一个虚拟局域网,各个设备安装了客户端、加入到这个虚拟局域网后,就会自动分配一个IP,从而实现局域网内各个设备及服务的相互访问。
而虚拟局域网通过公网上的服务商管理,用于获取各个设备的信息,各个设备直接连接,不通过服务商中转(大多数情况)
下图只是草图,任何异地访问都是需要经过公网的,这里省略了
优点:
1、操作简单,只需要双方安装客户端即可。
2、速度快,因为是直连,不经过中转,直接利用的宽带的上传带宽。
3、联通性大多数情况下很好,只有双方网络环境连通性都很差的情况才会出现问题。
4、访问方便,直接使用自定义的静态的ip地址访问。
5、成本低,无需购买域名,而且一般的组网服务商都对普通用户免费(如ZeroTier)
缺点:
1、只有安装了客户端并且加入组网才可访问,无法面向所有公网用户。
2、ZeroTier免费用户有客户端和网络数量的限制(25个设备,3个网络),超出则收费。不过对于家庭用户来说,肯定是够用了。
1.2.3、打洞
STUN简介
Simple Traversal of UDP over NATs, NAT的UDP的简单穿越,是一种网络协议。是客户机-服务器的一种协议,由RFC 3489 定义。该协议定义了一些消息格式,大体上分为Request/Response。这个协议主要作用就是可以用来在两个处于NAT路由器之后的主机之间建立UDP通信。它允许位于NAT后的客户端找出自己的公网地址,确定自己位于的NAT是哪种类型,以及NAT为这个客户端的本地端口所绑定的对外端口。引用
由于我没有使用过打洞的方式,所以不过多介绍了。使用方式可以参考lucky的文档
2、操作步骤
2.1、公网ip
2.1.1、获取v4 或 开启v6(参考文档)
获取公网ip的步骤就不赘述了,可参考上方文档或自行寻找教程。
2.1.2、配置防火墙(关闭光猫防火墙,使用路由器管理防火墙)
由于公网ip直接开放在公网上,所以不建议关闭防火墙(强烈不建议)。否则就是裸奔!可以关闭光猫防火墙(不方便管理),保留路由器防火墙。
建议:开放一个端口作为所有服务的入口。
如果路由器没有图形化的防火墙配置,或只能全开全关,建议搜索一下:设备品牌+防火墙配置。
如果找不到教程建议更换路由器。
本文以 ImmortalWrt 为例,其它系统可自行搜索。
1、关闭光猫防火墙
2、进入防火墙配置菜单-流量规则
3、添加一条规则
编辑规则
然后点击底部的 保存&应用 即可。
4、测试
可以开通一个内网有服务的端口,然后用手机流量开热点给电脑,然后用 telnet测试。
注意:80、443、22、21、25、3389等端口大概率会被禁用,也就是在运营商那边就拦截了,家里开放没有用。
#ipv4测试 【4433】 更换成自己要测试的端口
telnet v4ip地址 4433
#ipv6测试
telnet -6 v6ip地址 4433
2.1.3、购买域名并配置解析
域名服务商可以选择阿里云、百度云,或者海外的服务商都可以,哪个便宜买哪个。
注意:国内服务商需要实名备案,麻烦倒是不算麻烦,填完信息也很好过,但是注意不要搭建涉嫌违规的服务,否则可能上门。
以阿里云为例,.top的域名首年12,一次买10年的话,也就是188。还是很便宜的。
购买教程:参考文档
配置解析(以阿里云为例):
1、进入阿里云控制台的域名菜单
2、进入解析配置
3、添加记录
记录类型
ipv6选择AAAA
ipv4选择A
主机记录
也就是二级域名,比如www、test,访问就是www.yuming.top/test.yuming.top
填*就是泛解析,表示满足格式 *.yuming.top 的所有域名都会解析到你指定的地址。如果你的大多数服务都在同一个设备上,建议给这台设备的ip配置泛域名即可,这样所有的二级域名默认解析到这台设备,再在这台设备上根据二级域名做转发即可。
PS:即使不同服务分散在多台设备,也建议配置一个入口,由这个入口进行转发即可。
请求来源和TTL
无特殊需求无需改动
记录值
填你设备的公网ip,虽然IP会变,但是先填上就行了,后面的DDNS配置可以配置变动自动更新。
配置完成后,可以检测下
如下,解析结果是你配置的IP,就是成功了,然后可以试下 域名+端口访问下你的服务,看看是否成功(注意前面的防火墙配置,是否开放了此端口)。
比如www.yuming.top:8080
为什么要加端口?不加端口的话,会使用默认端口,http默认80,https默认443,而这些端口是被运营商禁用的,所以需要指定端口。
2.1.4、配置转发服务和证书
你可以通过不同的端口访问这台设备的不同服务,比如8080访问web服务,8096访问媒体服务。
但是需要防火墙开放这些端口,不建议这么做。建议开放一个特定的端口用于https端口,比如4433,作为统一入口,所有的服务通过二级域名区分,比如:
web服务通过web.yuming.top:4433访问
媒体服务通过emby.yuming.top:4433访问
目的:
1、统一入口,方便访问。
2、减少入口,避免潜在的安全隐患(否则一些常用的端口可能会被扫描并尝试爆破,尽管ipv6被扫的概率很低,但并不为0,我就被扫到过)。
3、一个入口,就只需要在这个入口配置https的证书即可,否则需要每台设备单独处理。
所以就需要配置转发服务,这里使用lucky作为演示:github、官方文档
lucky可以简单理解为一个nginx的图形操作工具+证书生成工具以及一些扩展工具,使用很简单,不需要太多基础知识。
Lucky简单使用和证书配置可以参考我这篇文章:Lucky使用教程(基础版)
2.1.5、配置DDNS
参考我的这篇文章:DDNS:动态域名解析
2.2、异地组网
参考我的这篇文章:ZeroTier:简单实现内网穿透、异地组网
评论区