使用frp进行内网穿透

前言

《使用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。

7、设置开机自启动
vim /etc/rc.local,在exit 0之前添加:

1
nohup /opt/frp/frps -c /opt/frp/frps.ini &

其中nohup可以省略。

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端口提供服务。

6、测试访问
在浏览器访问 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,顺利连接。

7、设置开机自启动
vim /etc/rc.local,在exit 0之前添加:

1
nohup /opt/frp/frpc -c /opt/frp/frpc.ini &

其中nohup可以省略。

结语

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

0%