一、前言
在上一次教程中,我们教了大家如何搭建一个网站并且在内网中能被访问到。这样也出现了一个问题,我们的网站被我们部署得再好看,始终只有内网中的设备可以访问。如果别人和我们不在一个局域网中,就无法访问我们搭建的网站了。还有就是域名,我们的域名是通过修改hosts文件来实现的。这种实现方式只有在hosts文件中让域名指向IP地址以后才会生效。所以,就算别人和我们在局域网中,但是他的hosts文件没有修改,这样使用域名也是无法访问到我们的网站的。显然,在局域网中搭建的网站限制太多了。那我们怎么样才能让我们的网站像正常网站那样被外部访问呢,这就是我们本篇文章的重点。
二、网络的基础知识
对于网络的基础知识,在以前的一篇文章中已经讲到过,大家可以自行查阅:
网络基础知识:[网络]从零开始的计算机网络基础知识讲解-CSDN博客
大家可以查阅上面的文章了解详细的网络知识,也可以继续看这篇文章,我会在下面为大家介绍一些本次文章中会用到的一些网络概念。那么现在,就让我们开始吧!
当用户在浏览器中输入一个域名(例如 www.example.com
)并按下回车时,浏览器首先需要将这个域名转换为IP地址。为了将域名转换为IP地址,中间需要进行DNS解析,这个过程虽然说起来非常简单,但是在实际的网络环境中是非常复杂的,中途会涉及到多次数据的转发以及多个设备之间的交互。好在现在已经有网络工程师为我们做好了这一切,让这些繁琐的步骤变得简单。
所以,总结上面的话来说,要我们的网站在网络中被找到,首先,我们需要让我们的网站具有一个能被所有人访问到的公网IP,具有了公网IP以后,再使用域名指向这个IP,这就实现了一个网站完整的功能。当然,如果你不知道什么是公网IP,或者没有公网IP与内网IP的概念,建议先看上面的网络基础知识的文章。
既然我们需要公网IP,那我们怎样才能拥有公网IP呢。目前拥有公网IP的的办法无非就那么几种,要么运营商本来就为你分配了公网IP,当然,这种情况已经很少见了,可以说几乎不可能。要么就是找运营商申请公网IP,对于这种办法在有一些运营商能行得通。如果你购买了云服务器,云服务商可以为你分配一个公网IP。最后一种办法就是在运营商那儿购买公网IP,这种方法的价格太高了,普通人应该也无法接受。
可以看到,我们说了上面获取公网IP的办法可能都有些困难,或者是要用极高的成本来获取公网IP。于是,现在就出现了一种新的办法,它也能让我们的网站拥有一个公网IP,并且能够被正常访问。那就是我们的内网穿透技术。它通过让很多用户共用一个公网IP地址,为每一个用户都分配一定的带宽,将成本平摊到每一位用户身上,这样大家都可以低价的使用内网穿透服务,大家都有公网IP用。当然,使用内网穿透获取到的公网IP可能会有一些限制,但是单从搭建网站来说是完全没问题的。
内网穿透本质是一种反向代理技术,它将内网穿透服务器作为反向代理服务器,使用内网穿透时,你需要将自己的域名指向内网穿透服务商为你分配的域名。当用户访问你的域名时,DNS首先会解析到内网穿透服务商为你分配的域名,当你拿到这个域名以后,再进行解析,就能解析到内网穿透服务商的服务器的IP地址,这里的内网穿透服务商的服务器也就是反向代理服务器,它决定了将访问的流量分发到哪一台服务器。因为我们提前与内网穿透服务器建立了连接,内网穿透服务器会将流量分发到我们运行了内网穿透服务的计算机,最后,我们的计算机产生响应,就完成了一次完整的访问。
以上是一些网络的基础知识,我不是专业的网络工程师,如果有错误的地方,还请大家指出。当我们具有了上面的知识以后,我们就可以开始实操了。下面,我会在windows和linux中为大家演示内网穿透。
三、内网穿透的部署
我们要使用内网穿透,我们必须要选择一个内网穿透服务商,这里我选择选择的是"樱花FRP",樱花FRP在低价的同时,还提供了部分免费节点。下面我也会使用樱花FRP进行演示。大家也可以根据自己的情况选择不同的内网穿透服务商。下面我们分情况讨论:
1.windows中部署内网穿透
在上一篇的网站教程中,我们教了大家怎么在windows中安装宝塔面板并且搭建一个能被内网访问的网站,如果你还不会搭建一个网站,可以看下面的教程:
网站搭建教程:[Linux]从零开始的网站搭建教程_linux搭建首页-CSDN博客
下面我来使用windows的宝塔面板搭建一个简单的网站,首先启动宝塔面板并且登录:
我们来创建一个网站,点击添加站点:
这里要我们输入域名,大家可以自己注册一个域名,并且自行备案,这个域名在未来很多地方都会用到,注册域名大家可以考虑使用阿里云或者腾讯云这些大厂来代注册,下面演示一下阿里云,我们进入阿里云的主页,登录以后,我们在搜索框中直接搜索域名:
这里我们选择域名注册服务:
大家可以在输入框中输入自己想要的域名:
有很多短并且有特殊含义的域名已经被注册过了,大家选择没有被注册过的后缀进行注册即可:
域名注册完成以后,我们还需要进行ICP备案,尽管使用内网穿透,仍然需要备案,没有备案的域名是不允许被穿透到公网的。
当大家注册好域名并且已经完成备案以后,就可以进行下一步了。这里我注册的域名为"clxm.xyz"并且已经备案。后面我也会使用这个域名进行演示,大家在实际操作过程中,将我的域名替换为自己的域名即可。
在创建网站输入域名时,我们输入我们注册的域名,这里因为后面要使用HTTP协议,所以不用加端口号,也不能加端口号:
在输入完域名以后,我们点击"提交":
这里已经提示我们站点创建成功了,还提示我们需要本地测试的话,需要用管理员运行下面的命令添加hosts记录,当然,大家也可以自己修改hosts文件:
这里并不推荐大家使用命令来写入hosts文件,我在测试时出现了文字乱码,所以,推荐大家直接打开hosts文件进行修改,我这里直接使用vs code来修改我的hosts文件:
这里使我的域名直接指向本地地址。
我们现在在浏览器中,直接输入我们的域名,可以看到我们本地测试站点已经成功了:
下面我们就可以使用内网穿透将我们的网站映射出去了,只有当这一步做完以后,才表示我们的网站已经搭建好了。这一步完成以后才能进行下一步。
上面验证网站能被访问以后,我们就可以开始使用FRP进行内网穿透了。
下面我们前往樱花FRP的官网,我们直接在浏览器中搜索"樱花FRP":
这里的第一个网站就是樱花FRP的官网了,我们点击进入,大家也可以点击下面的链接前往樱花FRP的官网:
樱花FRP官网:Sakura Frp | 樱花内网穿透 --- 免费内网穿透_免费端口映射_高速_高防节点_不限流量_Minecraft我的世界_微信开发调试_群辉NAS_无需公网_免备案 (natfrp.com)
进来以后,就能看到如下界面了:
如果大家没有樱花FRP账号我们可以点击"注册账号":
大家注册好账号以后将其保存好,以后配置樱花FRP都会使用这个账号。随后我们点击"管理面板":
随后会跳转到登录页面,这里大家输入自己刚才注册的账号登录即可:
登录完成以后,就来到下面这个界面了,这个界面就是我们樱花FRP的控制台了:
这里显示了我们的可用流量,这里的流量是我们内网穿透的可用流量,
在樱花FRP中,我们注册或者每日签到都会送我们一部分的流量,所以大家不用担心流量不够用的问题。我们现在需要下载一个樱花FRP的软件,这个软件是用于与樱花FRP的服务器建立连接使用。而樱花FRP的网站控制台用于创建连接节点。接下来,我们先安装樱花FRP的windows软件。
我们鼠标点击樱花FRP网站中的"服务":
再点击"软件下载":
这里我们是为windows安装,所以这里我们选择windows启动器:
我们这里点击"下载":
浏览器应该就会开始下载了:
我们将其保存到一个能找到的地方:
我们双击这个exe程序启动樱花FRP的安装引导程序:
这里选择"我同意此协议",随后点击"下一步":
这里我们保存默认的配置,点击下一步即可:
这里创建桌面快捷方式大家自己根据自己的情况选择即可,随后点击下一步:
这里我们点击"安装":
等待安装完成:
在安装完成以后,我们的桌面上应该就有樱花FRP的图标了:
让我们启动软件,就能看到一下的界面了:
这里我们先不急操作软件,我们先到网页的控制台中创建一个节点:
这里我们点击"服务":
在服务的下拉菜单中点击"隧道列表":
我们可以看到,现在这里还没有隧道:
下面我们点击"立即创建":
随后这里会让我们选择节点:
这里的节点中,标注了建站的节点表示可以这个节点来映射我们的网站。
这里我随意选择一个可建站节点:
我们这里,因为是建站,所以直接选择HTTP协议:
随后就来到了下面这个界面:
值得注意的是,这里使用的HTTP协议会涉及到域名,所以,请确保自己的域名已经备案。域名备案以后,我们按照樱花FRP的验证备案信息步骤对自己的域名进行验证,只有验证过的域名这里才能创建隧道。
这里我们来填写穿透的相关信息:
这里的隧道名就是我们隧道的一个命名,大家根据自己的情况按照要求命名即可,下面的本地IP表示我们要映射的计算机的IP,这里因为网站就在我们的这台计算机上,所以这里我们直接选择127.0.0.1.端口号的话,因为使用的是HTTP协议,所以这里我们只能选择80端口。下面可以绑定我们的域名,这里我们直接输入自己注册的域名即可,这里输入的域名一定是已经备案过并且已经通过了樱花FRP的验证。
在填写完上面的信息以后点击"创建":
大家可以看到,我们的"隧道列表"中已经有一个我们刚才创建的隧道了:
在我们的隧道创建成功以后,我们就可以去安装的软件中启动隧道,隧道启动以后,我们的网站应该就被映射出去了,现在我们要登录软件,首先我们就需要使用到樱花FRP提供的密钥,我们点击首页:
再点击复制访问密钥:
复制以后,网站会提示我们"复制成功":
下面我们回到软件中,我们填入密钥,谭厚点击"登录":
登录成功以后,我们就能在"隧道"项中看到我们刚才创建的隧道了:
我们点击"按钮"启动隧道:
当我们的隧道启动以后,我们就可以点击"日志"了:
我们可以看到在日志中,已经告诉我们隧道已经启动成功,我们需要为我们的域名添加CNAME记录,并且记录值为"frp-fun.top"。
我们来到我们注册域名的控制台中,因为我的域名是使用阿里云注册的,所以使用阿里云进行演示,其它厂家的控制台也大同小异,在控制台中我们点击"域名"的控制台:
这里再点击"全部域名":
这里我们点击"添加记录":
记录类型这里我们选择CNAME:
主机记录这里直接选择@,因为我们这里使用的是一级域名,所以直接写@,如果想解析二级域名直接在这里写自己的二级域名的前半部分即可。如果这里使用了二级域名,在樱花FRP中也要输入二级域名。这是一点要注意的,如果你不理解什么是二级域名,直接使用一级域名并且输入@即可。
解析请求来源默认即可:
记录值就填写一开始在樱花FRP的日志中给我们的:
填写完以后,点击"确定":
这样我们的一条解析记录就被添加好了:
我们在添加了解析记录以后可能需要等待十分钟解析记录才会生效。
在添加完解析记录并且等待片刻后,我们就可以将我们的hosts文件中添加的记录删掉然后再访问我们的网站,注意,这里一定要将我们原本写在hosts文件中的记录删掉,不然那个记录生效就不知道我们域名的解析是否生效了,让我们访问我们的网站:
大家可以看到,我们的网站已经能够被访问到了。这样以来,我们的网站已经成功的使用樱花FRP映射到了公网中。
如果我们使用别的设备或者是我们的手机都是可以直接访问到了,至此,大家就可以尽情装饰自己的网站了,因为它已经可以被所有人看到了。
2.linux中部署内网穿透
在Linux中,我们要将我们的网站映射到公网中同样需要先使用宝塔面板部署好一个网站,我们首先进入Linux的宝塔面板主页:
随后,我们创建一个自己的网站,这里的域名可以参考上面windows教程中的填写方式,这里我直接填写我注册的域名,域名的注册方法也可以在上面的教程中找到所以这里就不多说了:
填写完以后,我们点击"确定":
点击确定以后,就能看到,我们的网站已经添加成功了:
因为是在LInux中,所以,如果我们想要在windows的主机中查看站点,我们需要修改hosts文件。这里我们搭建好了一个站点首先要去预览它,不然不能确定这个站点是否真的搭建好了。我们修改windows中的hosts文件,让我们的域名指向LInux主机的IP地址:
在修改完hosts文件以后,我们在浏览器中访问这个这个域名:
可以看到,我们的站点已经能够被我们通过域名访问了。大家要注意的是,这里必须完成这一步以后才能进行下面的步骤。
既然我们的网站已经搭建好了,我们就要使用樱花FRP将其映射到公网中。
下面我们进入樱花FRP的官网,这里大家自行注册登录即可:
随后点击"服务":
在"服务"的下拉菜单中点击"软件下载":
因为我们这里要给Linux安装,所以这里选择Linux:
樱花FRP的制作团队编译了非常多的Linux版本的软件,适用于各种架构:
我这里因为就只是单纯的Linux虚拟机,所以直接选择"amd64"版本的:
这里我们点击复制链接,我们将樱花FRP的下载链接复制到Linux的终端中去下载:
我们打开Linux的终端,使用"wget"命令拉取樱花FRP:
拉取结束以后,得到以下压缩包:
我们现在要将其解压,这里解压会解压楚两个散开的文件,所以,我们最好将压缩包放到一个文件夹中去解压,就像这样:
我们使用下面的解压命令来解压这个压缩包:
tar -I zstd -xvf natfrp-service_linux_amd64.tar.zst
这里的包名大家根据自己的包名就像修改。
解压以后得到以下文件:
下面我们为这个文件添加可执行权限:
然后我们可以尝试启动一下这个可执行文件,在当前目录使用下面的命令:
./frpc
这里出现让我们输入访问密钥,就说明樱花FRP运行是正常的,大家可以先使用"CTRL+C"结束程序:
如果这里被提示软件启动失败,或者收到下面这样的提示:
极有可能是在选择软件架构时选错了,这里需要大家确定自己设备的架构并且重新下载解压相对应的软件。当软件测试成功以后,我们就可以回到樱花FRP的官网了:
这里我们软件能够运行以后,我们需要在樱花FRP的网页控制台中创建一个隧道来穿透内网。
我们同样的点击"服务",在"服务"的下拉菜单中选择"隧道列表":
正常来说,我们这里是没有隧道的:
我们点击"立即创建":
大家可以看到,这里有非常多的节点供我们选择:
因为我们这里是搭建网站,所以,我们在节点选择这里要选择标注了可建站的节点,这里我们随便选择一个可建站的节点:
选择了节点以后,就来到了下面这个界面:
因为我们这里是搭建网站,所以选择HTTP隧道:
随后就来到了下面这个界面:
这里值得注意的是,我们使用了HTTP隧道,就意味着我们要使用域名,樱花FRP要求用于内网穿透的域名必须进行备案并且通过樱花FRP的认证。大家可以跟着樱花FRP的域名验证步骤进行验证,这里只有通过了验证的域名才能创建隧道。
我们将基本信息填入:
这里的隧道名就是一个隧道的标识,大家自己确定即可,本地IP是指我们要对哪一台设备进行内网穿透,因为我们的网站就搭建在本地,所以这里就输入127.0.0.1,因为走的是HTTP协议,所以固定80端口,下方的绑定域名大家输入自己的域名即可,注意这里的域名一定要满足我上面的要求。
在填写完基本信息以后,点击"创建":
大家可以看到,这里我们的隧道已经创建成功了:
我们回到"首页"中,复制我们的密钥:
复制完密钥,我们再次回到Linux的终端中,先启动软件:
我们将密钥复制进去:
随后点击"登录":
登录进来以后,就能看到我们刚创建的节点了:
按下回车能够选中节点,节点的颜色会发生变化:
选择完以后,我们点击最下面的继续:
这里可以看到,我们的隧道已经启动成功了,这里需要为我们的域名添加CNAME记录,为域名添加CNAME记录在windows部署内网穿透的教程中已经讲解过了,如果你还不会添加域名解析记录,请查看windows中的解析教程,下面的步骤默认大家已经完成了域名解析,解析的这一步是必须的。
下面,我们删掉一开始写在hosts文件中的域名记录,这里一定要删掉,不然生效的就是hosts文件中的记录了。删除记录以后,我们在浏览器中直接输入我们的域名:
大家可以看到,我们这里的内网穿透已经成功了,域名已经正确的被解析并且网站能够被正常的访问到。
至此,我们网站的内网穿透就已经结束了。内网穿透其实不止能穿透网站的端口,它还能做许多事,下面就来为大家讲解一下内网穿透的进阶!
四、内网穿透的进阶
经过了上面的步骤,相信大家已经明白了内网穿透的基本原理,无非就是把本地的一台设备的某个端口的服务映射到公网中,根据这个原理我们就可以做很多事了,比如,我们可以将Linux的22端口映射出去,这样我们就能从外部访问我们本地的Linux了,我们也可以把我的世界的服务器的25565端口映射出去,这样,不管我们或者我们的小伙伴在何处,都能连接上我们我的世界服务器。可以这样说,只要是本地的设备的某个端口提供了某种服务,都可以使用内网穿透将其映射到公网中,被大家访问。下面作为内网穿透的进阶,就来教大家怎么将自己的Linux主机的22端口或者是我的世界服务器的25565端口穿透到公网吧!
1.使用内网穿透映射Linux的22端口
学习进阶教程一定要将上面的网站穿透教程学完,这里不会涉及到很多细节,因为在上面的教程中,细节已经展示得很明白了。如果你准备好了那就让我们开始吧!
要映射Linux主机的22端口,首先要做的就是将22端口对外开放,那么,怎么检查22端口有没有对外开放呢?最简单的办法就是,看看能不能使用SSH远程到LInux主机,关于LInux的SSH远程教程在下面的文章中有提到过:
Linux常见的远程方式:[Linux]从零开始的Linux的远程方法介绍与配置教程_linux怎么建立远程连接-CSDN博客
在下面的讲解中,我会默认大家已经打开了Linux的22端口并且已经能成功远程到主机,如下图我是用powershell进行远程的:
这里也默认大家已经在Linux中安装好了樱花FRP。我们能够远程到Linux主机,就表示我们的22端口已经对外开放,我们现在要使用樱花FRP将其映射出去,下面我们继续到樱花FRP中创建隧道:
这里的节点,大家尽量选距离自己比较近的,这样SSH的体验会好很多:
因为我们这里只使用SSH,所以在隧道类型这里,我们要选择TCP隧道:
填入配置信息:
这里的配置就比较简单了,因为我们要映射本地的Linux主机的22端口,所以本地IP还是填写127.0.0.1,后面本地端口我们要选择22端口,Linux的默认SSH端口是22。配置完以上以后,点击"创建"即可:
这里可以看到,我们的隧道已经创建好了:
我们回到Linux的终端中将樱花FRP启动,如果大家不是第一次启动,在修改了隧道以后要按任意键进入配置模式:
这里选中我们刚刚创建的隧道:
大家可以看到,这里提示我们的隧道已经成功启动,并且给了我们节点的IP地址和端口号:
我们尝试远程这个地址,这里大家要注意,如果端口号不是22,是别的端口号的话,要加上-p选项:
不出意外的话,我们这里已经成功远程到我们的主机了:
至此,我们LInux的端口映射就已经完成了。
2.使用内网穿透映射我的世界服务器的25565端口
这里我们要穿透我的世界的服务器的25565端口,首先需要大家已经搭建好了我的世界的服务器,如果你想学习我的世界服务的搭建,可以看下面的文章:
我的世界服务器搭建:[Linux]从零开始的Minecraft服务器搭建教程_linux开mc服务器-CSDN博客
当我们搭建好我的世界的服务器以后,我们启动服务器:
确保我们在游戏中能够正常连接到服务器,这里如果搭建好了服务器不能访问的话,请查看25565端口是否对外开放:
当我们的服务器启动以后,我们就可以使用樱花FRP进行映射了,我们首先回到樱花FRP的官网:
我们同样的创建一个距离自己比较近的节点:
这里我们同样选择TCP隧道:
填入基本信息:
这里同样的本地IP就是127.0.0.1,因为我们要映射我的世界服务器,所以端口这里选择25565。
随后点击创建,我们的节点就创建好了:
我们在终端中启动我们刚创建的隧道:
这里隧道已经启动成功,并且给出了我们IP地址与端口号:
这里大家要注意,我们需要将我的世界和樱花FRP同时启动。我们回到我的世界中,将樱花FRP输出的穿透后的IP地址和端口号填入:
这里我们一定要加上端口号。如果不出意外的话已经可以成功进入游戏了:
至此,我们我的世界服务器的相关端口也穿透成功了。
五、结语
相信做完以上这些,大家也已经感受到了内网穿透的强大,大家可以使用内网穿透将自己搭建在本地的任何服务都映射到公网中,更多的玩法还是等着大家自己探索吧!感谢大家的观看!