服务端运行,监听一个主端口,等待客户端的连接;
客户端连接到服务端的主端口,同时告诉服务端要监听的端口和转发类型;
服务端fork新的进程监听客户端指定的端口;
外网用户连接到客户端指定的端口,服务端通过和客户端的连接将数据转发到客户端;
客户端进程再将数据转发到本地服务,从而实现内网对外暴露服务的能力。简单来说一下整个原理实现的流程:
首先,大家知道如果你(A)在北京,你的朋友(B)在上海,如果想要ping通他的本机地址是不可能的,因为A机器的IP和B电脑的IP都是属于内网IP,并不能直接互通的。 但是你们两个都可以访问一个东西,就是互联网,既然你们都可以访问互联网,那么就可以在互联网上部署一个服务器,你们两个电脑都可以访问这个服务器,因为他是部署在互联网上的。所有可以上网的电脑都可以访问这个服务器(假设不设置任何策略),所以可以将它看做一个跳板,通过他你们就可以互相通信。
再简而言之就是,你(A)和你老婆(B)不认识,通过媒婆(服务器)牵线,然后互不相识的两个人就开始有了联系。
2、实战所需的硬性条件
需要一台vps服务器,可以购买腾讯云或者阿里云等(看折扣),节日折扣或者活动优惠的时候很便宜。(我买的腾讯云轻量级服务器,一年38块)
1、利用Xshell连接服务器,然后在命令行输入代码:
wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz
2、利用命令:tar -zxvf frp_0.33.0_linux_amd64.tar.gz3、进入该解压目录:
然后进入该解压目录:
cd frp_0.33.0_linux_amd64/
打开配置文件:
nano frps.ini
修改文件内容为以下内容:
[common]
# frp监听的端口,默认是7000,可以改成其他的
bind_port = 7000
# 授权码,请改成更复杂的
token = 52010 # 这个token之后在客户端会用到
# frp管理后台端口,请按自己需求更改
dashboard_port = 7500
# frp管理后台用户名和密码,请改成自己的
dashboard_user = admin
dashboard_pwd = admin
enable_prometheus = true
# frp日志配置
log_file = /var/log/frps.log
log_level = info
log_max_days = 3
文件修改完以后,需要设置启动frp服务所需的前提文件:
sudo mkdir -p /etc/frp
sudo cp frps.ini /etc/frp
sudo cp frps /usr/bin
sudo cp systemd/frps.service /usr/lib/systemd/system/
sudo systemctl enable frps
sudo systemctl start frps
然后就是防火墙策略的修改,首先一定要先去腾讯云服务器平台修改你的服务器策略(假设你是腾讯云服务器,如果是别的也是差不多步骤),因为仅仅是测试穿透,所以策略写的All,没有任何拦截,现实中不要这样操作。
然后在服务器命令行中也输入防火请开放端口,根据你操作系统不同,使用的方法可以百度查询,这里不赘述了。 开放服务器端口 7000/tcp 和 7500/tcp
在命令行中输入代码systemctl status frps
出现以下界面就已经成功一半了。
服务器端的最后一个步骤就是验证是否启动服务成功。访问:http://服务器IP:后台管理端口” ,输入用户名和密码可以查看连接状态 如:http://yourip:7500,用户名和密码分别对应frps.ini文件中的dashboard_user和dashboard_pwd 登录之后界面如下:
出现以上界面就是服务启动成功了,服务端配置已经完成,下面是客户端配置:
1、在你客户端,我的是kali虚拟机,在客户端上下载frp包,下面附下载链接:
https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_arm64.tar.gz
跟服务端的下载解压方式一样,使用wget命令下载,使用 tar -zvxf来解压。
2、进入文件目录修改配置文件frpc.ini (注意: 不是 frps.ini)将文件内容修改为: :
# 客户端配置
[common]
server_addr = 服务器ip
server_port = 7000 # 与frps.ini的bind_port一致
token = 52010 # 与frps.ini的token一致
# 配置ssh服务
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000 # 这个自定义,之后再ssh连接的时候要用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ieVPMN8v-1665488203308)(C:\Users\ASUS-PC\AppData\Roaming\Typora\typora-user-images\image-20221011175452867.png)]
文件配置完以后要对防火墙进行配置。 因为我用的kali,使用的ufw。所以:
防火墙配置完以后就可以开启客户端了。
./frpc -c frpc.ini
出现这个界面就好了,现在离成功只差一步之遥。
找一台不同网段的电脑在终端执行代码:
ssh 用户名@服务器IP -p 端口号
用户名: 就是你本机的用户名,比如 我的kali用的是root,这边就填root
服务器IP:就是你购买的拥有一个外网IP的服务器,输入你外网IP的服务器IP
端口号:就是你客户端中 frpc.ini 文件中的remote_port。(本文用的6000)
所以最后的命令就是:
ssh [email protected] -p 6000
遇到的这个问题。耗了很多时间才解决。文章下面附大佬参考链接。
解决办法:
修改到本机kali中的/etc/ssh/sshd.config,将默认值修改为下图值:
将MaxSessions 的值改成2000
最后看一下成果:
实现内网穿透!
完结!
在实现过程中有什么问题可以留言私信~~~
参考链接:ssh登陆概率性失败,报错:kex_exchange_identification - 系统运维 - 亿速云 (yisu.com)