首页 > 编程知识 正文

frp内网穿透什么意思,免费内网映射

时间:2023-05-04 18:40:24 阅读:172112 作者:1119

首先我们应先分清什么是内网映射和什么是内网转发和端口映射与端口转发

内部网映射:在nat4的状态下,由于nat的物理特性,无法积极向外部提供服务。 提供服务时,无法将所需内部网上的地址和端口转发到可控的外部网位置和端口上。

首先,我们的家庭宽带获得100.64.1.2的互联网地址。 此时的internet地址不是公共网络,但因为有nat服务器,所以可以使用于internet。 nat的部分请看我的另一篇文章。

对于外部来说,全球通信需要公共地址。 不,因为有GFW存在,所以能否进行全球通信取决于你的ip是否被墙壁覆盖。 此时,运营商使用117.2.3.6,用于提供给100.64.1.2进行通信。 这意味着实际上只有一个家庭(但是家庭需要连接路由器)路由器必须至少封装在nat中两次才能连接到互联网。 首先用路由器将192.168.123.0/24的数据封装在100.64.1.2中,将100.64.1.2的数据封装在117.2.3.6中才能完成通信。

在上述过程中,如果192.168.123.61供希望服务的另一方使用,则他的端口必须绑定到117.2.3.6,而nat的特性是只支持从nat内部向nat外部提供服务也就是说,要将192.168.123.61:5666映射到公共网络,首先要将与100.64.1.2对应的192.168.123.61:5666的数据映射到117.2.3.6 无论如何,都是因为最终的对应关系,即192.168.123.61:5666似乎与外部网地址117对应,也就是说,由于只有建立了映射关系的数据被发送到内部网内, 192.168.123.61:56666所对应的外联网地址117.2.3.6:2632是与119.3.6.5:6359相对应的192.168.1.63363632

因此,需要使用frp等工具将内部网上的数据传输到可控公共网络,然后其他人访问该可控公共网络以实现数据通信。 此时,由于内部网开始积极地连接,因此在tcp keep的保持下,即使是nat网也可以稳定地连接。 具体原理说明如下。

那么内网转发呢?

内部网传输实际上是上图中对方服务器的部分

此时,您的路由器正在获取119.3.6.5的ip。 一般来说,这个公共网络ip被认为是可控的。 因为你已经取得了全球网络的ip。 关于这个ip的使用权,从《中华人民共和国民法典》上面开始,运营商暂时租赁给你了,所以可以使用那个ip在法律范围内做任何事情。 当然端口转发也包括在其中。 可以将192.168.1.6:6359转发给119.3.6.5:6359。 具体的转发过程在路由器上操作就可以了。

端口映射实际上与内部网络映射相同,但内部网络映射一般指映射多个端口,而端口映射一般为单个端口。 当然,这只是称呼不同,意思是一样的。

端口转发是指将intranet ip生成的套接字连接转发到外部IP,然后外部设备从端口池中选择一个用于通信。 当然,这个步骤可以自动建立,也可以人工操作。

例如: 192.168.123.6133602663可以对应于119.3.6.5:2963,或者192.168.123.6133602663对应于119.3.6.533602963 两种端口转发

注意:端口绑定到的端口不必与内部网相同,也可以不同。

以上,简单说明了网络知识后,就可以开始部署frp了。 首先,frp的客户端和服务器端位于文件夹中,frps的服务器端在公共网络中运行,frpc的客户端在内部网中运行。 首先下载frp文件。 在这里使用wget下载

wget https://cdn.10086.fund :23350/FRP _0. 36.2 _ Linux _ amd64.tar.gz然后解压缩。 请注意此时的路径。 下面用的是

tar-xzfvfrp _0. 36.2 _ Linux _ amd64.tar.gz此处建议使用pwd命令显示当前绝对路径

cd frp_0.36.2_linux_amd64位于frp文件夹中

使用ls命令显示当前文件夹下的文件

首先需要设置与frps对应的服务端

使用nano编辑

