zoukankan      html  css  js  c++  java
  • frp实现内网穿透

    简介

    我们来假设一种场景,就是如何能让我们在公网访问局域网内部不具有公网ip的服务器?

    解决方案至少有三个:

    1. 在局域网的出口路由器上实现端口映射。但是此种方案依赖于出口路由上的固定公网ip,对于家庭网络以及部分小型公司网络来讲,都不具备固定公网ip的条件。
    2. 基于第一种方案的改进,虽然不具备固定公网ip,但只要是动态公网ip也可以。就是使用ddns方案,来实现公网ip的动态映射。前提是仍然得要有公网ip,只不过不再需要这个公网ip非得固定。事实上,在现在一些家庭网络中,我们的出口ip甚至不是公网ip,在这种情况下,这种方案也无法使用了。
    3. 基于内网穿透的方案。简单讲,就是在公网上找一台固定的服务器,这台服务器得要有公网ip,将这台服务器配置为一个服务端,将内网中的所有需要在公网被访问到的服务器配置为客户端。但我们需要访问内网中的服务器时,直接访问公网上这台服务器,这台服务器来帮助我们转发请求至内网之中。

    frp实现了第3种方案,除此之外,还有ngrok以及其他开源解决方案

    下面是内网穿透的架构图:

    frp

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

    配置

    服务端

    frp的配置相对比较简单

    1. 安装
    wget https://github.com/fatedier/frp/releases/download/v0.24.1/frp_0.24.1_linux_amd64.tar.gz
    tar xf frp_0.24.1_linux_amd64.tar.gz -C /alidata/server/
    cd /alidata/server
    ln -s frp_0.24.1_linux_amd64 frp
    
    
    
    1. 修改配置文件
    # 默认情况下,在安装目录中就有frps_full.ini的示例文件,里面绝大多数配置项不需要修改,下面简单列下需要的变更
    
    [common]
    # 服务端监听的地址和端口
    bind_addr = 0.0.0.0
    bind_port = 7000
    
    # web端监听的地址和端口
    dashboard_addr = 0.0.0.0
    dashboard_port = 7500
    
    # web端登录的帐号和密码
    dashboard_user = admin
    dashboard_pwd = 12345678
    
    # 用于客户端验证的token
    token = 12345678
    
    # 允许代理的端口号列表,如果客户端有需要代理的端口号不在此范围,需要添加
    allow_ports = 2000-3000,3001,3003,4000-50000
    
    
    1. 创建启动文件
    #cat /etc/systemd/system/frp.service 
    [Unit]
    Description=https://github.com/fatedier/frp/
    [Service]
    Type=simple
    ExecStart=/alidata/server/frp/frps -c /alidata/server/frp/frps_full.ini 
    Restart=always 
    KillMode=process 
    RestartSec=1
    [Install]
    WantedBy=multi-user.target
    
    1. 启动
    systemctl daemon-reload
    systemctl restart frp
    

    客户端

    客户端,我这里就直接用容器拉起来了,下面给出docker-compose的写法:

    version: '3'
    services:
      frp-client:
        image: oldiy/frpc:0.24.1
        restart: always
        network-mode: host
        volumes:
        - "/volume2/docker/frpc/conf/frpc.ini:/frp/frpc.ini"
    

    /volume2/docker/frpc/conf/frpc.ini配置文件示例如下:

    [common]
    # 服务端ip和port
    server_addr =  xx.xx.xx.xx
    server_port = 7000
    # 连接服务端使用的token
    token = 12345678
    
    # 映射本地27100端口至服务端的27100
    [ssh]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 27100
    remote_port = 27100
    
    [baidupcs]
    type = tcp
    local_ip = 127.0.0.1
    local_port = 5299
    remote_port = 5299
    
    [transmission]
    local_port = 9091
    remote_port = 9091
    
    # 映射本地5000-5001端口至服务端的5000-5001
    [range:web]
    local_port = 5000-5001
    remote_port = 5000-5001
    

    拉起服务:

    docker-compose up -d
    

    需要说明的是,客户端版本尽可能与服务端保持一致

    验证

    直接访问frp服务端的dashboard即可:

    frp-dashboard

  • 相关阅读:
    SurvivalShooter学习笔记(二.玩家移动旋转)
    SurvivalShooter学习笔记(一.相机跟随)
    Unity平台的预处理
    设计模式之简单工厂模式
    求每一位数和
    10进制转化为m进制
    m进制转化为10进制
    【硬件模块】华为NBIOT 使用记录
    【编程语言】Matlab 学习记录
    【设计模式】观察者模式
  • 原文地址:https://www.cnblogs.com/breezey/p/10660626.html
Copyright © 2011-2022 走看看