frp内网穿透,从外网访问内网资源
0. 使用背景
- 校内实验室的电脑使用的是校园内网(10.x.x.x这种),在家里或旅游时无法访问实验室的机器(由于ipv4地址有限,因此没有公网ip),特别是疫情期间,待在家里,没办法使用实验室的电脑做实验。
- 使用frp内网穿透(github开源)可以解决这一痛点
- 原理简介:
(本教程仅支持ssh远程连接,关于远程桌面等可以另找资源)
1. 前提条件(我两台机器都是Linux)
- 【服务器端】一个公网ip:我申请的是腾讯云学生优惠的轻量应用服务器,带宽5M
- 【客户端】一台在内网的电脑
- 下载好上面连接中的frp工具,并解压(在一处下载即可,客户端或服务器端都可以;如果觉得往另一台机器传输麻烦,在客户端和服务器端都下载)
# 以下载在服务器端为例
$ wget https://github.com/fatedier/frp/releases/download/v0.29.1/frp_0.29.1_linux_amd64.tar.gz
$ tar xzvf frp_0.29.1_linux_amd64.tar.gz
$ mv frp_0.29.1_linux_amd64 frp
{以下命令均在root
下运行}
2. 配置服务器端(拥有公网ip的服务器)
$ cd frp
$ cp frps /usr/bin/
$ cp systemd/frps.service /usr/lib/systemd/system/
$ mkdir /etc/frp
$ cp frps.ini /etc/frp
$ vim /etc/frp/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
启动服务
# 设置开机启动
$ systemctl enable frps
# 启动服务
$ systemctl start frps
# 查看是否正常运行
$ systemctl status frps
浏览器中进入frp管理后台(假如你的公网IP为88.11.123.5)
# 浏览器中输入http://88.11.123.5:7500
# 账号和密码是上面设置的admin, admin
3. 配置客户端(内网实验室的PC)
$ cd frp
$ cp frpc /usr/bin/
$ cp systemd/frpc.service /lib/systemd/system/
$ mkdir /etc/frp
$ cp frpc.ini /etc/frp
$ vim /etc/frp/frpc.ini
修改内容如下
# 客户端配置(假如你的公网IP为88.11.123.5)
[common]
server_addr = 88.11.123.5
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连接的时候要用
# 配置http服务,可用于小程序开发、远程调试等(以下部分选填)
[web]
type = http
local_ip = 127.0.0.1
local_port = 8080
subdomain = test.hijk.pw # web域名
remote_port = 自定义的远程服务器端口,例如8080
启动服务
# 设置开机启动
$ systemctl enable frpc
# 启动服务
$ systemctl start frpc
# 查看是否正常运行
$ systemctl status frpc
4. 连接测试
- 前提:在云服务器控制台中的防火墙中开启上面设置的端口7000, 7500, 6000
- 测试:
$ ssh labpc@88.11.123.5 -p 6000
# labpc: 内网实验室的用户名 88.11.123.5:公网ip地址 6000:内网中与服务器建立映射的端口
- 使用:直接使用VS code的Remote SSH可以访问内网中的文件目录,这样写代码很方便
参考资料:https://blog.csdn.net/weixin_43922901/article/details/109261700