frp做内网穿透(主机CenOS客户端是Mac)

解决什么问题?

后台开发,需要debug。但是客户端访问的是域名,如何把在服务器上的域名(IP端口)映射到本地端口上?
这样的话,就很爽了。服务器上出现了问题,本地直接跑,直接就debug到信息了。

使用工具

使用开源frp frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
Github地址

需要下载的文件

如图所示,我是mac和linux服务器端,所以下载压缩文件后即可。

Nginx配置

server {
        listen       80;
        server_name domain.com; #自己的域名
        location / {
       proxy_pass http://127.0.0.1:30011; #记住这个端口,这是frpc映射过来的
                proxy_connect_timeout 30s;
                proxy_send_timeout   90;
                proxy_read_timeout   90;
                proxy_buffer_size    32k;
                proxy_buffers     4 32k;
                proxy_busy_buffers_size 64k;
                proxy_redirect     off;
                proxy_hide_header  Vary;
                proxy_set_header   Accept-Encoding '';
                proxy_set_header   Host   $host;
                proxy_set_header   Referer $http_referer;
                proxy_set_header   Cookie $http_cookie;
                proxy_set_header   X-Real-IP  $remote_addr;
        }
}

Server具体配置

把frp_0.35.1_linux_386.tar.gz上传至Linux服务器

创建文件夹并且解压缩
mkdir frps
tar  xzvf  frp_0.35.1_linux_386.tar.gz
mv  frp_0.35.1_linux_386  frps
配置Frps.ini文件
[common]
#内网穿透服务器监听的IP地址,可以省略,默认为127.0.0.1
bind_addr = 0.0.0.0
#服务器端监听的端口,默认是7000,自定义
bind_port = 7001
#token是用于安全验证,不加会导致任何机器穿透一定要加一个自己才知道的。
token = aaabbbccc

配置成系统服务

新建一个文件,名称是 auto_start.sh 放在frps目录下
里面的内容如下: 具体含义就是启动后台执行,这样关闭操作窗口后服务依旧存在

#!/usr/bin/env bash
nohup /root/frps/frps -c /root/frps/frps.ini &

接下来配置成系统服务,首先切换到这个目录下

cd /usr/lib/systemd/system

然后新建一个文件frps.service,内容如下,注意ExecStart换成自己的路径

[Unit]
Description=frps
After=syslog.target network.target remote-fs.target nss-lookup.target
 
[Service]
Type=forking
ExecStart=/root/frps/auto_start.sh
ExecStop=/bin/kill -s QUIT $MAINPID
ExecReload=/bin/kill -s HUP $MAINPID
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target

然后执行命令

systemctl daemon-reload

此时查看frps状态和启动停止都可以操作了

systemctl start frps
systemctl status frps
systemctl stop frps

如果要把它设置成开机启动可以这样

设置开机启动
systemctl enable frps
关闭开机启动
systemctl disable frps

以上就实现了frp的Server端启动

Client端具体配置

来到自己的Mac电脑上,解压到任意目录下即可,然后切换到frp的目录下。
打开frpc.init配置信息如下:

[common]
#外网-服务器端ip 自己服务器的ip
server_addr = x.xxx.xx.xx  
#外网-服务器端监听的端口(必须与Frps.ini中的配置一致)
server_port = 7001
#token要和服务器上保持一致
token = aaabbbccc

[remote_uu]
type = tcp
local_ip = 127.0.0.1
#本地开的端口
local_port = 8081
#frpc映射成的远端端口
remote_port = 30011

设置完后,要记得把端口7001打开。我用的是阿里云,我在安全组里设置一下入方向即可。默认所有出的方向是全部。

image.png

客户端启动命令

 ./frpc -c frpc.ini

再来看下现在frps现在监听的端口

netstat -npltu | grep frps
tcp6       0      0 :::7001                 :::*                    LISTEN      25224/frps          
tcp6       0      0 :::30011                :::*                    LISTEN      25224/frps 

可以看到30011端口也开了,就是本地frpc映射到服务器上的30011端口
之后进行测试吧~!访问远端的域名就可以了!
最后简单画一下整个过程。


frp内网穿透流程

推荐阅读更多精彩内容