FRP实现内网穿透(建立个人服务器)

一、背景:

首先设想两个情景:

  1. 晚上回到宿舍后打开我的笔记本电脑远程连接我在实验室的台式机(性能高)跑程序。
  2. 我想在我本地电脑上搭建一个博客(localhost),不用上传到云服务器(阿里云或腾讯云)就能输入网址进行查看。

如果这两个设备同处一个内网,那么远程连接是没有任何难度的,但若第一个情景改为在家里远程连接公司里的设备,这就无法直接ssh实现了,除非你家在公司里同属一个内网。那么这时候就需要进行内网穿透


二、内网穿透

啥叫内网穿透??简单地说就是将内网端口映射到外网端口,这样通过外网端口就能远程连接到与其相连的内网了。简单原理图如下:
在这里插入图片描述
这里我们采用FRP内网穿透工具,这时图中的Internet就是服务端,公司电脑就是客户端。


三、FRP内网穿透工具

FRP可以实现上面的功能,具体来说可以实现:

  1. 外网通过ssh访问内网机器
  2. 自定义绑定域名访问内网web服务

那么需要以下准备:

  1. 公网服务器1台【作为服务端】(腾讯云Ubuntu环境的服务器,这个需要自己买)
  2. 内网服务器1台【作为客户端】(我这里演示的是windows环境,这个就是自己的电脑)
  3. 公网服务器绑定域名1个(实现“外网通过ssh访问内网机器”功能则不需要,而通过域名访问则必须绑定域名)

四、实现过程:

1. 安装frp:

在 https://github.com/fatedier/frp/releases 网站上下载相应的版本。
比如我的公网服务器为linux版本,则下载
在这里插入图片描述

而我的内网客户端是windows,所以下载
在这里插入图片描述

2. 配置frp:

分别解压后,分两步配置:
(1)公网服务器(Linux服务端):

解压后有如下文件:
在这里插入图片描述
因为是作为服务端,则需要修改 frps.ini 文件,输入命令:

sudo vim frps.ini

修改配置文件 frps.ini , 保存退出。

[common]
bind_port = 7000
#vhost_http_port = 8088
#仪表盘设置,若用户名和密码不填,则默认为admin。
dashboard_port = 7500 #仪表盘端口
dashboard_user = **** #仪表板的用户名,可选
dashboard_pwd = **** #密码,可选

然后输入命令进行服务器的后台运行:

nohup ./frps -c ./frps.ini &

在浏览器中输入:http:// [ 你的公网服务器ip ]:7500/static/#/,如出现如下图片,则服务器配置成功。
在这里插入图片描述
(2)内网服务器(windows客户端):

解压后有如下文件:
在这里插入图片描述
因为是作为客户端,所以只需要配置 frpc.ini 文件,使用notepad++打开:

[common]
server_addr = [你的公网服务器ip]
server_port = 7000 #此端口号与服务端配置的要一致
[ssh]
type = tcp #服务为tcp
local_ip = 127.0.0.1
local_port = 22 #本地的ssh端口
remote_port = 6000 #端口设置为6000

保存退出后,到解压的文件夹内,输入命令:

frpc -c frpc.ini

得到如下结果:
在这里插入图片描述
那么客户端应该配置好了。

这时若仪表盘有如下改变,则表示配置成功:
在这里插入图片描述
****

ssh远程连接

可以通过xshell或者其他远程控制连接软件,host ip为公网服务器ip,ssh端口为6000,用户名和密码为windows用户名和密码。
在这里插入图片描述

HTTP(Jupyter Notebook)访问

首先在服务端修改 frps.ini 文件,增加一行

vhost_http_port = 8088 #这是外网的端口,注意安全组中允许此端口打开

然后在客户端修改 frpc.ini 文件,增加如下

[Jupyter]
type = http
local_port = 8888 #本地服务端口
custom_domains = **** #这是云服务器需要绑定的域名,必需!

然后分别运行,即可发现在frps dashboard中新增如下连接:
在这里插入图片描述
注意我的本地8888端口就是Jupyter服务,所以当我在cmd中允许命令

jupyter notebook

开启jupyter服务,然后输入 " 域名:8088",发现:
在这里插入图片描述
查看cmd发现:
在这里插入图片描述
也就是说Jupyter 不允许外部进行打开,所以需要在配置文件jupyter_notebook_config.py中新增一行
在这里插入图片描述
保存后重启Jupyter服务后,再在浏览器中输入 " 域名:8088"后,便可以使用Jupyter啦!这样我就可以远程使用我实验室的高配台式机进行学习了。

在这里插入图片描述


问题

但会出现一些问题总结如下:
【问题一】公网云服务器未配置6000端口的安全组。
在相应云服务器运营商的控制台进行设置。
在这里插入图片描述
【问题二】客户端未开启ssh服务。
因为我此次设置的客户端环境是windows,所以ssh默认是未开的,这时需要安装OpenSSH。

在 https://github.com/PowerShell/Win32-OpenSSH/releases 下载相应版本。
在这里插入图片描述
然后根据 https://github.com/PowerShell/Win32-OpenSSH/wiki/Install-Win32-OpenSSH 官方文档进行下载和配置。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值