frp内网穿透(实现外网对内网服务器的访问)

时间:2024-03-18 07:15:16

为何需要

随时随地访问服务器,而不受局域网的限制。

准备工作

1.自用机器A

2.具有公网IP的机器B

3.本地服务器C

本文以阿里云作为公网IP机器介绍。(其他云服务器也可,最低配置就行。)

frp内网穿透

1.配置具有公网IP的机器B

简单介绍下frp中几个文件:

  • frps
  • fprs.ini
  • frpc
  • frpc.ini

前两个文件(s结尾代表server)分别是服务端程序和服务端配置文件,后两个文件(c结尾代表client)分别是客户端程序和客户端配置文件。

这里下载你适合你服务器系统的frp软件,比如我用的是ubuntu20.04,所以我下载的是frp_0.35.1_linux_amd64.tar.gz。下载后在云端服务器进行解压缩:

tar -zxvf frp_0.35.1_linux_amd64.tar.gz

解压缩完,可以cd到frp文件夹ls -a查看有哪些文件。这里我们要编辑的文件是frps.ini(服务端配置文件),将其修改为:

[common]
bind_port = 7000 # frp服务的端口号,可以自己定
dashboard_port = 7500 # frp的web界面的端口号
dashboard_user = user # web界面的登陆账户,自己修改
dashboard_pwd = pass # web界面的登陆密码,自己修改
authentication_method = token
token = xxxxx # frp客户端连接时的密码,自己修改

注:自己操作时记得把注释去掉

保存配置后,使用该命令启动:

./frps -c ./frps.ini

在浏览器输入云服务器的公网ip:7500 即可访问到 frp的web管理界面:

如果不行,进入云服务器防火墙中开放一下端口:

image-20210125223133865

2.配置本地服务器C

和刚才一样下载对应版本的frp软件包,并进行解压。

tar -zxvf frp_0.35.1_linux_amd64.tar.gz

修改frpc.ini配置文件:

[common]
server_addr = xx.xx.xx.xx # 你的云服务器的公网ip
authentication_method = token
token = xxxxx # 刚刚配置的frp连接密码 
server_port = 7000 # 刚刚配置的frp服务端口

[ssh] # 名称自己定
type = tcp # 转发的协议类型
local_ip = 127.0.0.1
local_port = 22 # 本地应用端口号,,按照实际应用工作在本机的端口号填写即可。ubuntu默认是22.
remote_port = 6000 # 服务端开放的端口号,自己填写并记录即可。

注:自己操作时记得把注释去掉

保存配置后,使用该命令启动:

./frpc -c ./frpc.ini

3.通过自用机器A进行访问

在保持上面两个启动命令均成功执行的前提下,在机器A直接输入:

ssh -oPort=6000 test@x.x.x.x # test是你本地服务器C的用户名,x.x.x.x是你的公网IP地址。

至此,便可实现对本地服务器C的访问。

另外,如果你还想打开服务器C上的jupyter notebook并显示在机器A上,可以采用如下命令进行映射:

ssh -oPort=6000 -L 8000:localhost:8888 test@x.x.x.x

按正常步骤启动服务器C上的jupyter notebook后,在机器A打开浏览器输入http://localhost:8000/,并按要求输入token(token在终端可以看到)即可。

客户端(本地服务器C)自启动配置

frpc运行时始终有一个命令行窗口运行在前台,影响美观,而且每次都要自己启动也显得麻烦。因此我们可以手动添加一个开机自启动脚本

sudo vim /etc/systemd/system/frpc.service

修改成(注意路径的对应):

[Unit]
Description=frpc daemon
After=syslog.target  network.target
Wants=network.target

[Service]
Type=simple
ExecStart=/usr/bin/frp/frpc -c /etc/frp/frpc.ini # 这里修改为你自己的路径
RestartSec=1min # 若启动失败,1分钟后再次启动。
Restart= always # 总是重启
ExecStop=/usr/bin/killall frpc

[Install]
WantedBy=multi-user.target

然后执行以下命令启用脚本:

sudo systemctl enable frpc.service
sudo systemctl start frpc.service

通过下面的命令查看服务状态,如果是running的话就说明可以了:

sudo systemctl status frpc.service

参考

1.https://sspai.com/post/52523

2.https://zhuanlan.zhihu.com/p/336429888

3.https://github.com/fatedier/frp

4.https://github.com/fatedier/frp/issues/176