FRP 内网穿透

    xiaoxiao2022-07-12  154


    一、简单说明

    frp 可以实现内网穿透,让内网 web 服务器对外网环境提供 http 或 https 服务,并且 frp 支持自定义域名绑定;frp 还可以让内网服务器对外网环境提供 tcp 和 udp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。

    frp 以 cs 架构为实现基础,要实现内网穿透,需要一个外网服务器作为 server 端(公网 ip 地址需要固定,以云服务器作为 server 端最好),内网服务器则作为 client 端。

     


    二、外网 ssh 访问内网服务器

     

    1.服务器准备

    server端: 云服务器一台, Centos7.6, 公网ip:47.112.208.161; client端: vmware搭建, Centos7.6, 内网ip:192.168.3.12;

     

    2.获取frp安装包

               frp 最新安装包可在 github 上获取,上面也有详细的使用教程,地址:https://github.com/fatedier/frp

     

    3.server 端安装

    解压安装包:

    [root@syztoo ~]# tar -zxvf frp_0.21.0_linux_amd64.tar.gz

    将安装包移动到 /usr/local 路径下(习惯):

    [root@syztoo ~]# mv frp_0.21.0_linux_amd64 /usr/local/frp

    查看目录下文件:

    [root@syztoo ~]# cd /usr/local/frp [root@syztoo frp]# ls frpc frpc_full.ini frpc.ini frps frps_full.ini frps.ini LICENSE

    server 端只会用到二进制启动文件 frps 和 配置文件 frps.ini,其余文件可删除,frps_full.ini 是 frps.ini 所有配置的参考文档;

    删除无关文件:

    [root@syztoo frp]# rm -rf frpc*

    编辑 frps.ini 文件:

    [common] bind_port = 7000 # 设置 server 端监听的端口;

    如果是云服务器,比如阿里云服务器,还需在 ESC 实例的安全组规则里面添加 7000 端口的访问;

    开启 frp 的 server 端:

    nohup ./frps -c frps.ini &

     

    4.client 端安装

    解压:

    [root@CentOs7 ~]# tar -zxvf frp_0.21.0_linux_amd64.tar.gz

    将安装包移动到 /usr/local 路径下(习惯):

    [root@CentOs7 ~]# mv frp_0.21.0_linux_amd64 /usr/local/frp

    client 端只会用到二进制启动文件 frpc 和 配置文件 frpc.ini,其余文件可删除,frpc_full.ini 是 frpc.ini 所有配置的参考文档;

    删除无关文件:

    [root@CentOs7 ~]# cd /usr/local/frp [root@CentOs7 frp]# rm -rf frps*

    编辑 frpc.ini 文件

    [common] server_addr = 47.112.208.161 # 此处填写 server 端公网ip; server_port = 7000 # 绑定 server 端监听的端口; [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000 # 设置 22 号端口的映射端口;

    在 ESC 实例的安全组规则里面添加 6000 端口的访问;

    开启 frp 服务的 client 端:

    [root@CentOs7 frp]# nohup ./frpc -c frpc.ini &

     

    5.测试外网访问内网服务器

    [root@oldtiaobj ~]# ssh root@47.112.208.161 -p 6000 The authenticity of host '[47.112.208.161]:6000 ([47.112.208.161]:6000)' can't be established. ECDSA key fingerprint is 60:19:1b:b0:0e:e0:9a:5a:f1:32:81:7d:0e:41:45:5e. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[47.112.208.161]:6000' (ECDSA) to the list of known hosts. root@47.112.208.161's password: Last login: Thu May 23 07:53:18 2019 from 192.168.3.15 [root@CentOs7 ~]#

    成功登录到内网服务器。说明:

    -p 6000 # 指定6000端口 root@47.112.208.161's password: # 这里输入内网服务器的密码

     


    三、将内网 http 服务映射到外网

     

    1. server 端配置

    编辑 frps.ini 文件:

    [common] bind_port = 7000 vhost_http_port = 10080 # 内网 http 服务映射到 server 端的端口;

    在 ESC 实例的安全组规则里面添加 10080 端口的访问;

    再次启动:

    [root@syztoo frp]# ps -ef | grep frps | awk 'NR<2{print $2}' | xargs kill -9 [root@syztoo frp]# nohup ./frps -c frps.ini &

     

     2.client 端配置

    已部署的 nginx 服务:

    编辑 frpc.ini 文件:

    [common] server_addr = 47.112.208.161 server_port = 7000 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 6000 [web] type = http local_ip = 127.0.0.1 local_port = 80 # 内网 web 服务器的端口号; custom_domains = syztoo.com # 公网服务器绑定的域名;

    再次启动:

    [root@CentOs7 frp]# ps -ef | grep frpc | awk 'NR<2{print $2}' | xargs kill -9 [root@CentOs7 frp]# nohup ./frpc -c frpc.ini &

    使用域名+映射的端口号访问 nginx 服务:

     


    四、常见错误说明

    [E] [control.go:236] authorization timeout [W] [control.go:113] login to server failed: authorization timeout authorization timeout

    上面错误出现的原因:client 端 和 server 端之间时间差超过了默认值。

    解决方式一:这个超时时间可以在配置文件中通过 authentication_timeout 这个参数来修改,单位为秒,默认值为 900,即 15 分钟,如果修改为 0,则 frps 将不对身份验证报文的时间戳进行超时校验;

    解决方式二:同步 server 端和 client 端的时钟;

     

     

     

     

    最新回复(0)