当前位置: 首页 > web >正文

使用frp内网穿透实现远程办公

最近需要远程办公,不过居家访问公司服务器遇到一些困难,需求就是在家里安全访问公司内网中的服务器。

    服务器只有一个局域网ip,没有公网ip,同一局域网内的设备可以通过局域网ip访问,而Internet上的设备最多只能找到公司的路由器,进不了局域网。

一、接入上网环境分析

    我们使用公网一般有三种形式:

    1. 路由器分配了一个或多个固定的公网IP:

    这种情况访问内网服务器比较方便,在路由器中做端口映射,然后就可以使用公网ip+端口号访问了。

    2. 路由器被分配了一个动态公网IP:

    也同样在路由中设置端口映射,不过由于公网IP经常在变,因此应该采用动态域名来做解析,采用动态域名+端口号也可以访问。

    3. 路由器被分配了一个动态内网IP:

    这种情况最麻烦,不过目前最常见,我们公司目前就是如此,动态域名解析后得到私有C类地址,比如192.168.2.3,这就必须采用内网穿透了。

二、内网穿透简单了解

    内网穿透即是内网映射,内网(IP)端口映射外网(IP或域名),以实现将内网服务器、网站、和应用发布到外网访问的目的。通常在内网网络环境搭建服务器(解决无公网IP问题),需要外网访问内网场景(如远程办公)。

    内网穿透工具很多,比如开源的frp和ngrok、老牌的nat123和花生壳等,通过比较选择了frp来实现,如果自己搭建需要借助一个有公网ip的云服务器。

三、FRP简介

   frp是一款采用golang编写的开源内网穿透反向代理应用,支持 Windows、macOS与 Linux,支持 TCP、UDP 协议,支持http 和 https 协议,在公网服务器安装一个server端,内网服务器安装一个客户端,起到一个中转转发的作用,从而实现内网暴露到外网,实际就是一个反向代理转发器。

   其软件地址为https://github.com/fatedier/frp,目前最新版本是0.41.0

   frp 支持多种代理类型来适配不同的使用场景。

   tcp :单纯的 TCP 端口映射,服务端会根据不同的端口路由到不同的内网服务。

   udp :单纯的 UDP 端口映射,服务端会根据不同的端口路由到不同的内网服务。

   http :针对 HTTP 应用定制了一些额外的功能,例如修改 Host Header,增加鉴权。

   https :针对 HTTPS 应用定制了一些额外的功能。

   stcp :安全的 TCP 内网代理,需要在被访问者和访问者的机器上都部署   frpc,不需要在服务端暴露端口。

   sudp :安全的 UDP 内网代理,需要在被访问者和访问者的机器上都部署 frpc,不需要在服务端暴露端口。

    xtcp :点对点内网穿透代理,功能同 stcp,但是流量不需要经过服务器中转。

tcpmux :支持服务端 TCP 端口的多路复用,通过同一个端口访问不同的内网服务。

四、FRP   安装使用过程

   下载后的文件很简洁,由于golang的优秀特性,不需要依赖其他安装包,

    其中frps是服务器端运行文件(安装到有公网IP的云服务器上),对应配置文件frps.ini和frps_full.ini,缺省在服务端使用7000端口。

    frpc是客户端运行文件(安装到需要对外发布的内网服务器上),对应配置文件是frpc.ini

    由于我们云和本地服务器都是linux,我们只讨论linux下的安装,windows下大同小异。

    1 下载frp_0.41.0_linux_amd64.tar.gz,分别传到云和本地服务器上,解压

        tar -zxvf frp_0.41.0_linux_amd64.tar.gz

       sudo mkdir /etc/frp

       sudo cp * /etc/frp -r

       其中systemd目录是给自动启动服务用的,在我的服务器上不好用

     配置服务端,用精简版的frps.ini就够用了

     nano frps.ini

     [common]

     bind_port = 7000 #绑定的端口

     dashboard_user = admin #控制台用户名

     dashboard_pwd = password #控制台密码

     dashboard_port = 7500 #控制台的端口

     2 启动云服务器的服务端

     nohup /etc/frp/frps -c ./frps.ini &

         3 安装配置客户端的内网服务器

     tar -zxvf frp_0.41.0_linux_amd64.tar.gz

       sudo mkdir /etc/frp

       sudo cp * /etc/frp -r

      配置需要转发的服务

     nano frpc.ini

[common]

server_addr = 公网的IP

server_port = 7000

[ssh]

type = tcp

local_ip = 127.0.0.1

local_port = 22

remote_port = 7001

[oracle]

type = tcp

local_ip = 127.0.0.1

local_port = 1521

remote_port = 7002

[RDPWINDOWS]

type = tcp

local_ip = 192.168.0.109

local_port = 3389

remote_port = 7003

[TOMCAT]

type = tcp

local_ip = 127.0.0.1

local_port = 8080

remote_port = 7008 

  4 启动内网服务器的客户端

   nohup /etc/frp/frpc -c ./frpc.ini &

5 使用

   公网环境下 

     putty 云服务器IP+端口号7001

     公网ip:7004就可以rdp连接到内网的windows等等,就可以方便的访问公司内网服务器了,当然速度会略慢一些了

五、小结

内网穿透方法有不少,对于有公网主机资源的,可以使用像开源的FRP来搭建端口转发服务使用;如果自己确实连个公网IP权限都没有的,需要用类似nat123等三方工具,直接来将内网地址变成公网地址使用。

http://www.xdnf.cn/news/17679.html

相关文章:

  • 基于AI量化模型的比特币周期重构:传统四年规律是否被算法因子打破?
  • Python(9)-- 异常模块与包
  • AI Coding 概述及学习路线图
  • Elasticsearch Node.js 客户端的安装
  • 【功能测试】软件集成测试思路策略与经验总结
  • FFmpeg - 基本 API大全(视频编解码相关的)
  • 【数据结构】深入理解顺序表与通讯录项目的实现
  • leetcode-hot-100 (图论)
  • CobaltStrike的搭建和使用
  • 爬虫与数据分析实战
  • 【09-神经网络介绍2】
  • 一文读懂 C# 中的 Lazy<T>
  • 第10节 大模型分布式推理典型场景实战与架构设计
  • Godot ------ 平滑拖动02
  • Apache Ignite 核心组件:GridClosureProcessor解析
  • C# 异步编程(计时器)
  • Python: configparser库 ini文件操作库
  • 使用MAS(Microsoft Activation Scripts)永久获得win10专业版和office全套
  • Edit Distance
  • react中父子数据流动和事件互相调用(和vue做比较)
  • GO学习记录三
  • 基于MongoDB/HBase的知识共享平台的设计与实现
  • 【Dv3Admin】菜单转换选项卡平铺到页面
  • Excel 连接阿里云 RDS MySQL
  • 5G 非地面网络(NTN)最专业的方案
  • 高并发场景下分布式ID生成方案对比与实践指南
  • 在 .NET Core 5.0 中启用 Gzip 压缩
  • 从ELF到进程间通信:剖析Linux程序的加载与交互机制
  • 玩转Docker | 使用Docker部署Trilium Notes知识库工具
  • 5G NTN 卫星测试产品