nano frps.ini编辑命令如下

更改[ common ] bind _ port=23360 privilege _ token=12345678 bind _ port的端口号即可。 更改后,客户端将通过此端口号与服务端通信。 在这里需要发布你设定的端口号。 不这样做就无法执行。

token=12345678是

指将12345678用于服务器与客户端的身份校验中,双方都要配置这个参数,且值一样才能进行端口映射

然后我们先让服务运行起来

./frpsc -c /data/wwwroot/default/frp_0.25.0_linux_amd64/frpc.ini

显然你们需要更改文件对应的路径才对,当然你们能允许frps命令就意味着里面在当前的文件夹下。
如果返回以下内容就监听成功了

如果你想要一直运行到结束在命令后面加上&即可

./frpsc -c /data/wwwroot/default/frp_0.25.0_linux_amd64/frpc.ini &

服务器重新开机后将不在进行运行该服务。

然后你需要重启后还能稳定运行,那你需要先了解一下systemctl服务的原理,这里,你也可以看看别人的文章:NAS 篇十一:正直的招牌上手教程,自建Frp内网穿透,实现外网访问nas设备

先进入systemctl的目录

cd /lib/systemd/system/

在这个目录下有很多的开机自启进程,不要更改任何一个命令的参数

使用nano新建一个命令,名字随便

nano frp.service

反正名称结尾是service,并且于其他文件名不冲突就行

然后要写入一些内容

[Unit]Description=fraps serviceAfter=network.target syslog.targetWants=network.target[Service]Type=simpleExecStart=/root/frp/frps -c /root/frp/frps.ini[Install]WantedBy=multi-user.target

然后一行一行的解释
[Unit] 这个是单元的开头属于固定格式

Description=fraps service 这个是命令的名称自己取一个就行了

After=network.target syslog.target 这个是当前 Unit 运行必须满足的条件,否则会报启动失败 意思是你得先加载网络单元才能运行

Wants=network.target 这个意思是与当前 Unit 配合的其他 Unit,如果它们没有运行,当前 Unit 不会启动失败 意思是他只需要这个单元就能运行而不需要其他的单元,当然其他软件有没有就跟这个没关系了。

[Service] 区块用来 Service 的配置,只有 Service 类型的 Unit 才有这个区块

Type=simple Type:定义启动时的进程行为。它有以下几种值。

Type=simple:默认值

ExecStart=/data/wwwroot/default/frp_0.25.0_linux_amd64/frps -c /data/wwwroot/default/frp_0.25.0_linux_amd64/frps.ini 这里是启动命令的地方,就是运行什么命令的意思 注意这里应该是绝对路径他将使用frps命令,并使用frpc.ini的配置文件

[Install] 通常是配置文件的最后一个区块,用来定义如何启动,以及是否开机启动

WantedBy=multi-user.target 这里指的是运行在多用户模式

以上的内容是我从别人博客抄下来的,加了点自己的看法,细节看他的博客Systemd 入门教程:命令篇
启动模式部分看:修改debian默认运行级别
保存退出以后,可以尝试运行一下

systemctl start frp

注意这里运行的frp应该跟你创建的文件名一样才能运行。

systemctl enable frp

这里设置成开机自启,这样重启以后服务就可以自动运行了
接下来看看客户端
在客户端上面打开frpc.ini进行配置

[common]server_addr = 121.89.240.205server_port = 23360privilege_token = 12345678[ssh]type = tcplocal_ip = 127.0.0.1local_port = 22remote_port = 6000[test]type = tcplocal_ip = 192.168.123.61local_port = 3389remote_port = 6001custom_domains = test.10086.fund

