使用frp搭建内网穿透

由于做毕设需要接入支付宝支付,但是需要一个外网可以访问的公网ip来返回支付结果,由于我们平时的校园网和家庭网都是局域网,外网无法访问,又不可能将项目部署到服务器上进行调试,所以只能使用内网穿透,达到外网访问我们的本地服务。

目前有很多提供内网穿透的服务商,有免费的服务,但由于带宽限制,基本无法使用或者体验很差(毕竟白嫖还好用不可能的,心里要有13数),付费价格每个月也要十到几十块不等,而阿里云的学生机也才10块钱一个月,便准备自己搭建。

前提条件

1.有公网IP的服务器一台(我的是阿里云,系统centos8.0)

2.访问目标设备,即你需要外网访问到的设备(比如我的笔记本,我需要外网访问到我的localhost运行的项目)

3.热爱百度(当然也可以谷歌,360,搜狗【手动滑稽】),遇到问题要多查,因为每个人遇到的情况不一样

服务端

使用Xshell连接到你的服务器

输入一下命令查看处理器架构:

arch

基本是X86_64,那就选择amd64版本,

运行下列命令,下载对应版本

wget https://github.com/fatedier/frp/releases/download/v0.32.0/frp_0.32.0_linux_amd64.tar.gz

由于下载很慢,你也可以使用一些科学的方法下载到你的电脑上,再上传到服务器上。顺便可以下载客户端需要的版本,根据你自己的设备版本选择即可。

下载地址:https://github.com/fatedier/frp/releases/tag/v0.32.0

关于如何上传,这是我用的方法:

如何上传文件到Linux服务器

完成后解压文件

tar -zxvf frp_0.22.0_linux_amd64.tar.gz

给文件夹修改一个简单的名字,便于之后的操作:这里的frp就是修改的名字

cp -r frp_0.22.0_linux_amd64 frp

查看文件夹中的文件:

ls -a

会有如下几个文件:

frps

frps.ini

frps_full.ini

frpc

frpc.ini

frpc_full.ini

frps开头的是值服务端需要的,frpc开头的是指客户端需要的,这里我们是用作客户端,所以可以删除后三个文件。

删除命令:

rm frpc

依次删除后两个配置文件即可。

_full.ini文件是对配置的说明,里面的配置比较多,这里我们用不到。

然后修改frps.ini里的配置:

vim frps.ini

里面可能只有一行配置:

 
  1. [common]

  2. bind_port = 7000

 但我们需要配出如下格式的配置:如何使用vim编辑请参考:vim命令

 
  1. [common]

  2. bind_port = 7000

  3. dashboard_port = 7500

  4. token = 12345678

  5. dashboard_user = admin

  6. dashboard_pwd = admin

  7. vhost_http_port = 10080

  8. vhost_https_port = 10443

 关于参数的说明

“bind_port”表示用于客户端和服务端连接的端口,这个端口号我们之后在配置客户端的时候要用到。

“dashboard_port”是服务端仪表板的端口,若使用7500端口,在配置完成服务启动后可以通过浏览器访问 x.x.x.x:7500 (其中x.x.x.x为服务器的IP)查看frp服务运行信息。

“token”是用于客户端和服务端连接的口令,请自行设置并记录,稍后会用到。

“dashboard_user”和“dashboard_pwd”表示打开仪表板页面登录的用户名和密码,自行设置即可。

“vhost_http_port”和“vhost_https_port”用于反向代理HTTP主机时使用,因为不涉及HTTP协议,因而照抄或者删除这两条均可(我是直接没有配置)。

 到这里就配置完成了,可以启动我们的服务端了

./frps -c frps.ini

 输出以下日志,说明启动成功

 
  1. 2019/01/12 15:22:39 [I] [service.go:130] frps tcp listen on 0.0.0.0:7000

  2. 2019/01/12 15:22:39 [I] [service.go:216] Dashboard listen on 0.0.0.0:7500

  3. 2019/01/12 15:22:39 [I] [root.go:210] Start frps success

这时访问服务器ip:7500,使用自己设置的用户和密码登录,即可看到仪表盘界面

 但此时我们如果退出与服务器的连接或者Ctrl c退出当前命令,服务都会停止,所以我们需要将服务放在后台运行

Ctrl c然后输入以下命令

nohup ./frps -c frps.ini &

看到输出以下日志即为成功:

nohup: ignoring input and appending output to 'nohup.out'

然后就可以关闭ssh连接了。

客户端配置

解压之前下载的客户端文件,我的是windows10系统,以windows为例

解压之后可以删除frps开头的三个文件,留下frpc的文件,之前有说明,现在是配置客户端,所以需要frpc

用编辑器打开frpc.ini文件

编辑成一下格式:

 
  1. [common]

  2. server_addr = 1.2.3.4

  3. server_port = 7000

  4. token = 12345678

  5.  
  6. [localhost]

  7. type = tcp

  8. local_ip = 127.0.0.1

  9. local_port = 80

  10. remote_port = 8080

common里配置的是与服务端的连接信息

server_addr是你服务器的公网ip,server_port是连接的端口,如果前面没改的话那就是7000,token就是前面设置的口令token

下面的[localhost]是自己定义的规则,可以多个,localhost文字是可以自己改变的,便于区分不同的规则。

比如我现在项目部署在本地的80端口上面,所以local_port设置为80,我希望通过公网ip:8080来访问我的项目,那么remote_port设置为8080。同样的道理,可以使用不同的端口设置规则实现外网访问不同的服务。

然后保存。

接下来通过cmd命令进入客户端的文件夹。

以我的客户端路径为例

cd C:\SoftWare\内网穿透frp客户端\frp

然后执行

./frpc -c frpc.ini

输出以下内容说明成功

 
  1. PS C:\SoftWare\内网穿透frp客户端\frp> ./frpc -c frpc.ini

  2. 2020/03/12 14:00:24 [I] [service.go:257] [801a2285e51d244d] login to server success, get run id [801a2285e51d244d], server udp port [0]

  3. 2020/03/12 14:00:24 [I] [proxy_manager.go:144] [801a2285e51d244d] proxy added: [localhost]

  4. 2020/03/12 14:00:24 [I] [control.go:179] [801a2285e51d244d] [localhost] start proxy success

接下来启动本地的项目。

浏览器访问服务器的公网IP:你设置的端口。以我的为例,访问:公网IP:8080

成功访问我的项目。Nice!

参考文章:使用frp进行内网穿透-少数派

 

实战经验

下载

wget https://github.com/fatedier/frp/releases/download/v0.32.0/frp_0.32.0_linux_amd64.tar.gz

 

解压

tar -zxvf frp_0.22.0_linux_amd64.tar.gz

 

如果是服务器,就修改服务器的frps.ini(./frps -c frps.ini)

如果是客户端,就修改客户端的frpc.ini(./frps -c frps.ini)

 

然后启动就可以了。(启动命令如上)

 

你可能感兴趣的:(linux)