FRP内网穿透搭建
2023-10-24 16:06:32

Intro

FRP(Fast Reverse Proxy)是Go语言开发的一款免费开源的用于内网穿透的反向代理工具,支持TCP、UDP、HTTP、HTTPS等协议。

项目官网👉https://github.com/fatedier/frp

工作原理:

  • 服务端有公网IP,监听一个主端口X,等待客户端连接
  • 客户端连接到服务端的主端口X,告诉服务端要监听的端口和转发类型
  • 服务端fork新进程监听客户端指定的端口Y
  • 外网用户连接到服务端的端口Y,服务端通过和客户端的连接将数据转发给客户端
  • 客户端进程再将数据转发到本地服务,从而实现内外对外网暴露服务的能力

下面的配置基于我本机虚拟机Kali作为客户端,我的VPS作为服务端

Config

Server Side

  1. 下载frp压缩包
1
wget https://github.com/fatedier/frp/releases/download/v0.51.3/frp_0.51.3_linux_amd64.tar.gz
  1. 解压frp压缩包
1
tar -zxvf frp_0.51.3_linux_amd64.tar.gz
  1. 修改配置文件
1
2
cd frp_0.51.3_linux_amd64
vim frps.ini
1
2
3
4
5
6
7
8
9
10
11
12
13
[common]
bind_port = 7000
bind_addr = 0.0.0.0
token = 123456

dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = pwd
enable_prometheus = true

log_file = /var/log/frps.log
log_level = info
log_max_days = 3
  • bind_port: frp监听的端口,默认7000
  • token:授权码,客户端会用到
  • dashboard_port:frp管理后台的端口
  • enable_prometheus:http://{dashboard_addr}/metrics可以获取到Prometheus的监控数据
  1. 设置和启动frp服务
1
2
3
4
mkdir -p /etc/frp
cp frps.ini /etc/frp
cp frps /usr/bin
vim /lib/systemd/system/frps.service

/lib/systemd/system/frps.service填入如下内容

1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=frp server
After=network.target

[Service]
Type=simple

ExecStart=/usr/bin/frps -c /etc/frp/frps.ini
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID

[Install]
WantedBy=multi-user.target
  • systemctl start frps 启动frps

  • systemctl status frps 查看frps状态

  • systemctl restart frps 重启frps

  • systemctl stop frps 停止frps

访问管理员页面验证是否启动成功

image-20230924175621099

Client Side

客户端的配置和服务端的类似,不过是把frps改成frpc

1
vim frpc.ini
1
2
3
4
5
6
7
8
9
10
[common]
server_addr = vps_ip
server_port = 7000
token = 123456

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
  • server_addr:服务端ip
  • server_port:服务端监听的主端口
  • token:与frps.ini中token一致

ssh

设置ssh连接

1
vim /etc/ssh/sshd_config

修改两条配置,取消注释

1
2
PermitRootLogin yes
PubkeyAuthentication yes

重启ssh服务

1
/etc/init.d/ssh restart

生成ssh密钥对,并将公钥添加到authorized_keys

1
2
3
ssh-keygen
cat id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

本机测试连接

image-20230924181938325

现在通过frp连接,客户端启动frp

1
./frpc -c frpc.ini

image-20230924182311515

连接成功!(注意这里的连接ip和连接端口)

image-20230924182513978

frp控制台同样可以看到连接情况

image-20230924182703110

http

需要服务端的配置增加一个vhost_http_port字段,外网通过这个端口访问

1
vhost_http_port = 8081

客户端配置:

1
2
3
4
5
[http1]
type = http
local_ip = 127.0.0.1
local_port = 8080
custom_domains = vps_ip

这里的local_ip可以换成内网的其他ip,比如我的宿主机ip 192.168.92.1

随便开一个Flask应用

image-20230924192243996

image-20230924193842031

访问http://vps_ip:8081/,成功返回

socks

若想通过nc连接,得配置socks代理。

客户端配置:remote_port为服务端TCP监听的端口

1
2
3
4
[socks]
type = tcp
plugin = socks5
remote_port = 5000

kali上配置proxychains

1
vim /etc/proxychains.conf

填上服务端ip和监听端口5000

image-20230924203119952

这时候就可以用nc去连接内网了。

1
proxychains nc 192.168.92.1 7777

泰裤辣!

Ref

https://cloud.tencent.com/developer/article/1837482

https://blog.csdn.net/qq_29566629/article/details/123208471

Prev
2023-10-24 16:06:32
Next