这里的common是连接服务器的相关信息
server_addr填服务器的ip
server_port填你在服务器里面设置的bind_port的端口
[ssh]是名称这个可以随意
type = tcp是内网连接的类型,这里监听的是tcp的端口
local_ip这里填写的是内网的ip
local_port这里填写的是内网的端口号
remote_port这里填写的是想在外部服务器上面访问的端口号,这个端口号应该在外部服务器上面进行放行,而不是在内网服务器上面放行,这里需要注意。
custom_domains = test.10086.fund 这里可以使用域名访问内部192.168.123.61的连接,当然由于这里的远程连接是6001发起的,所以如果想要连接得打test.10086.fund:6001才行
如果有多个,后面就继续就行了。
例如

[common]server_addr = 121.89.240.205server_port = 23360token = 12345678[ssh]type = tcplocal_ip = 127.0.0.1local_port = 22remote_port = 6000custom_domains = test.10086.fund[test]type = tcplocal_ip = 192.168.123.61local_port = 3389remote_port = 6001

服务器的连接信息只用写一次,要映射的端口就按需填写,记得remote_port是在外网上面进行放行与使用的就行。
以上配置完了,运行一下吧。

frpc -c /data/wwwroot/default/frp_0.25.0_linux_amd64/frpc.ini

那没什么问题你会看到以下提示

第一个框里面是服务端的监听端口,以后的转发都会通过这个端口来完成,这个既是管理,也是转发的端口
第二个框是监听ssh的端口号
第三个框对于第二个ssh的端口号返回了一个成功那就没问题了
第四第五同上
到这里就快结束了,下面我会对frp如何完成内网映射进行说明。
首先是服务器部分
在运行frps后使用了frps.ini已经设置好的23360端口,此时23360端口将会进行监听

此时我们可以看到23360端口的管理部分已经监听好了,只要你记得端口放行就行。
接下来看看客户端的端口使用情况

此时我们可以看到192.168.123.61的内网使用了21230端口监听了服务端的23600端口,我前面提过nat4只能由内部发往外部,这里作为服务端的23600就可以被成功的监听。
当然对于服务器来说,内网的ip和端口号也会发生改变

由于我内网使用的是公网宽带,所以路由器支持upnp服务,所以客户端的内网与外网的端口号不变,在nat4中,一般都会进行变化。
那么双方都完成了启动工作,接下来就是访问的原理了

此时我们可以看到在服务端上面已经具备了6000与6001的端口,那么访问试一下,看到底是怎么完成的映射

这里我使用了公司宽带访问6000端口,那么我跟服务器的6000端口之间已经建立的连接。 对于客户端来说,他的外部访问只需要跟服务器完成连接就行了,所有的数据转发都会走23600来完成 此时我们可以看到仅多了一个来自127.0.0.1的连接,这里的连接是由端口号生成一个端口用于访问内网对应服务端口的,这里我对内网6000使用的是ssh,所以内网建立的是22端口。 这里23392会把从22访问到的数据通过21230发给服务器的23360管理端口,23360再把数据发给我的公司电脑的19225来完成了本次的建立连接。 这里可能会有一个疑问我解答一下 公司电脑的19225是怎么来的? 公司电脑的ip访问服务器的23360时,会随机使用一个未被占用的外部端口来完成,这里使用的是19225来访问服务器的23360。 为什么只用23360来传输数据? 这里由于建立的连接只能由客户端发起,任何由服务器发起向客户端的连接都会被运营商取消,所以能与服务器建立几个连接取决于客户端配置,目前只能使用一个端口建立连接。 为什么只用23360就够了,客户端不是映射了2个端口吗? 在服务器上面有监听客户端申请的2个端口就是没问题的,对于外部来说端口映射就是把你想要从外部ip+端口访问的数据发给内部而已,那么对于内部来说到底建立几个连接并不受外部影响。上面已经说过了,客户端只申请建立一个管理端口,那么从外部访问的数据就只会通过客户端与服务器建立的那一个端口进行操作。 为什么只用一个23360就可以完成管理、监听、数据传输? 这个是因为服务器的流量要走23360管理端口才能到达内部,那么客户端的对应端口收到数据后就会解析数据内容并在客户端内生成对应的socket来模拟客户端自己访问自己再把自己的数据通过管理端口发给服务器完成通信流程。 made by qwe

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。