使用frp进行内网穿透

文章目录
  1. 1. 前言
  2. 2. 准备
  3. 3. 服务端配置
    1. 3.1. 安装frp
    2. 3.2. nginx反向代理
  4. 4. 客户端配置
    1. 4.1. windows
    2. 4.2. linux
  5. 5. 结语

前言

《使用lanproxy进行内网穿透》一文中,小编使用lanproxy搭建了一个内网穿透服务,并且介绍了使用方法。

但是,不知道最近出了什么幺蛾子,居然无法再提供内网穿透服务。本文,就研究一下另外一个内网穿透工具frp。主要参考frp内网穿透搭建,超级简单实用

准备

1、一台公网服务器(centos7,运行frp-server)。
2、一台内网pc或服务器(运行frp-client)。

服务端配置

安装frp

1、进入/opt目录
cd /opt

2、访问frp项目,下载最新版的frp,这里下载frp_0.21.0_linux_amd64.tar.gz(包含服务端和客户端)。
curl -C - -O -L https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_amd64.tar.gz

3、解压并重命名
tar -xzvf frp_0.21.0_linux_amd64.tar.gz

mv frp_0.21.0_linux_amd64 frp

4、编辑frps.ini
cd frp && vim frps.ini,参考frps_full.ini,修改如下:

1
2
3
4
5
6
7
8
9
[common]
bind_addr = 0.0.0.0
bind_port = 7000

dashboard_addr = 0.0.0.0
dashboard_port = 7500
dashboard_user = voidking
dashboard_pwd = voidking
token = 12345678

5、启动frps
./frps -c ./frps.ini

后台启动:screen ./frps -c ./frps.ini,然后ctrl+A+D。

6、测试访问
在浏览器访问 http://120.77.36.182:7500 ,输入用户名和密码,即可看到frp dashboard。

nginx反向代理

1、添加域名解析frp到公网ip。

2、在/etc/nginx/conf.d/目录中,添加frp.voidking.com.conf,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server {
listen 80;
server_name frp.voidking.com;
charset utf-8;
location /{
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 1024m;
client_body_buffer_size 128k;
client_body_temp_path data/client_body_temp;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
proxy_temp_path data/proxy_temp;

proxy_pass http://127.0.0.1:7500;
}
}

3、重启nginx
/usr/sbin/nginx -t,如果提示缺少目录,那么mkdir -p创建。

/usr/sbin/nginx -s reload

4、测试访问
访问 http://frp.voidking.com/ ,同样可以看到dashboard界面。

至此,服务端配置完成。

客户端配置

windows

1、访问frp项目,下载最新版的frp,这里下载frp_0.21.0_windows_amd64.zip(包含服务端和客户端)。

2、解压frp_0.21.0_windows_amd64.zip,并重命名为frp。

3、编辑frp/frpc.ini文件,修改为:

1
2
3
4
5
6
7
8
9
10
[common]
server_addr = 120.77.36.182
server_port = 7000
token = 12345678

[web_3480]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 3480

server_addr是服务器端的公网IP地址,server_port是frp服务端口号,auto_token是连接服务器的口令,必须和服务器保持一致。

web_3480是客户端和服务端之间的通道名,每个客户端必须不一样,remote_port是服务器端对外提供本机服务的端口号。

4、启动客户端
shift+右键,在此处打开powershell窗口,然后执行:
.\frpc.exe -c .\frpc.ini

5、本地启动web服务,在80端口提供服务。

5、测试访问
在浏览器访问 http://120.77.36.182:3480 ,即可看到本地80服务。

linux

1、进入/opt目录
cd /opt

2、访问frp项目,下载最新版的frp,这里下载frp_0.21.0_linux_amd64.tar.gz(包含服务端和客户端)。
curl -C - -O -L https://github.com/fatedier/frp/releases/download/v0.21.0/frp_0.21.0_linux_amd64.tar.gz

3、解压并重命名
tar -xzvf frp_0.21.0_linux_amd64.tar.gz

mv frp_0.21.0_linux_amd64 frp

4、编辑frps.ini
cd frp && vim frpc.ini,修改如下:

1
2
3
4
5
6
7
8
9
10
[common]
server_addr = 120.77.36.182
server_port = 7000
token = 12345678

[ssh_3422]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 3422

5、启动客户端
./frpc -c ./frpc.ini

6、测试登录
使用xshell连接本地服务器,IP填入120.77.36.182,端口填入3422,顺利连接。

结语

至此,大功告成,nice。frp和lanproxy相比,安装更加简便(不需要java环境),配置更加方便(客户端自己控制外网端口)。最重要的是,在使用centos7作为frp外网服务器的时候,不会出现无法代理22的问题。