key word: 内网穿透 公网链接 远程ssh链接 远程frpc 远程桌面 网络隧道
应用场景
我们使用ssh链接实验室的机器的时候,一般在实验室内部使用的同一个局域网连接,一般使用的是192.168.xx.xx的网络,但是如果我们在家里,使用的家里的网络也想连接实验室的机器的话,那么就需要一个tcp的转接服务器才可以。frpc就是这样一个免费的转接服务器,他使用自己的域名,转发tcp或者http请求,使得我们可以链接到实验室内部的机器的指定的端口的程序。
【当然不限于ssh,它只是转发端口的请求,重要的是绑定的端口号。】比如说
- 在windows上绑定3306端口,那么就可以实现windows的远程桌面程序,在家里就可以远程实验室机器的图形界面…再也不用担心todesk奇葩的网速了
- 绑定tensorBoard的发射端口6006,那么在家里就可以浏览炼丹的最新进度
- … 3389
准备工具
OpenFRPC:https://console.openfrp.net/login 这个优点是网速更快,缺点是不稳定,本文以这个举例说明。
还有其他的免费工具,比如花生壳、cpolar、神卓互联等等
构建步骤
注册账号
在OpenFrp 5.0注册,一般需要实名认证
创建隧道
这里的本地地址填入127.0.0.1,本地端口如果是ssh就用22,如果是远程桌面就是3389,远程端口一般都是随机。
下载登录器程序
这个程序下载到需要转发ssh端口的服务器上
配置和启用转发程序
本质上启动的时候是: frpc程序 + 一个配置文件 =就可以启动一个隧道,推送指定端口的tcp请求
Windows
- Windows平台可以下载那个win启动器,这个启动器是包含登录和frpc功能的一个ui式exe程序,下载完毕之后直接安装,然后登录OpenFRPC的账号密码,在程序内部直接启动,frpc隧道就可以了。
- 当然也可以直接下frpc启动器,对应的是windows系统的那个标签下的下载文件,这个文件本意上是需要用户设置服务程序的。大致步骤其实和Linux机器的差不多。
Linux机器【举例】
- 下载程序文件到机器上
这是我自己的机器上下载好的**/usr/local/bin/frpc_linux_amd64**启动器,注意给定的可以执行权限,chmod 777 frpc_linux_amd64
frps是NetFRPC的启动器,后面跟着是它的配置文件。
- 每一隧道需要一个单独的配置文件,文件名可以随意起,我有多个隧道,所以有多个配置文件。
FrpcOpen.ini就是一个隧道的配置文件
- 获取配置文件
我们需要这里的配置文件,点击复制。
- 将这个配置文件中的内容复制进去,假如说你的配置文件是/usr/local/bin/FrpcOpen.ini。那么复制进去就会像这样
- 配置服务,可以让它开机启动
服务就是一个启动脚本,名字可以随意起,但是需要把文件创建在/etc/systemd/system目录下,我的服务是
/etc/systemd/system/FrpcOpen.service,下面是这个服务文件的内容,注意啊修改里面的启动文件路径和启动配置文件路径
[Unit]
# 服务名称,可自定义
Description = frpc_linux_amd64-server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart =/usr/local/bin/frpc_linux_amd64 -c /usr/local/bin/FrpcOpen.ini
[Install]
WantedBy = multi-user.target
5.启动隧道服务
sudo systemctl start frpc-ssh.service # 启动服务
sudo systemctl enable frpc-ssh.service # 让服务随着开机启动
sudo systemctl status frpc-ssh.service # 查看当前的服务状态
看到服务运行正常,启动器的输出无报错。就算是隧道启动成功。不成功,可能你需要回头检查检查哪里出错了。
#服务使用的命令样例
sudo systemctl start frpc-ssh.service # 启动frpc-ssh服务
sudo systemctl enable frpc-ssh.service #设置 frpc-ssh.service为开机启动
sudo systemctl status frpc-ssh.service # 查看服务启动状态和日志
sudo systemctl restart frpc-ssh.service # 重启服务
sudo systemctl stop frpc-ssh.service # 停止服务
设置定时重启
有可能FRPC的服务器会重新启动,就会导致服务断开连接,所以定时重启有一定用处。
sudo crontab -e
# 编辑内容如下, 为每天 4 点重启
0 4 * * * /sbin/reboot
sudo service frpc-ssh restart
使用
找到你刚才启动的隧道,查看这里的链接地址就可以实现ssh远程登录了
双击链接,即可复制到地址和端口号。就拿着这个进行远程登陆。
假如你获取到的是ganzho2645.of-7af251.shop:53659
,那么ganzho2645.of-7af251.shop就是地址,端口号是53659
此时你打开shell就可以实现远程链接了
#user_name是你目标机器的用户名,
#ganzho2645.of-7af251.shop 远程主机地址
#-p 53659 远程主机地址的端口号
#他会通过远程自动映射到你监听的实际端口
ssh user_name@ganzho2645.of-7af251.shop -p 53659
输入你目标机器的密码,即完成了ssh链接