一、内网穿透简介
  1. 官方说法:内网穿透,也即 NAT 穿透,进行 NAT 穿透是为了使具有某一个特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。
  2. 个人理解:浏览器中我们所能访问的网站都是公网ip地址,而我们所用的网络(路由器、光猫等)都是内网,如192.168.0.1、127.0.0.1,而当我们在本地部署项目时,想让别人访问我们的本地地址(内网)来使用我们的项目,这个时候,别人是访问不了的。因为运营商出于安全策略考虑,普通用户只能使用内网。那么,这就用到内网穿透了。
  3. 简单来说,内网穿透就是将内网ip转为公网ip
二、内网穿透原理
  1. 原理图

    image-20210810194934715

  2. 原理:本地电脑通过连接公网中的电脑FRP来进行数据交互,而其他用户所获取到的数据直接来自公网电脑,而公网电脑只作为一个转接站来传输数据而不去保留数据。公网电脑的带宽直接影响到数据传输的速率。

三、在服务器上搭建FRP
  1. 准备工作

    • VPS一台(也可以是具有公网IP的实体机)
    • 访问目标设备(就是你最终要访问的设备)
    • 简单的Linux基础(会用cp等几个简单命令即可)
  2. 服务端设置

    • 使用xshell工具连接linux服务器

    • 使用命令查看系统架构:arch

    • 根据显示结果去下载相对应的软件

      下载相对应架构的FRP版本
      wget https://github.com/fatedier/frp/releases/download/v0.22.0/frp_0.22.0_linux_amd64.tar.gz
      
      解压缩
      tar -zxvf frp_0.22.0_linux_amd64.tar.gz
      
      移动到自定义文件夹
      cp -r frp_0.22.0_linux_amd64 frp
      
      进入自定义文件夹
      cp frp
      
      查看文件
      ls -a
      
      frps----------------->服务器端启动器
      frps.ini------------->服务器端配置文件
      frpc----------------->用户端启动器
      frpc.ini------------->用户端配置文件
      
    • 修改配置信息:vim frps.ini

      [common]
      bind_port = 7000				#用户端需要连接的端口
      dashboard_port = 7500			#Web监控端端口
      token = 12345678				#连接秘钥
      dashboard_user = admin			#Web端用户名
      dashboard_pwd = admin			#Web端密码
      vhost_http_port = 10080			
      vhost_https_port = 10443
      
      #“vhost_http_port”和“vhost_https_port”用于反向代理HTTP主机时使用,本文不涉及HTTP协议,因而照抄或者删除这两条均可。
      
    • 启动FRP服务:./frps -c frps.ini

    • 此时访问 公网ip:7500 并使用自己设置的用户名密码登录,即可看到仪表板界面

    • 将服务在后台运行

      nohup ./frps -c frps.ini &
      #输出如下内容即表示正常运行
      nohup: ignoring input and appending output to 'nohup.out'
      #此时可先使用Ctrl+C关闭nohup,frps依然会在后台运行,使用jobs命令查看后台运行的程序
      jobs
      #使用kill %Id 可以关闭后台运行的程序
      
  3. 客户端设置

    • 根据客户端设备的情况选择相应的frp程序进行下载

    • 用文本编辑器打开frpc.ini,与服务端类似

      [common]
      server_addr = 公网IP
      server_port = 7000
      token = won517574356
      [rdp]
      type = tcp
      local_ip = 127.0.0.1           
      local_port = 3389
      remote_port = 7001  
      [smb]
      type = tcp
      local_ip = 127.0.0.1
      local_port = 445
      remote_port = 7002
      
      #“server_addr”为服务端IP地址,填入即可。
      #“server_port”为服务器端口,填入你设置的端口号即可,如果未改变就是7000
      #“token”是你在服务器上设置的连接口令,原样填入即可。
      #上面frpc.ini的rdp、smb字段都是自己定义的规则,自定义端口对应时格式如下。
      #“[xxx]”表示一个规则名称,自己定义,便于查询即可。
      #“type”表示转发的协议类型,有TCP和UDP等选项可以选择,如有需要请自行查询frp手册。
      #“local_port”是本地应用的端口号,按照实际应用工作在本机的端口号填写即可。
      #“remote_port”是该条规则在服务端开放的端口号,自己填写并记录即可。
      

      frp的原理

  4. 客户端的frpc程序不能直接双击运行!

    #使用命令提示符或Powershell进入该目录下
    cd C:\frp
    #并执行
    ./frpc -c frpc.ini
    #运行frpc程序,窗口中输出如下内容表示运行正常。
    login to server success, get run id 
    server udp port [0]
    2019/01/12 16:14:56 [I] [proxy_manager.go:136] [2b65b4e58a5917ac] proxy added: [rdp smb]
    2019/01/12 16:14:56 [I] [control.go:143] [smb] start proxy success
    2019/01/12 16:14:56 [I] [control.go:143] [rdp] start proxy success
    
  5. windows客户端配置后台运行及开机启动

    #frpc运行时始终有一个命令行窗口运行在前台,影响美观,我们可以使用一个批处理文件来将其运行在后台,而且可以双击执行,每次打开frpc不用再自己输命令了。
    #在任何一个目录下新建一个文本文件并将其重命名为“frpc.bat”,编辑,粘贴如下内容并保存。
    @echo off
    if "%1" == "h" goto begin
    mshta vbscript:createobject("wscript.shell").run("""%~nx0"" h",0)(window.close)&&exit
    :begin
    REM
    cd C:\frp
    frpc -c frpc.ini
    exit
    #将cd后的路径更改为你的frpc实际存放的目录。
    #之后直接运行这个 .bat 文件即可启动frpc并隐藏窗口(可在任务管理器中退出)。
    #至于开机启动,把这个 .bat 文件直接扔进Windows的开机启动文件夹就好了 :)
    #至此,客户端配置完成,之后就是你自己根据需要在frpc.ini后追加规则即可。
    #强烈建议你在使用frp直接测试内网穿透前,先在局域网内测试好相关功能的正常使用,并配置好可能会影响的Windows防火墙等内容,在内网调试通过后再使用frp进行内网穿透测试。
    
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