参考博客:
博客1(推荐): https://sspai.com/post/52523
博客2: https://blog.csdn.net/qq_36981760/article/details/115713179
博客3: https://blog.csdn.net/qq_36981760/article/details/115713179
参考视频
(推荐,比较详细): https://www.bilibili.com/video/BV1p94y1y7ft/
背景
由于寒假放假回家, 回家之后就不能连接学校的服务器了(可以不用,但是不能没有),所以最近了解frp内网穿透技术通过连接公网ip就可以连接学校的服务器。但是查阅博客中有一些细节我感觉没有讲清楚(可能是我比较菜, 配了挺久), 所以特此缝合一篇博客供大家使用。
frp介绍
frp可以通过利用公网IP的的主机(frp服务端)将内网的主机(frp客户端)暴露给互联网,从而实现通过外网能直接访问到内网主机;frp有服务端和客户端,服务端需要装在有公网ip的主机上,客户端装在内网主机上(重点!!!)。
frp案例:
情况1. 电脑在学校: 连接学校网的主机 --------> 学校服务器 (属于同一个局域网中可以直接连)
情况2. 电脑在家(和服务器不在一个局域网中): 家里面的主机 --------> 公网ip --------> 学校服务器 (需要使用frp)
如果你是情况1, 那么恭喜你不需要使用内网穿透,
如果你是情况2, 我们的目的是通过内网穿透(frp)技术,本地主机通过访问公网主机ip(106.55.xxx.xxx
)即可访问服务器主机。 举例我在家连接学校服务器
准备工作
- (frp服务端) 一台公网主机,一般是云服务器(阿里云、腾讯云等都行) 注意:
不能是
192.168.xxx.xxx 这种ip地址开头的本地虚拟机主机,这样满足公网条件 (假设本案例使用的公网ip为106.55.123.123
) - (frp客户端)一台私网主机,一般是局域网里面服务器 注意:
可以是
192.168这种ip地址开头的虚拟机主机 (假设服务器ip为222.200.123.123
) - 一台想要使用服务器的主机(ip理论上任意,可以访问公网即可)
环境说明: frp服务端, frp客户端都是Linux系统
1. frp服务端设置
说明: 内网穿透需要先配置frp服务端然后再配置frp客户端
1.1 frp的下载
官网下载地址: https://github.com/fatedier/frp/releases
选择适合的版本下载(以v0.33.0
版本为例)
查看Linux主机版本为
arch
查看结果,如果是“X86_64“即可选择”frp_0.33.0_linux_amd64.tar.gz
”
创建vpns目录用于存放frp服务端的安装包:(目录名称可以自定以)
mkdir vpns
切换到vpns目录下载frp服务端
cd vpns
1.1.1 双击下载
v0.33.0下载地址: https://github.com/fatedier/frp/releases/tag/v0.33.0
下载后上传到frp服务端的vpns目录中即可
1.1.2 wget命令下载
在frp服务端的vpns目录下进行下载
wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz
1.2 frp文件解压
tar -zvxf frp_0.33.0_linux_amd64.tar.gz
解压后如图所示
复制frp_0.33.0_linux_amd64
文件夹并改名为frp,方便使用
cp -r frp_0.33.0_linux_amd64 frp
当前vpns目录下文件结构
1.3 删除冗余文件
cd frp
删除与frp服务端无关的文件
rm -rf frpc frpc.ini frpc_full.ini
删除后frp目录如下所示
1.4 配置frps.ini文件
vim frps.ini
默认初始化内容是这样的
[common]
bind_port = 7000
复制内容 添加到文件末尾
dashboard_port = 7500
token = 12345678
dashboard_user = admin
dashboard_pwd = admin
vhost_ssh_port = 6000
vhost_rdp_port = 7001
heartbeat_timeout = 60
更改后frps.ini
文件内容如下
[common]
bind_port = 7000
dashboard_port = 7500
token = 12345678
dashboard_user = admin
dashboard_pwd = admin
vhost_ssh_port = 6000
vhost_rdp_port = 7001
heartbeat_timeout = 60
:wq!
保存退出
配置完如下
各个参数说明:
# bind_port 表示用于客户端和服务端连接的端口,这个端口号我们之后在配置客户端的时候要用到。
bind_port = 7000
# dashboard_port 是服务端仪表板的端口,在配置完成服务启动后可以通过公网ip:7500 进行访问
dashboard_port = 7500
# token是用于客户端和服务端连接的口令,自行设置并记录,稍后会用到。
token = 12345678
# dashboard_user 和 dashboard_pwd 表示打开仪表板页面(7500端口)
# 登录的用户名和密码 可以自定义
dashboard_user = admin
dashboard_pwd = admin
# vhost_ssh_port 表示要用6000端口 作为ssh服务端口
vhost_ssh_port = 6000
# vhost_ssh_port 表示要用7001端口 作为rdp服务端口
vhost_rdp_port = 7001
# 心跳连接: 建议配置, frp 0.43.0版本如果不加,60秒就会自动断开连接!
# frp服务端就加这一条,frp客户端每个服务都要加。
heartbeat_timeout = 60
1.5 防火墙开放端口
防火墙相关操作: https://blog.csdn.net/qq_45056135/article/details/128172916
查看当前开放的端口
firewall-cmd --zone=public --list-ports
将7000, 7500, 6000, 7001端口开放
开放 7000 端口(frps服务端和frpc客户端建立连接)
firewall-cmd --zone=public --add-port=7000/tcp --permanent
开放7500端口(配置完成启动服务后可以通过浏览器访问 x.x.x.x:7500 , 其中x.x.x.x为frp服务端的ip, 查看frp服务运行信息。例如的是106.55.123.123:7500)
firewall-cmd --zone=public --add-port=7500/tcp --permanent
开放 6000 端口(用于和frp服务端和frp端建立ssh连接协议, 之后会讲到)
firewall-cmd --zone=public --add-port=6000/tcp --permanent
开放 7001 端口(用于和frp服务端和frp端)
firewall-cmd --zone=public --add-port=7001/tcp --permanent
使其立即生效
firewall-cmd --reload
查看当前开放的端口
firewall-cmd --zone=public --list-ports
如下所示表示端口已经开放
如果你的frp服务端是云服务器,在防火墙设置中开放7000, 7500, 6000, 7001端口确保端口真的开放了(因为云服务器中利用命令开启端口可能无效)
如下所示
1.6 运行frps服务端
在frp目录下运行
./frps -c frps.ini
如下所示表示运行服务端成功
检查公网ip的7500端口是否可以正常访问
例如我的公网ip是: 106.55.123.123
106.55.123.123:7500
此时用浏览器访问 106.55.123.123:7500:7500 并使用自己设置的用户名密码登录(都是admin),即可看到仪表板界面
如下说明设置成功
到这里frp服务端设置已经完成
2. frp客户端设置
2.1 frp的下载
官网下载地址: https://github.com/fatedier/frp/releases
选择适合的版本下载(以v0.33.0版本为例)
查看Linux主机版本为
arch
如下所示, 查看结果,如果是“X86_64“即可选择”amd64”
创建目录用于存放frp客户端安装包:
mkdir vpnc
切换到vpnc进行下载frp客户端
cd vpnc
2.1.1 双击下载
v0.33.0下载地址: https://github.com/fatedier/frp/releases/tag/v0.33.0
下载上传到frp客户端的vpnc目录中
2.1.2 wget命令下载
切换到frp客户端的vpnc目录中(目录名称可以自定义)
利用wget命令进行下载frp
wget https://github.com/fatedier/frp/releases/download/v0.33.0/frp_0.33.0_linux_amd64.tar.gz
2.2 frp文件解压
解压frp_0.33.0_linux_amd64.tar.gz文件
tar -zvxf frp_0.33.0_linux_amd64.tar.gz
解压之后目录结构如下
复制文件夹并改名为frp,方便使用
cp -r frp_0.33.0_linux_amd64 frp
当前vpnc目录下文件结构
2.3 删除冗余文件
cd frp
删除与frp客户端无关的文件 frps
frps.ini
frps_full.ini
rm -rf frps frps.ini frps_full.ini
删除后frp目录如下所示
2.4 配置frpc.ini文件
vim frpc.ini
frpc.ini默认是这样的
[common]
server_addr = 127.0.0.1
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
修改server_addr为frp服务端ip
server_addr = 106.55.123.123
添加toke口令和frp服务端的token口令一致
token = 12345678
复制内容,添加到文件末尾
[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 7001
heartbeat_timeout = 60
更改后frpc.ini文件内容如下
[common]
server_addr = 106.55.123.123
server_port = 7000
token = 12345678
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
heartbeat_timeout = 60
[rdp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 7001
heartbeat_timeout = 60
注意: [ssh] [rdp] 这种头不能重名
文件各个参数说明:
[common]
# server_addr 表示frp服务端的ip地址
server_addr = 106.55.123.123
# 表示frp服务端的bind_port 7000
server_port = 7000
# token 口令 frp服务端客户端需要一致
token = 12345678
[ssh]
# 连接类型 一般都是tcp
type = tcp
# frp客户端ip地址 写127.0.0.1或者222.200.123.123 都可以
local_ip = 127.0.0.1
# 表示frp客户端的22端口号和frp服务的6000端口号相对应
# 如果需要使用ssh服务frp客户端需要开放22端口,同时frp服务端需要开放6000端口
local_port = 22
remote_port = 6000
# 心跳连接: 建议配置, frp 0.43.0版本如果不加,60秒就会自动断开连接!
# frp服务端就加这一条,frp客户端每个服务都要加。
heartbeat_timeout = 60
[rdp]
# 连接类型 一般都是tcp
type = tcp
# frp客户端ip地址 写127.0.0.1或者222.200.123.123 都可以
local_ip = 127.0.0.1
# 表示frp客户端的3389端口号和frp服务的7001端口号相对应
# 如果需要使用rdp服务,frp客户端需要开放3389端口,同时frp服务端需要开放7001端口
local_port = 3389
remote_port = 7001
# 心跳连接: 建议配置, frp 0.43.0版本如果不加,60秒就会自动断开连接!
# frp服务端就加这一条,frp客户端每个服务都要加。
heartbeat_timeout = 60
2.5 防火墙开放端口
防火墙相关操作: https://blog.csdn.net/qq_45056135/article/details/128172916
查看当前开放的端口
firewall-cmd --zone=public --list-ports
将7000, 7500, 6000, 7001端口开放
开放 7000 端口(frp客户端和frps服务端建立连接)
firewall-cmd --zone=public --add-port=7000/tcp --permanent
开放22端口(用户建立ssh连接)
firewall-cmd --zone=public --add-port=22/tcp --permanent
开放3389端口(用户建立rdp连接)
firewall-cmd --zone=public --add-port=3389/tcp --permanent
使其立即生效
firewall-cmd --reload
检查是否成功开启
firewall-cmd --zone=public --list-ports
如下表示成功开启7000, 3389, 22端口
2.6 运行frps客户端
注意: 运行客户端之前一定要保证frp服务端是开启的
运行frps客户端
./frpc -c frpc.ini
如下所示一直在等待的情况说明内frp服务端
和frp客户端
建立连接成功(可能是配置问题,或者是防火墙的问题)
如下图所示表示frp服务端
和frp客户端
建立连接成功
到了这里基本上就差不多成功了
服务端和客户端配置文件的对应关系
如果我们需要修改bind_port等参数,服务端和客户端的值对应即可
注意: 修改完端口参数之后要开放相应的防火墙端口!!!
1,2步配置成功说明frp服务端
和frp客户端
已经建立了连接
通过刚刚的配置
本地主机连接公网: 106.55.123.123:6000
等价于连接 222.200.123.123:22
本地主机连接公网: 106.55.123.123:7001
等价于连接 222.200.123.123:3389
这里的本地主机可以是任意主机,只要可以连接公网即可!!!
3. 本地主机(第三台主机)连接服务器
以SSH
服务为例: 本地主机需要连接内网服务器的ssh服务之前是连接222.200.123.123
的22端口,现在只要通过连接106.55.123.123
的6000端口即可
我这里是使用xshell连接服务器主机222.200.123.123
的22
端口
注意: 利用本地主机连接公网时 (必须保证frp服务端和客户端都是开启状态, 而且是成功开启的, 稍后我们会讲解如何后台运行)
3.1 设置连接信息
我们通过连接frp服务端的106.55.123.123
的6000端口即可访问
222.200.123.123
的22端口
3.2 设置用户名信息
这里是frp客户端
的用户名和密码
这里是frp客户端
的用户名和密码
这里是frp客户端
的用户名和密码
如下图所示表示成功访问服务器主机: (内网穿透成功)
4. frp 客户端服务端放在后台运行
在进行后台运行之前最好是证明你前面三步都是成功的,不建议一开始就后台运行,因为这样如果出现问题比较难发现
4.1 开启服务端后台运行
frp服务端后台运行(按Ctrl+C
退出后会依然运行)
nohup ./frps -c frps.ini &
查看是否运行成功
ps -ef | grep frp
如下所示表示服务端后台运行成功
同时frp目录下会多一个nohup.out文件
关闭后台运行(查到到frps进程号关闭即可)
kill -9 12096
4.2 开启客户端后台运行
frp客户端后台运行(按Ctrl+C
退出后会依然运行)
nohup ./frpc -c frpc.ini &
如下所示表示frp客户端后台成功运行
同时frp目录下会多一个nohup.out文件
关闭后台运行(查到到frpc进程号关闭即可)
kill -9 15166
5. PyChram
如果你使用pychram连接,同理
将以前的222.200.123.123的22端口(私网)
改为106.55.123.123的6000端口即可(公网)
如果你还遇到其他问题可以参考以下博客
参考博客:
博客1(推荐): https://sspai.com/post/52523
博客2: https://blog.csdn.net/qq_36981760/article/details/115713179
博客3: https://blog.csdn.net/qq_36981760/article/details/115713179
参考视频
(推荐,比较详细): https://www.bilibili.com/video/BV1p94y1y7ft/
本人水平有限,如有错误欢迎指正交流!!!