❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️
👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈
1. 内网穿透介绍
1.1 本人对内网穿透的理解
一般来说,如果在公网环境是无法访问到内网的设备,如在学校或者公司是无法访问到家里的设备的,但是有时候往往有需要远程访问家里设备的需求,如远程访问家里的NAS存储,远程访问家里的一些智能设备等。一般来说家里的网络设备是没有固定的公网IP的(听说可以跟运营商申请公网IP,如果能申请到公网IP的话,可以在路由器端设置端口映射即可访问家里的一些设备了),所以想要公网环境访问内网资源的话,就需要一台具有公网IP的服务器作为媒介(或者说是信使),利用内网穿透技术,将内网的一些设备的数据包进行转发,从而实现公网环境访问内网的设备。公网服务器充当的是一个数据交换的作用,我们访问公网IP,然后公网服务器将我们访问的数据转发到内网设备的IP,内网设备将数据在转发给公网服务器,公网服务器将数据转发给本地客户机,从而实现内网穿透,在任何地方访问内网设备。
1.2 百度百科介绍
内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。下面就相互通信的主机在网络中与 NAT 设备的相对位置介绍内网穿透方法。
1.3 网络上一些资源的介绍
内网穿透即NAT穿透,网络连接时术语,计算机是局域网内时,外网与内网的计算机节点需要连接通信,有时就会出现不支持内网穿透。就是说映射端口,能让外网的电脑找到处于内网的电脑,提高下载速度。不管是内网穿透还是其他类型的网络穿透,都是网络穿透的统一方法来研究和解决。NAT穿透,nat穿透中有关于网络穿透的详细信息。
端口映射,其实就是常说的NAT地址转换的一种,其功能就是把在公网的地址转翻译成私有地址, 采用路由方式的ADSL宽带路由器拥有一个动态或固定的公网IP,ADSL直接接在HUB或交换机上,所有的电脑共享上网。在局域网内部的任一PC或服务器上运行到内网穿透客户端,此时域名解析到的IP地址是局域网网关出口处的公网IP地址,再在网关处做端口映射指向监控设备即可。
2. 实现内网穿透的几种途径
2.1 各种已有的内网穿透服务商
正所谓有需求就会有市场,有很多做内网穿透服务的服务商(如花生壳、易有云等等,我就不列举了,避免恰饭的嫌疑),通过他们可以非常方便地实现内网穿透,只需要注册账号,按照简洁的操作说明设置一下,即可实现内网穿透。哦对了,最后别忘记付钱。
直接购买内网穿透服务有几个不好的地方。
(1)一般它是按照设备数进行付钱的,如果你家里有多台设备需要公网访问的话,需要花费较大的代价。
(2)其次它的带宽也比较贵,想要一个好的内网穿透服务就需要比较大的带宽支持。
(3)作为一名技术出身的人员,总觉得把命运交给别人不太舒服,内网穿透技术的实现并不复杂,为什么自己不去弄一个呢?
2.2 利用反向代理技术实现内网穿透
说人话就是利用代理技术访问内网设备,为什么叫反向代理呢,主要是,正常的代理是将用户发送给服务器的数据包(内网设备发送的数据包)转发到目标地址,而反向代理是将别人发送给服务器的数据包(外网环境的设备发出的数据包)转发到用户的客户端(即内网设备)。
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。
2.3 好用的内网穿透软件 ——FRP
frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
通过在具有公网 IP 的节点上部署 frp 服务端,可以轻松地将内网服务穿透到公网,同时提供诸多专业的功能特性,这包括:
客户端服务端通信支持 TCP、KCP 以及 Websocket 等多种协议。采用 TCP连接流式复用,在单个连接间承载更多请求,节省连接建立时间。代理组间的负载均衡。 端口复用,多个服务通过同一个服务端端口暴露。多个原生支持的客户端插件(静态文件查看,HTTP、SOCK5 代理等),便于独立使用 frp 客户端完成某些工作。高度扩展性的服务端插件系统,方便结合自身需求进行功能扩展。服务端和客户端 UI 页面。
3. 使用FRP实现内网穿透
3.1 准备条件
(1)一台具有公网IP的服务器,在腾讯云,阿里云或者华为云等云服务商处购买,双十一一般会有活动,但是最近经济不太景气,云服务价格没有太大的优惠,我当时购买的是腾讯云的轻量应用服务器,新用户只需要198就可以购买三年的服务器,可以说是相当划算了。(需要在服务器管理的防火墙设置里放行需要的端口)
(2)frp软件
点击链接可进入软件下载列表,一般选择最近的发行版前一个版本即可,截止.21.04日发行版本是0.45.0,于是我选择0.44.0版本。
按照对应的系统下载对应的文件,需要注意的是,服务端和客户端的软件版本需要保持一致。
上图是frp软件的文件列表,不管是哪个系统版本的软件均存在以上几个文件,其中frpc和frps分别是客户端和服务端的二进制文件,不需要进行任何修改,需要修改的是frpc.ini和frps.ini两个文件。
3.2 服务端设置
将frps.ini修改成如下:
[common]bind_port = 7000#用于frp服务客户端和服务端通讯的端口,需要再服务器防火墙设置里面放行该端口,例如:7000。auto_token = Ba9SI3do718tCwu67V0qk4l5iNG6sAm1DJYzUO8TZxF9y6c52g0K4XLRQfjeW4bn #用于加密的token 可以使用强密码生成器(/password-generator)生成一个64位强密码。例如:Ba9SI3do718tCwu67V0qk4l5iNG6sAm1DJYzUO8TZxF9y6c52g0K4XLRQfjeW4bn。dashboard_port = 7001#用于frp服务管理端口,需要在服务器防火墙设置里面放行该端口,例如:7001。dashboard_user = user#frp服务管理用户名。dashboard_pwd = password#frp服务管理密码。
一般服务端建议使用linux服务器,比较稳定,将上述配置修改好之后,可以运行以下命令将该服务后台运行:
nohup ./frps -c frps.ini > ./frps.log &
3.3 客户端设置
将frpc.ini修改成如下:
[common]server_addr = 1.1.1.1 #服务器公网ip,例如1.1.1.1server_port = 7000 #用于frp服务客户端和服务端通讯的端口,需要再服务器防火墙设置里面放行该端口,例如:7000,需要与服务端bind_port保持一致。auto_token = Ba9SI3do718tCwu67V0qk4l5iNG6sAm1DJYzUO8TZxF9y6c52g0K4XLRQfjeW4bn #用于加密的token 可以使用强密码生成器(/password-generator)生成一个64位强密码。例如:Ba9SI3do718tCwu67V0qk4l5iNG6sAm1DJYzUO8TZxF9y6c52g0K4XLRQfjeW4bn,需要与服务端auto_token保持一致。#以下为内网穿透客户端7002端口到服务端7003端口的实例。如果有多个内网穿透设置,只需要将以下内容复制多次接到文件后面即可。[7003_to_7003]#内穿穿透的连接名称,可以自定义,如ssh。type = tcp#链接协议类型,如tcp,http等,具体需要依据穿透的服务进行设置。local_ip = 127.0.0.1#本地ip,一般是127.0.0.1local_port = 7002#本地连接的端口,如内网穿透ssh远程连接,就是22端口,Windows远程桌面是3389端口,具体的需要根据服务类型进行设置。remote_port = 7003#用于frp服务客户端和服务端通讯的端口,需要再服务器防火墙设置里面放行该端口,例如:7000,这个端口不能与服务端bind_port设置成同一个,且每一个内网穿透均需要单独设置一个remote_port。
如果客户端是linux系统的话,可以运行以下命令让其在后台自动运行:
nohup ./frpc -c frpc.ini > ./frpc.log &
如果是Windows系统的话,可以参考下一章节的示例。
4. 使用frp内网穿透Windows远程桌面示例
4.1 准备条件
(1)公网服务器(自行购买)
(2)frp软件(点击链接下载)
(3)winsw软件(点击链接下载)
4.2 服务端和客户端配置
将frps.ini修改成如下:
[common]bind_port = 7000#用于frp服务客户端和服务端通讯的端口,需要再服务器防火墙设置里面放行该端口,例如:7000。auto_token = Ba9SI3do718tCwu67V0qk4l5iNG6sAm1DJYzUO8TZxF9y6c52g0K4XLRQfjeW4bn #用于加密的token 可以使用强密码生成器(/password-generator)生成一个64位强密码。例如:Ba9SI3do718tCwu67V0qk4l5iNG6sAm1DJYzUO8TZxF9y6c52g0K4XLRQfjeW4bn。dashboard_port = 7001#用于frp服务管理端口,需要在服务器防火墙设置里面放行该端口,例如:7001。dashboard_user = user#frp服务管理用户名。dashboard_pwd = password#frp服务管理密码。
运行以下命令将该服务后台运行:
nohup ./frps -c frps.ini > ./frps.log &
将frpc.ini修改成如下:
[common]server_addr = 1.1.1.1 #服务器公网ip,例如1.1.1.1server_port = 7000 #用于frp服务客户端和服务端通讯的端口,需要再服务器防火墙设置里面放行该端口,例如:7000,需要与服务端bind_port保持一致。auto_token = Ba9SI3do718tCwu67V0qk4l5iNG6sAm1DJYzUO8TZxF9y6c52g0K4XLRQfjeW4bn #用于加密的token 可以使用强密码生成器(/password-generator)生成一个64位强密码。例如:Ba9SI3do718tCwu67V0qk4l5iNG6sAm1DJYzUO8TZxF9y6c52g0K4XLRQfjeW4bn,需要与服务端auto_token保持一致。[mstsc]#内穿穿透的连接名称,可以自定义,如ssh。type = tcplocal_ip = 127.0.0.1local_port = 3389#Windows远程连接端口remote_port = 7003#用于frp服务客户端和服务端通讯的端口,需要再服务器防火墙设置里面放行该端口,例如:7000,这个端口不能与服务端bind_port设置成同一个,且每一个内网穿透均需要单独设置一个remote_port。
打开命令提示符,进入frp软件所在路径,运行以下命令:
frpc.exe -c frpc.ini
即可实现通过ip:remote_port实现公网远程登录Windows桌面,如下:
其中用户名和凭证是Windows系统的用户名和密码,不是frp服务的用户名和密码
4.3 注册frp服务为Windows系统服务实现开机自启动
由于远程连接的电脑一般是不通过物理连接访问的,但是Windows系统经常会自动更新重启,每次重启的时候frp服务均会中断运行,需要手动恢复,往往这个时候电脑不在身边。最好的办法就是设置开启自启动。可以通过winsw软件实现将其注册成Windows系统服务实现开机自启动。
首先需要下载winsw软件
将下载好的文件改名为winsw.exe,放到frp相同的目录里,并在同一个目录里创建一个utf8编码的文本文件,文件名是 winsw.xml,内容是:
<service><id>frp</id><name>frp服务</name><description>frp内网穿透服务</description><executable>frpc</executable><arguments>-c frpc.ini</arguments><onfailure action="restart" delay="60 sec"/><onfailure action="restart" delay="120 sec"/><logmode>reset</logmode></service>
接着以管理员权限打开一个命令提示符
切换到到frp所在目录,执行:
winsw installwinsw start
如果要卸载服务,执行命令:
winsw stopwinsw uninstall
tips
在Windows10以上系统中,Windows Defender在运行过程中,经常会把frp软件当做木马进行隔离,这样就会导致frp服务启动失败,因此我们需要给frp服务添加进Windows Defender的信任区,这样就可以避免被当做病毒杀掉。具体如下:
首先进入Windows设置的更新与安全,
然后进入Windows安全中心,
打开Windows安全中心,
进入病毒和威胁防护,病毒和威胁防护设置,打开管理设置。
然后下滑到最下面,添加排除项,将frp所在的文件夹添加到排除项里面即可。
参考文献
[1] 内网穿透百度百科 /item/%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F/8597835
[2] 什么是内网穿透?内网穿透有什么用?/news/7244.html
[3] FRP介绍 /fatedier/frp/blob/dev/README_zh.md
[4] 反向代理百度百科 /item/%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86/7793488
[5] FRP内网穿透Windows远程桌面 /ingxx/p/12255241.html
❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️
👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