这里使用的是传统穿透方法,需要一个有公网ip的中转节点去告知
看最下面,用最新版的frps
1、注意
服务器和客户机之间的数据传输全部经过中转服务器,传输速度将受制于中转服务器的上下行带宽。
2、穿透原理
其实就是客户端A绑定端口发送数据,然后监听该端口,然后由中转服务器告诉客户端B,客户端A的公网IP和公网端口,客户端B连接A的公网IP和公网端口,数据包自动由NAT转化为客户端内网IP和内网端口。
中转服务器端指明哪个端口(服务端口)是负责中转的,然后启动服务。内网客户端向中转服务器的服务端口发送请求,告知我要监听哪个端口(a),外网的客户端可以通过请求(中转服务器:端口a)请求到内网客户端,我认为是中转服务器端的prex服务先查看请求的端口是否是内网客户端请求的,如果是那么就会转发到内网客户端上。
3、下载
下载Releases · fatedier/frp · GitHub
4、中转服务器配置
解压,不用其他操作,解压后打开frps.ini,输入
[common]
bind_port = 7000 # 中转服务器中frp服务的端口号,内网客户端通过访问这个端口连接上
dashboard_port = 7500 # frp的web界面的端口号
dashboard_user = admin # web界面的登陆账户
dashboard_pwd = pass # web界面的登陆密码
authentication_method = token
token = 123456 # frp客户端连接时的密码, 内网客户端使用这个密码验证自己的身份
然后退出执行命令,这里nohup(命令)$ 保证了在关闭命令行依旧能够运行这个服务
nohup ./frps -c frps.ini &
如果出现appending output to nohup.out,就可以了,下面是终端关闭就会停止
5、内网客户端
freeSSHd and freeFTPd - open source SSH and SFTP servers for Windows
把这两个安了
然后对于frps同样是解压,路径要记住,最好简洁一点,然后打开frpc.ini配置
[common]
server_addr = 中转服务器的公网ip
authentication_method = token
token = tokenpass #客户端的密码
server_port = 7000 #中转服务器的密码
[RDP]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 33389
上面只要访问(中转服务器:333389)就会映射到这个内网客户端的3389端口。
server_port = 7000 就是指明连接服务器的7000端口
在ip地址里面加上9999就会到本地的9999
local_port = 9999
remote_port = 9999
在ip地址加上33389,就会访问本地的
local_port = 3389
remote_port =33389
这两个端口防火墙都要打开
命令看下面吧,懒得打了,然后只要出下面三行就是连接成功了
6、注意
上面需要的端口,都要打开
内网客户端的33389和3389
中转服务器也需要打开33389,以及7000,7500
7、web验证成功
开启端口号 7500
web端口验证 公网ip:开放的web端口号
登录成功
8、远程桌面登录
win10家庭版不允许其他远程登录你的系统
登录的时候
然后输入密码
9、需要把内网客户端的那个弄成开机启动,以后再添加
linux和linux通信,并使用xshell登录
Releases · fatedier/frp · GitHub
1、下载前使用arch命令查看系统架构
如果是aarch64那么下载arm64位的
如果是x86_64那么下载amd64位的
2、下载最新的版本,这时版本是0.41.0
3、配置服务端
服务器端点开frps.ini,下面这个端口是客户端要连接的端口
保存后 运行./frps -c frps.ini
4、配置客户端
./frpc -c frpc.ini
看好下面的端口6000,然后就用xshell就可以连接了
至于其他的后台运行,看上面就可以
如果服务器端关了服务后,客户端会尝试重连,它会一直尝试重连,只不过重连的间隔时间越来越大。
其他
1、此外,可以1个服务端多个客户端,但是要求客户端的ssh名称不一样,比如下面命名为ssh1
[common]
server_addr = #要连的ip
server_port = #服务器端口,多个客户端可以一样
[ssh1]
type = tcp
local_ip = 127.0.0.1
local_port = 6080
remote_port = 6080
2、如果想要在服务器端永久运行,看另一篇文章systemctl命令和配置整理_贪睡的蜗牛的博客-CSDN博客
或者可以试试运行下面的脚本,大概意思是每一分钟查看frp任务是否存在,如果不存在那么就重新运行,至于为什么得到数量要以3,我也不知道为什么,因为运行脚本得到的frp相关的最低就是3....姑且这么写吧,另外下面.sh名称是updateJob.sh,文件随便放
#!/bin/bash
# 定义一个刷新时间
flushtime=60;
#定义flag文件名称
flagfileName="flag.txt"
#计划任务文件路径
timeFilePath="/var/spool/cron/root"
#找到当前sh路径
#shFilePath=$(pwd)"/test2.sh"
shFilePath=$(pwd)"/updateJob.sh"
echo $shFilePath
#判断是否是第一次打开本脚本
if test -e "/$timeFilePath"
then
echo "定时配置文件存在"
else
echo "定时配置文件不存在"
`touch $timeFilePath`
fi
if [ `grep -c $shFilePath $timeFilePath` -eq 0 ];then
#第一次打开本脚本则在定时中插入更新任务
echo '更新任务初始化'
echo '本脚本文件路径 '"$shFilePath"
echo '定时文件路径 '"$timeFilePath"
echo "* * * * * $shFilePath" >> $timeFilePath '&> /dev/null'
echo "重启任务"
`rm -rf /var/run/crond.pid`
`crond`
#离开脚本
exit
fi
count=`ps aux | grep -c "frp"`
echo "$count"
if [ "$count" -le 3 ]
then
echo "添加进程"
cd /frp
ls
nohup ./frps -c frps.ini &
fi
参考:
利用阿里云服务器公网ip,搭建frp内网穿透服务,将自己变成云电脑_zh452647457的博客-CSDN博客_把云服务器公网ip映射自己电脑
frp(内网穿透)_Anonymous-1-CSDN博客_frp
借助ecs的公网ip将自己家里的Windows做个内外穿透【外网可以访问的】--frp【远程连接Windows电脑】_zhaojiafu的博客-CSDN博客
stcp和p2p模式
stcp
frp的tcp模式相当于你的设备直接向公网暴露了一个tcp端口。任何设备都可以尝试连接这个端口。这里就会有很大的安全风险。所以有了stcp模式,这种模式可以验证密码
需要穿透的客户端连接时将type修改为type = stcp,添加一个sk,sk = abcdefg
# frpc.ini
[common]
# 你的frp服务器的公网ip
server_addr = x.x.x.x
# 你的frp服务器的默认端口
server_port = 7000
[rdp]
type = stcp
# 只有 sk 一致的用户才能访问到此服务
sk = abcdefg
local_ip = 127.0.0.1
# 远程桌面的本地端口号
local_port = 3389
另一个连得时候,type = stcp,role = visitor,
# frpc.ini
[common]
# 你的frp服务器的公网ip
server_addr = x.x.x.x
# 你的frp服务器的默认端口
server_port = 7000
[rdp_visitor]
type = stcp
# stcp 的访问者
role = visitor
# 要访问的 stcp 代理的名字
server_name = rdp
# 只有 sk 一致的用户才能访问到此服务
sk = abcdefg
# 绑定本地端口用于访问 远程桌面 服务
bind_addr = 127.0.0.1
bind_port = 6000
p2p
公网服务端添加一个bind_udp_port
[common]
bind_port = 7000
bind_udp_port = 7001
内网中的客户端
[common]
server_addr = xxxxxxxxip
server_port = 7000
[note17]
type = xtcp
sk = zxccxz
local_ip = 127.0.0.1
local_port = 22
[common]
server_addr = xxxxip
server_port = 7000
[ssh_windows]
type = xtcp
role = visitor
server_name = note17
sk = zxccxz
bind_addr = 127.0.0.1
bind_port = 1081
但是一般会失败,要看nat类型。对称式网络基本不能打洞,两端都是端口限制圆锥型尝试过也不行。全圆锥型成功率最高
内网穿透神器frp之进阶配置——stcp及p2p模式_frp xtcp模式_xinyue_htx的博客-CSDN博客
将window放入到计划任务中