21491

frp内网穿透

frp介绍

frp是一个可用于内网穿透的高性能的反向代理应用,支持tcp、udp、http、https协议。

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

frp_1.png

如上图所示,内网主机由于没有外网IP,所以外网用户A是无法直接访问内网的主机的。这时候就需要借助外网主机部署frp服务端frps,并且在内网主机上部署frp客户端frpc,在外网主机与内网主机之间搭建一个桥梁,来实现外网用户访问内网主机的情况。

frp服务端配置

frp服务端也就是上图中的“外网主机”,这里我以外网主机是CentOS 7.3系统为例进行说明。

首先下载frp程序并解压至 /usr/local/frp 目录

编辑frps.ini文件

vi /usr/local/frp/frps.ini

写入以下内容,保存退出

[common]
bind_port = 7000 #这是frps服务绑定的端口

接下来创建frps服务启动文件

vi /usr/lib/systemd/system/frps.service

写入以下内容,保存退出

[Unit]
Description=frp 内网映射应用外网端服务(frps)
After=network.target

[Service]
Type=simple
User=nobody
Restart=always
RestartSec=5s
StartLimitInterval=0
ExecStart=/usr/local/frp/frps -c /usr/local/frp/frps.ini
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

更新系统服务

systemctl daemon-reload

启动frps服务

systemctl start frps

设置frps服务开机启动

systemctl enable frps

frp客户端配置

frp客户端也就是上图中的“内网主机”,这里我以内网主机是CentOS 7.3系统为例进行说明。

基本步骤跟frp服务端的配置方式一致,只是frp客户端需要编辑的文件是frpc.ini

我们还是把frp程序下载并解压至 /usr/local/frp 目录

vi /usr/local/frp/frpc.ini

写入以下内容,保存退出

[common]
server_addr = 0.0.0.0 #这里填外网主机(frps所在主机)的IP地址
server_port = 7000    #这里填frps绑定的端口

#若需要远程登录内网主机,可以配置如下的tcp协议
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22       #内网ssh的端口
remote_port = 6000    #外网通过该端口访问内网主机的ssh端口

#若需要通过外网访问内网主机,可以配置如下的http协议
[web]
type = http
local_port = 8000

更多协议的配置,请参见frp的Github地址。

接下来创建frpc服务启动文件

vi /usr/lib/systemd/system/frpc.service

写入以下内容,保存退出

[Unit]
Description=frp 内网映射应用内网端服务(frpc)
After=network.target

[Service]
Type=simple
User=nobody
Restart=always
RestartSec=5s
StartLimitInterval=0
ExecStart=/usr/local/frp/frpc -c /usr/local/frp/frp/frpc.ini
ExecReload=/usr/local/frp/frpc reload -c /usr/local/frp/frpc.ini
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

更新系统服务

systemctl daemon-reload

启动frps服务

systemctl start frpc

设置frpc服务开机启动

systemctl enable frpc

frp.png

frps和frpc均正确启动后,就打通了外网主机跟内网主机。这时候外网的用户就可以通过外网主机(frps)来访问内网主机(frpc)了。

文章作者:DOTATONG
发布日期:2017-11-07