为何需要
随时随地访问服务器,而不受局域网的限制。
准备工作
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管理界面:
如果不行,进入云服务器防火墙中开放一下端口:
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