• 【网络】内网穿透方案&FRP内网穿透实战(基础版)


    前言

    最近周末在搭建个人网站,花了两天了解了下,目前基本上已经完成了个人博客网站的搭建,但是网站备案还没处理,只能IP访问,就不贴出了。
    现把途中记录的笔记分享下。

    内网穿透不仅仅用于个人网站搭建把数据拿捏在本地,主要是为了方便后期可能会玩or开发一些物联网设备而提前准备的环境。

    原文:李柱明博客园:https://www.cnblogs.com/lizhuming/p/16885898.html

    方案

    方案1:公网

    独立公网,IPv4的就不要想了。

    动态公网:除了移动,电信和联通,和客服沟通下,都会很大方。

    有了动态公网IP后,就用DDNS来绑定自己的域名就好了。DDNS服务商可以百度随便找个,因为我个人没有动态公网IP,就没有细究。

    参考方案:DNSPOD

    方案2:第三方内网穿透软件

    花生壳

    花生壳:贵,免费的不够用。

    cpolar

    cpolar:目前在用,个人使用感觉,比花生壳要好。

    先下载去官网免费版的cpolar,然后配置映射即可。免费的带宽1M,有4条映射(我试过,应该是每个客户端有4条映射可配置,而不是每个账号只有4条映射,这个算nice)

    方案3:云服务器做反向代理

    先购买有个带公网IP的云服务器,然后用云服务器反向代理,利用这个云服务器做流量转发,原理和方案2一样,只是要自己实现流量转发。

    参考方案:云服务器+FRP+个人域名。

    FRP简介

    frp 是一个开源、简洁易用、高性能的内网穿透和反向代理软件,支持 tcp, udp, http, https等协议。

    FRP资源

    FRP源码&教程:https://github.com/fatedier/frp

    • 更多穿透教程也可以参考官方demo,甚至源码。

    FRP原理

    • 服务端运行,监听一个主端口,等待客户端的连接;
    • 客户端连接到服务端的主端口,同时告诉服务端要监听的端口和转发类型;
    • 服务端fork新的进程监听客户端指定的端口;
    • 外网用户连接到客户端指定的端口,服务端通过和客户端的连接将数据转发到客户端;
    • 客户端进程再将数据转发到本地服务,从而实现内网对外暴露服务的能力。

    就是利用拥有公网的服务器帮忙转发数据。

    FRP配置教程之SSH

    前期准备

    需要一台具有公网IP的服务器。

    需要被穿透的内网设备。

    配置主要分两部分:

    • FRP服务端,布局在具有公网的IP的服务器。
    • FRP客户端,布局在内网设备。

    FRP穿透配置文件参考:frp*_full.ini

    服务器配置

    下载FRP

    下载release包:根据设备和frp版本下载:

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

    解压:

    tar -zxvf frp_0.45.0_linux_amd64.tar.gz

    相关文件:

    • frps*:是frp服务器相关文件。
    • frpc*:是frp客户端相关文件。
    lzm@lzm-ubuntu:~/work/network/frp/frp_0.45.0_linux_amd64$ ls
    frpc  frpc_full.ini  frpc.ini  frps  frps_full.ini  frps.ini  LICENSE

    配置FRP服务端

    修改服务端配置:

    vim frps.ini

    文件内容:

    # FRP服务端
    [common]
    # frp监听的端口,默认是7000,可以改成其他的
    bind_port = 7000
    # 授权码,请改成更复杂的
    token = 12345  # 这个token之后在客户端会用到
    
    # frp管理后台端口,请按自己需求更改
    dashboard_port = 7001
    # frp管理后台用户名和密码,请改成自己的
    dashboard_user = lzm
    dashboard_pwd = 123456
    enable_prometheus = true
    
    # frp日志配置
    log_file = /var/log/frps.log
    log_level = info
    log_max_days = 3

    启动FRP服务端

    拷贝到专门的文件夹&启动服务器:两种方案:

    1. 直接在当前终端运行:
    ./frps -s frpc.ini
    1. 使用systemctl命令组:

      • 需要注意的是,新版本的release已经不提供systemd相关脚本了,需要的可以下载旧版本获取。
    # 在etc文件夹下创建frp文件夹,把frps.ini服务配置拷贝过去
    sudo mkdir -p /etc/frp
    sudo cp frps.ini /etc/frp
    # 把frps固件包拷贝到系统的命令库中
    sudo cp frps /usr/bin
    # 把frps的单元文件拷贝到用户lib
    sudo cp systemd/frps.service /usr/lib/systemd/system/
    # 使能&启用
    sudo systemctl enable frps
    sudo systemctl start frps

    验证是否启动成功

    验证服务端是否成功启动:在浏览器中输入:http://服务器公网IP:FRP后台端口号,如:http://1.X.X.X:7001

    输入用户名和密码出现下图即可说明服务端成功启动。

    可能遇到的一些问题

    1. 验证进入后台管理时失败:在验证前需要检查防火墙。云服务器不是在命令行配置防火墙,而是在后台。对于腾讯云服务器,需要在后台进入防火墙配置,然后添加规则,开放对应端口。

    客户端配置

    和服务端步骤差不多

    下载FRP

    下载release包:根据设备和frp版本下载:

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

    解压:

    tar -zxvf frp_0.45.0_linux_amd64.tar.gz

    相关文件:

    • frps*:是frp服务器相关文件。
    • frpc*:是frp客户端相关文件。
    lzm@lzm-ubuntu:~/work/network/frp/frp_0.45.0_linux_amd64$ ls
    frpc  frpc_full.ini  frpc.ini  frps  frps_full.ini  frps.ini  LICENSE

    配置FRP服务端

    修改服务端配置:

    vim frpc.ini

    文件内容:

    # FRP客户端
    [common]
    server_addr = 服务器ip
     # 与frps.ini的bind_port一致
    server_port = 7000
     # 与frps.ini的token一致
    token = 123456
    
    # 配置ssh服务
    [ssh]
    type = tcp
    # 也可以是当前设备局域网内的其它IP
    local_ip = 127.0.0.1
    local_port = 22
    # 这个自定义,之后再ssh连接的时候要用
    remote_port = 7002

    启动FRP客户端

    ./frpc -c frpc.ini

    验证是否穿透成功

    随便拿台能接入公网的设备进行ssh验证:

    穿透成功:


    __EOF__

  • 本文作者: 李柱明
  • 本文链接: https://www.cnblogs.com/lizhuming/p/16885898.html
  • 关于博主: 嵌入式从业者。RTOS、Linux lwip mbedtls...
  • 版权声明: 版权归博主所有
  • 声援博主: 学习笔记分享
  • 相关阅读:
    2022年深圳杯建模A题思路: 破除“尖叫效应”与“回声室效应”,走出“信息茧房”
    TIDB--JMETER测试报告
    完犊子!原单位的离职证明丢了,下周要入职了,用AI做一个行不行?
    基于Ray的分布式版本的决策树与随机森林
    目标检测DiffusionDet: Diffusion Model for Object Detection
    centos下jenkins部署springboot项目(jar包)编写启动脚本
    python 图片下面加边框TK界面
    GDB使用技巧和相关插件
    win10怎么修复dns配置?DNS配置错误无法上网怎么解决
    [Spring Boot]09 Spring Boot集成和使用Redis
  • 原文地址:https://www.cnblogs.com/lizhuming/p/16885898.html