1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 使用frp实现内网穿透(含SSH 远程桌面 文件访问等)

使用frp实现内网穿透(含SSH 远程桌面 文件访问等)

时间:2018-09-30 10:07:32

相关推荐

使用frp实现内网穿透(含SSH 远程桌面 文件访问等)

目录

一、遇到的问题二、材料三、步骤1. 服务器配置A. 部署Go语言环境B. 安装frpC. 开端口D. 通过Dashboard查看服务端连接情况2. 客户机α配置(需求1)A. 部署Go语言环境B. 安装frp3. 访问端配置(需求1)A. 文件访问B. 远程桌面连接4. 客户机β配置(需求2)5. 访问端配置(需求2)四、一些心得

一、遇到的问题

有一台闲置的阿里云服务器,想折♂腾Ta一下。老家(有IPv6地址但懒得申请公网IP)有一台捡来的、在跑Windows Server的NAS,想拿来跟爱人一起当个网盘用,需要能够远程桌面连接,且异地访问存在上面的文件,同时最好能分用户访问,毕竟有些东西不方便爱人看到(不是。此为需求1。大佬@lny161224需要在移动端设备上通过SSH访问位于家里(无IPv6且不方便申请公网IP)电脑上的Ubuntu虚拟机。此为需求2

二、材料

拥有公网IP的服务器一台(运行在CentOS 7.6下)。内网中的电脑,下称客户机α(需求1)和客户机β(需求2)。想要访问内网的电脑/移动设备,下称访问端

三、步骤

1. 服务器配置

A. 部署Go语言环境

下载安装包

进入Go官方网站,选择Linux标签,单击“Download Go for Linux”按钮下载安装包。

上传安装包

将安装包上传至服务器。此处我使用了Xshell附带的Xftp插件将安装包上传至/usr/local/下。

安装Golang组件

清除先前安装的Golang组件,并在root用户解压安装包。此处我解压到了/usr/local/go/目录。

rm -rf /usr/local/gocd /usr/localtar -xzf go1.16.2.linux-amd64.tar.gz

添加环境变量

添加/usr/local/go/bin至PATH环境变量。在/etc/profile的最后一行添加以下内容:

export PATH=$PATH:/usr/local/go/bin

使用以下命令应用环境变量更改:

. /etc/profile

查看Go版本号

使用以下命令验证安装情况:

go version

若成功显示Go当前版本,则部署成功。

go version go1.16.2 linux/amd64

B. 安装frp

下载安装包

进入frp的Release页面,下载与服务器处理器架构对应的安装包并解压。此处我选择了frp_0.36.2_linux_amd64.tar.gz

修改配置文件

安装包中同时包含了Linux下frp的服务端文件(frpsfrps.inifrps.service等)和客户端文件(frpcfrpc.inifrpc.service等)。通过修改frps.ini文件可以对frp服务端进行配置。此次配置,我开启了如下功能:

token权限认证,防止未被授权的客户端连接至服务端;

设置服务端监听UDP端口,用于辅助创建P2P连接;

启用Dashboard,用于监测服务端连接状态。

为此,我将frps.ini的内容修改如下:

[common]# 服务器监听端口bind_port = 7000# 权限认证的token值,可自定义token = HaoziJerry# 服务端监听UDP端口,用于辅助创建P2P连接bind_udp_port = 7000# 启用Dashboard监听的本地端口dashboard_port = 7500# dashboard 用户名密码,可自定义,如果不用需要主动设置为空dashboard_user = admindashboard_pwd = admin

另外,frp的官方文档中给出了多个示例,可以根据具体需求修改frps.ini文件。如果需要实现其他功能,可以参考frp服务端详细配置说明。

上传frp服务端文件

frpsfrps.ini文件上传至服务器。此处我上传到了/usr/local/frp/下。

启动frp服务端

通过以下命令启动frp服务端:

/usr/local/frp/frps -c /usr/local/frp/frps.ini

显示

/04/03 19:40:00 [I] [root.go:200] frps uses config file: /usr/local/frp/frps.ini/04/03 19:40:01 [I] [service.go:192] frps tcp listen on 0.0.0.0:7000/04/03 19:40:01 [I] [service.go:275] nat hole udp service listen on 0.0.0.0:7000/04/03 19:40:01 [I] [service.go:294] Dashboard listen on 0.0.0.0:7500/04/03 19:40:01 [I] [root.go:209] frps started successfully

即为启动成功。

若出现权限不足

Permission denied

可使用以下命令赋予文件夹执行权限:

chmod -R 744 /usr/local/frp

设置自启动

将安装包解压后还会生成一个systemd目录。修改其中frps.service文件[Service]下的ExecStart项,将其指向frps的实际上传目录:

ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini

注意:如果使用此方法启动 frps 服务,vhost_http_port 又想用 80 端口,需要将配置文件中的 User=nobody 注释或删除。

frps.service文件上传至服务器/etc/systemd/system/下,并设置frps服务开机启动:

sudo systemctl enable frps

其他命令:

启动frps服务:

sudo systemctl start frps

重启frps服务:

sudo systemctl restart frps

停止frps服务:

sudo systemctl stop frps

C. 开端口

配置完毕后,要记得到服务器的管理控制台开启以下端口:

TCP 7000:用于接收frp客户端的连接(与frps.ini中对应)。UDP 7000:用于辅助创建 P2P 连接(与frps.ini中对应)。TCP 7500:用于访问Dashboard(与frps.ini中对应)。连接客户机时其他需要用到的端口,根据客户端frpc.ini中的配置情况而定。此处我开了TCP 6001600222001

D. 通过Dashboard查看服务端连接情况

访问

http://服务器公网IP地址:7500

并输入在frps.ini中设定的用户名和密码后即可查看服务端的运行情况

右侧上方显示了今日的上下行流量情况,下方显示了不同协议代理的占比情况。点击左侧列表中的Proxies还可以按连接协议查看各个代理的详细信息和流量情况。

2. 客户机α配置(需求1)

A. 部署Go语言环境

下载安装包

通过客户机α进入Go官方网站,选择Windows标签,单击“Download Go for Windows”按钮下载安装包并安装。

查看Go版本号

打开命令提示符或PowerShell,使用以下命令验证安装情况:

go version

若成功显示Go当前版本,则部署成功。

go version go1.16.2 windows/amd64

B. 安装frp

下载安装包

通过客户机α进入frp的Release页面,下载与处理器架构对应的安装包并解压。此处我选择了frp_0.36.2_windows_amd64.zip

修改配置文件

安装包中同时包含了Windows下frp的服务端和客户端文件。通过修改frpc.ini文件可以对frp客户端进行配置。针对需求1,我开启了如下功能:

使用sTCP协议的远程桌面连接(需要在客户机α上开启远程桌面);

static_file插件提供的文件访问服务

为此,我将frpc.ini的内容修改如下:

[common]# 服务器的公网IP地址server_addr = xxx.xxx.xxx.xxx# 服务器监听端口server_port = 7000# 权限认证的token值,与frps.ini中相同token = HaoziJerry# 使用sTCP协议的远程桌面连接[secret_RD]type = stcp# 只有sk一致的用户才能访问到此服务,可以与token不同sk = HaoziJerry# 本地IP地址和对应服务端口local_ip = 127.0.0.1local_port = 3389# 文件访问服务1[static_file_Super]type = tcp# 要用到的服务器端口,记得去服务器管理控制台开启remote_port = 6001plugin = static_file# 要对外暴露的文件目录,需自定义plugin_local_path = D:\Share\Super# 访问路径名,此处即http://x.x.x.x:6001/super/plugin_strip_prefix = super# 用户名和密码plugin_http_user = superplugin_http_passwd = super# 文件访问服务2[static_file_Jerry]type = tcp# 要用到的服务器端口,记得去服务器管理控制台开启remote_port = 6002plugin = static_file# 要对外暴露的文件目录,需自定义plugin_local_path = D:\Share\Jerry# 访问路径名,此处即http://x.x.x.x:6001/jerry/plugin_strip_prefix = jerry# 用户名和密码plugin_http_user = jerryplugin_http_passwd = jerry

另外,frp的官方文档中给出了多个示例,可以根据具体需求修改frpc.ini文件。若要实现其他功能,可以参考frp客户端详细配置说明。

部署frp客户端文件

frpc.exefrpc.ini文件置于客户机α上的相同目录下。由于frpc.exe需要使用cmd运行,为了方便运行和设置自启动,可创建frpc.bat文件,内容如下:

当前目录名\frpc.exe

启动frp服务端

运行frpc.bat即可开启frp的客户端,会显示登录信息、代理名称和开启状态。

/04/03 19:57:05 [I] [service.go:304] [12417708010235e8] login to server success, get run id [12417708010235e8], server udp port [7000]/04/03 19:57:05 [I] [proxy_manager.go:144] [12417708010235e8] proxy added: [secret_RD static_file_Super static_file_Jerry]/04/03 19:57:05 [I] [control.go:180] [12417708010235e8] [static_file_Super] start proxy success/04/03 19:57:05 [I] [control.go:180] [12417708010235e8] [static_file_Jerry] start proxy success/04/03 19:57:05 [I] [control.go:180] [12417708010235e8] [secret_RD] start proxy success

设置自启动

frpc.bat放在如下目录

%ProgramData%\Microsoft\Windows\Start Menu\Programs\Startup

即可实现开机自动启动。

3. 访问端配置(需求1)

A. 文件访问

客户端A的文件访问服务使用了TCP协议,在此例中我只需直接访问

http://服务器公网IP地址:6001

并输入客户端A上frpc.ini里设置的用户名密码即可访问客户端A中D:\Share\Super目录下的文件了。访问另一位用户的目录同理,修改访问端口并输入对应的用户名密码即可。

B. 远程桌面连接

由于客户端A的远程桌面连接使用了sTCP协议,所以需要访问端安装frp客户端以使用远程桌面连接。总体步骤与客户机α配置基本相同(部署Go语言环境、安装frp),只需编辑访问端的frpc.ini即可:

[common]# 服务器的公网IP地址server_addr = xxx.xxx.xxx.xxx# 服务器监听端口server_port = 7000# 权限认证的token值,与frps.ini中相同token = HaoziJerry[secret_RD_visitor]type = stcp# sTCP的访问者role = visitor# 要访问的sTCP代理的名字和对应sk,需要与客户端A的frpc.ini中相同server_name = secret_RDsk = HaoziJerry# 绑定本地端口用于访问远程桌面服务,端口可自定义bind_addr = 127.0.0.1bind_port = 6000

之后运行frpc.bat。显示

/04/04 02:30:08 [I] [service.go:304] [5a090a52981acef7] login to server success, get run id [5a090a52981acef7], server udp port [7000]/04/04 02:30:08 [I] [visitor_manager.go:86] [5a090a52981acef7] start visitor success/04/04 02:30:08 [I] [visitor_manager.go:130] [5a090a52981acef7] visitor added: [secret_RD_visitor]

即为运行成功。此时,打开远程桌面连接,在“计算机”栏输入

127.0.0.1:6000

并点击连接,之后输入客户机α上的Windows账户名和密码即可建立远程桌面连接。

4. 客户机β配置(需求2)

写在前面:

由于客户机β是基于VMware建立的Ubuntu虚拟机,所以需要在VMware的虚拟网络管理器中对网络进行配置(此处我用了NAT模式),确保客户机能够连通网络。对新安装的Ubuntu系统,如果需要,记得设置允许root用户SSH登录

整体流程与在服务器上配置的步骤基本相同,只是配置和上传的文件改为了frp的客户端文件frpc.inifrpcfrpc.servicefrpc.ini配置如下:

[common]# 服务器的公网IP地址server_addr = xxx.xxx.xxx.xxx# 服务器监听端口server_port = 7000# 权限认证的token值,与frps.ini中相同token = HaoziJerry# 使用TCP协议的SSH连接[SSH]type = tcp# 本地IP地址和对应服务端口local_ip = 127.0.0.1local_port = 22# 要用到的服务器端口,记得去服务器管理控制台开启remote_port = 22001

另外,对Ubuntu系统(CentOS没遇到这个情况),在设置自启动时需要修改frpc.service的User项如下,否则无法开启自启动:

User=root

5. 访问端配置(需求2)

直接在各平台的SSH工具上访问

ssh -oPort=22001 root@服务器公网IP地址

即可通过SSH与客户机β建立连接。

四、一些心得

frp的部署的核心是编辑配置文件frpc.ini,可以根据需要任意增减代理的数量或修改代理的配置。frp拥有通过xTCP实现点对点内网穿透的功能,穿透传输不会受限于服务器带宽,但由于部署后我未能成功连接,所以没写进来,等更换网络环境后有机会再测试。需求1的解决方案并不完美,比如不能上传文件、在线看NAS上的电影视频会受限于服务器带宽而卡顿等,这些问题后续打算通过结合FTPFFmpeg等实现。我有使用手机访问远程桌面的需求,且手机部署frp不太方便,所以最终实装版本将远程桌面的连接方式改为了TCP。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。