frp 内网穿透和反向代理

Frp 内网穿透和反向代理

frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。

frp github地址: https://github.com/fatedier/frp

使用条件

  1. 需要一台公网服务器(阿里云,vultr …)
  2. 在公网服务能够开放端口

frp 下载

githup Release 页面下载最新版本的程序。
下载frp

服务端安装

阿里云服务器安装服务端

1
2
3
4
5
6
7
# 我的阿里云服务器为 Centos7 系统
wget https://github.com/fatedier/frp/releases/download/v0.27.1/frp_0.27.1_linux_amd64.tar.gz

# 解压软件
tar -xzvf frp_0.27.1_linux_amd64.tar.gz
# 移动到 /usr/local 目录(可选)
mv frp_0.27.1_linux_amd64 /usr/local/frp
  • 安装结果如图:
    frp 安装结果

启动服务端

前台启动(当退出终端服务停止)
1
./frps -c frps.ini
  • 启动结果如图:
后台启动
1
sudo nohup ./frps -c frps.ini &
  • 程序在后端启动, 输出日志在nohup.out中
以系统服务方式启动(推荐)

添加systemd配置文件

1
vim /usr/lib/systemd/system/frp.service

文件内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=simple
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=process
PrivateTmp=true
StandardOutput=syslog
StandardError=inherit

[Install]
WantedBy=multi-user.target

ExecStart的内容请根据自己frp安装目录修改。

设置开机启动

1
2
systemctl daemon-reload
systemctl enable frp

启动frp

1
systemctl start frp

查看启动状态:

1
sudo ps aux  | grep frp

  • 状态如下

开放防火墙端口

1
2
3
4
5
6
# 添加frp 7000端口
firewall-cmd --zone=public --add-port=7000/tcp --permanent
# 添加客户端使用7001端口
firewall-cmd --zone=public --add-port=7001/tcp --permanent

firewall-cmd --reload

开放阿里云安全组(7000, 7001)端口

客户端使用

在windows客户端使用

下载服务端对应的版本

在Linux客户端使用

  • 下载服务端对应的版本
  • 代理公司内部的服务器,使用远程客户端连接
  • frpc 供客户端使用

编辑 /usr/local/frp/fprc.ini

1
vim /usr/local/frp/frpc.ini

修改以下内容

1
2
3
4
5
6
7
8
9
[common]
server_addr = xxx.xxx.xxx.xxx # 你的服务器公网ip
server_port = 7000 # frps 监听端口号

[ssh] # 名称使用同一个客户端时, 名称必须唯一
type = tcp
local_ip = 127.0.0.1 # 本地ip或者局域网ip
local_port = 22 # 端口号
remote_port = 7001 # 公网端口号,会在公网服务器开启对应端口

启动客户端

1
nohup ./frpc -c frpc.ini &

也可以采用其他方式启动, 请查看服务端启动方式