内网穿透_frp的使用

文章目录


前言

由于NAT技术的存在,我们的内网设备是无法从内网直接与公网设备或者其他内网的设备进行连接的,所以,今天我们来学习一种内网穿透技术,来实现内网之间互相访问。

其原理很简单,先让架设服务的内网服务器先与一台处于公网的主机建立连接,然后所有其他需要访问这台处于内网的服务器的客户端主机只需要连接那台公网主机,向公网主机发送服务请求数据,再由这台公网主机将你对应的数据转发至内网服务器暴露的端口中,而之后所有的数据通讯都要经过公网主机的转发,这就是内网穿透的原理。

本次实验需要使用到frp工具。


提示:以下是本篇文章正文内容,下面案例可供参考

一、frp工具的下载

Linux端的下载

最好是以root的身份进行下载

1.创建目录
bash 复制代码
mkdir -p /opt/frp;cd /opt/frp
2.下载frp工具
bash 复制代码
wget https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_amd64.tar.gz
3.解压缩
bash 复制代码
tar -zxvf *
4.进入解压缩后的文件夹
bash 复制代码
cd /frp_0.51.3_linux_amd64

可以看到这几个文件

Windows端的下载

1.下载frp

github网址: https://github.com/fatedier/frp/releases

下载windows_amd64的压缩包。

2.将解压包压缩到指定目录

自行解压

解压缩后可以看到这几个文件

frp的配置

根据我拥有的主机的环境为例子,我有一台Linux云服务器处于公网,两台处于内网的电脑。

现在我想让一台处于内网的电脑架设某种服务作为服务器,这里就叫它内网服务器。

我的那台在公网中的Linux云服务器我称为公网主机。

最后一台处于内网的电脑用于访问内网服务器,我称为内网客户端。

公网主机的frps配置

从frp的角度来讲,我们的这台公网主机才是服务器,所以之后就是使用frps程序。

我们需要配置的文件是fprs.ini

fprs.ini

它默认是这个样子,其实这样也够了,我们今天也就是简单使用一下内网穿透。

bind_port: 是fprs的监听端口,fprc需要配置相同的server_port来做到与frps进行连接。

如果需要的话还可以设置了token作为内网穿透的密钥,如果设置了token,frpc端也要设置相同的密钥。

例如

[common]

bind_port = 7000

token = 1234

内网服务器的frpc配置

bash 复制代码
fprc.toml
serverAddr = "你的frps主机的IP地址"
serverPort = 7000  #端口号要与bind_port一致
[[proxies]]
name = "test-tcp"  #这个代理的名字
type = "tcp"           #连接的类型,这里使用tcp
localIP = "127.0.0.1"  #本地IP地址,直接127.0.0.1就行了
localPort = 7999        #将本地的7999端口暴露给frps
remotePort = 6000    #fprs对应的端口地址,如果frps端有人向它的6000端口发送数据,会被直接转发给fprc的7999端口。

需要注意的就是localPort和remotePort,这里其实就可以理解为fprs对frpc的localPort做了端口映射,映射到了自己的remotePort,有人向remotePort端口建立连接或发送数据,都会被转发到frpc的localPort端口。

内网客户端

内网客户端无需frpc,只需要知道公网主机的IP地址和frpc配置里面的remotePort就可以了。

cpp 复制代码
#include"Socket.h"

const std::string server_ip = "公网主机IP";
const int server_port = 6000;  //与fprc.toml的remotePort一致

int main()
{
	WSADATA wsd;
	WSAStartup(MAKEWORD(2, 2), &wsd);

	Socket sock;
	sock.Init();

	sock.Connect(server_ip, server_port);
	std::cout << "Connect Succeeded!" << std::endl;

	std::string mes;
	char buffer[1024];

	while (1)
	{
		std::cin >> mes;
		send(sock._listensock, mes.c_str(), mes.size(), 0);


		int n = recv(sock._listensock, buffer, sizeof buffer, 0);
		if (n > 0)
		{
			buffer[n] = 0;
			mes = buffer;
			std::cout << mes << std::endl;
		}
	}

	WSACleanup();   //清理网络环境
	return 0;
}

客户端就是一个简单的发送消息的程序。

开始内网穿透实验

1.运行frps

在公网主机上运行frps

bash 复制代码
./frps -c frps.ini 
2.运行frpc

在内网服务器上运行frpc

打开cmd,并执行frpc

frps端也出现对应日志信息。

3.启动内网服务器的服务

我这里的服务就随便写了一个打印数据

4.启动内网客户端

运行客户端即可

可以看到以下现象

5. 开始服务通讯

可以看到内网穿透成功实现。

总结

本章主要讲解了内网穿透的原理,认识如何使用frp工具实现内网穿透。

相关推荐
云计算DevOps-韩老师4 分钟前
【网络云计算】2024第47周-每日【2024/11/21】周考-实操题-RAID6实操解析2
网络·云计算
哎呦喂-ll38 分钟前
Linux进阶:环境变量
linux
耗同学一米八40 分钟前
2024 年河北省职业院校技能大赛网络建设与运维赛项样题四
运维·网络
Rverdoser40 分钟前
Linux环境开启MongoDB的安全认证
linux·安全·mongodb
PigeonGuan1 小时前
【jupyter】linux服务器怎么使用jupyter
linux·ide·jupyter
速盾cdn1 小时前
速盾:CDN缓存的工作原理是什么?
网络·安全·web安全
东华果汁哥1 小时前
【linux 免密登录】快速设置kafka01、kafka02、kafka03 三台机器免密登录
linux·运维·服务器
咖喱鱼蛋2 小时前
Ubuntu安装Electron环境
linux·ubuntu·electron
ac.char2 小时前
在 Ubuntu 系统上安装 npm 环境以及 nvm(Node Version Manager)
linux·ubuntu·npm