frp实现内网穿透

一、frp的作用

frp的作用就是实现内网穿透,内网穿透就是允许内网的主机能够被外网的其他主机访问,内网穿透是反向代理技术中的一个中间环节技术。对于反向代理的更多理解可见另外一文《关于代理技术的理解》

  1. 利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。说罢,也就是给外网提供内网主机的http 或 https 服务。

  2. 此外,还能利用处于内网或防火墙后的机器,对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。

此处的讲解包括:

  1. 外网访问内网http 或 https 服务
  2. 外网访问内网ssh服务

二、配置说明

1、实现功能

(1)自定义绑定域名访问内网web服务

2、配置前准备

(1)公网服务器1台
(2)内网服务器1台
(3)公网服务器绑定域名1个
(4)内网服务器部署一个web服务
(5)内网服务器部署安装了ssh服务(如只做web服务,可以省略此步)

三、安装frp

1.通过以下命令下载frp

1
$ wget https://github.com/fatedier/frp/releases/download/v0.16.1/frp_0.16.1_linux_amd64.tar.gz

2.解压文件

1
$ tar -zxvf frp_0.16.1_linux_amd64.tar.gz

3.进入解压目录

1
$ cd frp_0.16.1_linux_amd64

frpsfrps.ini这个两个是服务端文件,frpcfrpc.ini这两个是客户端文件

4.配置服务端

1
2
3
4
5
6
7
8
$ vi ./frps.ini
[common]
#与客户端绑定的进行通信的端口
bind_port = 7000
#访问客户端web服务http协议自定义的端口号,如果公网服务器已经搭建占用8080端口的web服务,请自行修改
vhost_http_port = 8080
#访问客户端web服务https协议自定义的端口号,如果公网服务器已经搭建占用443端口的web服务,请自行修改
vhost_https_port = 443

按”i”键进行编辑,按esc退出编辑状态,输入:wq退出

四、公网服务器开启端口

1
$ firewall-cmd --state #查看当前firewall防火墙服务是否开启

如果防护墙处于关闭状态的话无需进行以下端口号的开放步骤,否则继续。

1
$ firewall-cmd --list-all  #查看当前firewall服务所有端口开放情况

如果7000端口和8080端口已经开放并且没有进程占用端口的话,则无需进行以下端口号的开放步骤,否则继续。

1
$ firewall-cmd --permanent --add-port=7000/tcp  #开启与客户端绑定的进行通信的端口
1
$ firewall-cmd --permanent --add-port=8080/tcp #开启访问客户端web服务自定义的端口号
1
$ firewall-cmd --reload   #重启防火墙(修改配置后要重启防火墙)

五、启动服务端

临时启动

1
$ ./frps -c ./frps.ini

后台保持启动

1
$ nohup ./frps -c ./frps.ini &

六、配置客户端

根据客户端操作系统的情况下载frp客户端

需要注意的是:客户端和服务端的版本号要一致

不同操作系统操作大同小异。以linux为例:

1
$ vi ./frpc.ini #编辑frpc.ini配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[common]
#公网服务器ip
server_addr = 144.34.145.10
#与服务端bind_port一致
server_port = 7000


#公网访问内部web服务器以http方式
[web]
#访问协议
type = http
#内网服务器ip,同一内网下的任何主机都可以
local_ip = 127.0.0.1
#内网web服务的端口号
local_port = 80
#访问公网服务器域名,需要解析qcmoke.top域名到144.34.145.10
custom_domains = qcmoke.top


#公网通过ssh访问内网主机(可选,如果不需要可以通过井号注释掉)
[ssh]
type = tcp
#内网服务器ip,同一内网下的任何主机都可以
#local_ip = 127.0.0.1
local_ip = 192.168.222.131
#内网ssh端口
local_port = 22
#公网服务器开放的处理ssh转发的端口,要确保服务器开放
remote_port = 7001

通过以下命令给服务器开放7001端口

1
2
# firewall-cmd --permanent --add-port=7001/tcp
# firewall-cmd --reload

所绑定的公网服务器域名,一级、二级域名都可以,绑定多个域名时用英文“,”分开

六、启动客户端(内网端)

临时启动

1
$ ./frpc -c ./frpc.ini

后台保持启动

1
$ nohup ./frpc -c ./frpc.ini &

Windows操作系统完成以上类似配置后直接双击运行frpc.exe即可。

如果需要通过ssh访问内网端,则内网端主机还要安装ssh服务,这里的ssh以ubuntu为例:

  • SSH服务端安装

    (1) ubuntu关闭防火墙sudo ufw disable或者放行ssh默认的22端口(关闭防火墙不同linux发行版可能不同)

    (2)查看是否安装ssh, ls /etc/ssh/

    (3)安装openssh-serversudo apt-get install openssh-server

    (4)还没结束,执行sudo vim /etc/ssh/sshd_config编辑sshd_config配置文件,找到 PermitRootLogin并将其值修改为 yes

    (5)执行/etc/init.d/ssh restart重启ssh服务以生效

七、测试http和ssh

  • http:

    浏览器打开访问http://域名:8080/资源路径,如:http://qcmoke.top:8080/myproject/index.html

  • ssh:

    1
    2
    3
    4
    5
      ssh [-p port] user@remote   #ssh远程连接服务器
    如:
    $ ssh -p 7001 root@144.34.145.10
    或者
    $ ssh -p 7001 root@qcmoke.top

1546544526817



----------- 本文结束 -----------




如果你觉得我的文章对你有帮助,你可以打赏我哦~
0%