由于做毕设需要接入支付宝支付,但是需要一个外网可以访问的公网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
里面可能只有一行配置:
[common]
bind_port = 7000
但我们需要配出如下格式的配置:如何使用vim编辑请参考:vim命令
[common]
bind_port = 7000
dashboard_port = 7500
token = 12345678
dashboard_user = admin
dashboard_pwd = admin
vhost_http_port = 10080
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
输出以下日志,说明启动成功
2019/01/12 15:22:39 [I] [service.go:130] frps tcp listen on 0.0.0.0:7000
2019/01/12 15:22:39 [I] [service.go:216] Dashboard listen on 0.0.0.0:7500
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文件
编辑成一下格式:
[common]
server_addr = 1.2.3.4
server_port = 7000
token = 12345678
[localhost]
type = tcp
local_ip = 127.0.0.1
local_port = 80
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
输出以下内容说明成功
PS C:\SoftWare\内网穿透frp客户端\frp> ./frpc -c frpc.ini
2020/03/12 14:00:24 [I] [service.go:257] [801a2285e51d244d] login to server success, get run id [801a2285e51d244d], server udp port [0]
2020/03/12 14:00:24 [I] [proxy_manager.go:144] [801a2285e51d244d] proxy added: [localhost]
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)
然后启动就可以了。(启动命令如上)