内网穿透系列之 Frp

597 阅读4分钟

内网穿透的需求背景

       我们需要通过外网访问内网服务时,由于内网没有对应的外网IP无法暴露服务,这时候需要搭建一个外网与内网互通的桥梁,使得我们可以访问内网的服务,这个桥梁我们可以称呼它为“内网穿透”。

内网穿透的技术可选方案

  目前内网穿透可选的技术实现方案有 Frp,Ngrok,Natapp,Spike,花生壳,Zerotier。

  其实现原理大同小异,核心就是构建一座“桥梁”。

  每种技术具体的实现原理在每个穿透技术实现上再讨论。

今天着重探讨一下Frp 的搭建与使用。

Frp 介绍

  • frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
  • frp 官网
  • frp Git  
  • frp 客服端与服务端下载

Frp原理及流程图

Frp 搭建准备

  •     准备至少两台服务器  系统为centos7.9(这就使用虚拟机模拟) 
  •     192.168.100.190  作为 frps【模拟外网服务器】
  •     192.168.100. 191 作为 frpc

  想要达到的效果是通过 190 登录 191 的ssh.

  1. 分别在190,191 上执行 

    mkdir /opt/softs && cd /opt/softs
    
  2.  分别在190,191 上执行  

    wget  https://github.com/fatedier/frp/releases/download/v0.45.0/frp_0.45.0_linux_386.tar.gz
    

   这一步如果出现 -bash: wget: command not found 异常 则先执行 

yum install -y wget

 再执行一次 

wget https://github.com/fatedier/frp/releases/download/v0.45.0/frp_0.45.0_linux_386.tar.gz

  3. 分别在190,191 上执行 

tar -xvf frp_0.45.0_linux_386.tar.gz &&  cd  frp_0.45.0_linux_386

  4. 执行 ll 命令 我们会看到如下目录

 5. 在190【外网服务器】上把 frps.ini 替换成如下配置 

[common]
# 当前frp服务器接受数据的IP 默认 0.0.0.0 接受服务器所有网卡IP数据
bind_addr=0.0.0.0
# 服务端与客服端通信端口 默认 7000 
bind_port = 5000
# frp 管理控制台
dashboard_addr = 0.0.0.0
dashboard_user = root
dashboard_pwd = 123456
dashboard_port = 5500

#  转发的服务端口
vhost_ssh_port = 2222
# 转发多个端口
vhost_tcp_port01 = 80
vhost_tcp_port02 = 443
# 心跳连接 必须有 单位秒  服务端与客服端都需要加,保持连接稳定
heartbeat_timeout = 30
# 日志保存时间
log_max_days = 365
#端口白名单,为了防止端口被滥用,可以手动指定允许哪些端口被使用
privilege_allow_ports = 1-6000

# token是frps与frpc通信凭证 如果frps配置了则frpc一定需要配置且与frps保持一致[可不配置]
token = tokensecret

  6.  执行 ./frps -c frps.ini &  如果看到下图信息表示服务端已经启动成功

   如果想要后台运行执行如下命令

nohup frps -c frps.ini >> frps.log 2>&1 &

 在浏览器中输入 http://192.168.100.190:5500/  可查看frps配置及其连接情况

ps: 如果访问不了 查看一下 防火墙是否开启

systemctl status firewalld

  如果防火墙状态为 Active: active (running) 执行如下命令关闭防火墙再访问。

systemctl stop firewalld && systemctl disable firewalld

7.在191上 配置frpc.ini  

[common]
#  frp 服务器的公网IP地址
server_addr = 192.168.100.190
# frp服务器的通信端口[与服务端配置要保持一致] 默认 7000
server_port = 5000
# token是frps与frpc通信凭证 如果frps配置了则frpc一定需要配置且与frps保持一致
token = tokensecret
# ssh 只是一个标识符号 可随意更改
[ssh]
# 协议类型
type = tcp
# 客服端内网IP地址 最好不要用127.0.0.1
local_ip = 192.168.100.191
#设置要访问到内部的这个服务时,需要访问的外部域名,
#可以设置为IP,不能和其他穿透服务重复,如果有多个穿透服务建议用域名
#域名可以设置二级域名,这样就可以建多个穿透服务了
# custom_domains =  xx.yourdomain.com
# 需要转发的客服端端口
local_port = 22
# 映射到公网端口
remote_port = 2222
# 心跳连接 必须有 单位秒  服务端与客服端都需要加,保持连接稳定
heartbeat_timeout = 30

8. 执行 ./frpc -c frpc.ini  & 命令,如果看到如下图结果表示启动成功
如果想要关闭窗口后服务还在运行则需要执行 nohup frpc -c frpc.ini >> frpc.log 2>&1 &

 9 . 通过ssh命令 或者xshell 访问191服务器

后记

   文章写的有点啰嗦混乱。当你点开文章时希望对你有点帮助。有建议亦可留言探讨。