内网穿透方案FRP内网穿透实战(基础版)

目录

  • 前言
  • 方案
    • 方案1:公网
    • 方案2:第三方内网穿透软件
      • 花生壳
      • cpolar
    • 方案3:云服务器做反向代理
  • FRP简介
  • FRP资源
  • FRP原理
  • FRP配置教程之SSH
    • 前期准备
    • 服务器配置
      • 下载FRP
      • 配置FRP服务端
      • 启动FRP服务端
      • 验证是否启动成功
      • 可能遇到的一些问题
    • 客户端配置
      • 下载FRP
      • 配置FRP服务端
      • 启动FRP客户端
      • 验证是否穿透成功

方案

方案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源码&教程:GitHub - fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.

  • 更多穿透教程也可以参考官方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验证:

穿透成功:

69.9K Star,最强开源内网穿透工具:frp

作为一名开发者,有很多场景需要用到内网穿透,比如:我们在接入一些大平台做第三方应用时,在本地开发微信公众号工具的时候需要让微信平台能否访问到本地提供的接口。除此之外,还有很多其他场景,也会用到,比如:把放在家里的NAS或服务器暴露到公网上,这样在外面的时候也可以随时随地的访问。

说到内网传统,TJ君第一个想到的是国内最早的一款知名软件:花生壳。但是今天不是要推荐它,而是要推荐一个更牛的开源项目:frp!该项目目前已经收获了69.9 K Star,在GitHub上获得了极大的认可!

下载安装

frp目前已经提供了大部分操作系统的支持版本,通过这个链接:https://github.com/fatedier/frp/releases, 就可以下载到适合你使用的安装。

以Windows的包为例,解压后可以获得这些内容:

frps是服务端程序,frpc是客户端程序。ini文件就是对应的配置文件。

首发 https://blog.didispace.com/tj-opensource-frp/ icon-default.png?t=N7T8https://blog.didispace.com/tj-opensource-frp/,转载请注明出处

暴露内网服务

内网穿透的玩法有很多,这里列举一个比较常见的例子。

比如:我要暴露一个只有自己能访问到服务器。那么可以这样配置:

配置 frps.ini,并启动服务端 frps

[common]
bind_port = 7000

在需要暴露到外网的机器上部署 frpc,配置如下:

[common]
server_addr = x.x.x.x 
server_port = 7000[secret_ssh]
type = stcp
# 只有 sk 一致的用户才能访问到此服务
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22

在想要访问内网服务的机器上也部署 frpc,配置如下:

[common]
server_addr = x.x.x.x
server_port = 7000[secret_ssh_visitor]
type = stcp
# stcp 的访问者
role = visitor
# 要访问的 stcp 代理的名字
server_name = secret_ssh
sk = abcdefg
# 绑定本地端口用于访问 SSH 服务
bind_addr = 127.0.0.1
bind_port = 6000

把frpc也都启动起来之后,通过 SSH 就可以访问内网机器了

ssh -oPort=6000 test@127.0.0.1

其他支持

除了上面的玩法之外,frp还有很多玩法,比如:

  • 自定义域名访问内网的 Web 服务
  • 转发 DNS 查询请求
  • 转发 Unix 域套接字
  • 对外提供简单的文件访问服务
  • 为本地 HTTP 服务启用 HTTPS
  • 点对点内网穿透

篇幅有限,具体如何配置这里就不多说了,有需要的读者可以直接查看官方文档,均有详细的服务端客户端配置案例。

最后,奉上相关链接:

开源地址:GitHub - fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
文档地址:https://gofrp.org/docs/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/318086.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

融资项目——全局统一日志说明

通过日志可以查看程序的运行信息和异常信息等,便于维护。日志级别分为TRACE、DEBUG、INFO、WARN、ERROR级别,越往后打印的日志信息越少,如ERROR 级别只会在程序运行出错时才会打印日志。可在application.properties中设置日志级别。 logging…

Linux 进程和计划任务管理

一 内核功用:进程管理、内存管理、文件系统、网络功能、驱动程序、安全功能等 1 程序 是一组计算机能识别和执行的指令,运行于电子计算机上,满足人们某种需求的信息化工具 用于描述进程要完成的功能,是控制进程执行的指令集 2…

CentOS7搭建Elasticsearch与Kibana服务

1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络: docker network create es-net 1.2拉取elasticsearch镜像 docker pull elasticsearch:7.11.1 1.3.运行 运行docker命令,部…

polar CTF 简单rce

一、题目 <?php /*PolarD&N CTF*/ highlight_file(__FILE__); function no($txt){if(!preg_match("/cat|more|less|head|tac|tail|nl|od|vim|uniq|system|proc_open|shell_exec|popen| /i", $txt)){return $txt;}else{ die("whats up");}} $yyds(…

Linux 485驱动通信异常

背景 前段时间接到一个项目&#xff0c;要求用主控用485和MCU通信。将代码调试好之后&#xff0c;验证没问题就发给测试了。测试测的也没问题。 但是&#xff0c;到设备量产时&#xff0c;发现有几台设备功能异常。将设备拿回来排查&#xff0c;发现是485通信有问题&#xff…

修复移动硬盘显示盘符但打不开问题

问题&#xff1a; 移动硬盘显示盘符&#xff0c;但无法打开。点击属性不显示磁盘使用信息。 分析解决&#xff1a; 这是由于硬盘存在损坏导致的&#xff0c;可以通过系统自带的磁盘检查修复解决&#xff0c;而无需额外工具。 假设损坏的盘符是E&#xff0c;在命令行运行以下命令…

5分钟理解什么是多模态

大家好&#xff0c;我是董董灿。 大模型越来越多了&#xff0c;大模型下沉的行业也越来越多。前几周一个在电厂工作的老哥发消息问我&#xff1a;大模型中所谓的多模态是什么意思&#xff1f; 我当时大概跟他解释了一下。 其实在人工智能领域&#xff0c;我们经常会听到&quo…

立体匹配算法(Stereo correspondence)

SGM(Semi-Global Matching)原理&#xff1a; SGM的原理在wiki百科和matlab官网上有比较详细的解释&#xff1a; wiki matlab 如果想完全了解原理还是建议看原论文 paper&#xff08;我就不看了&#xff0c;懒癌犯了。&#xff09; 优质论文解读和代码实现 一位大神自己用c实现…

Vue3-35-路由-路由守卫的简单认识

什么是路由守卫 路由守卫&#xff0c;就是在 路由跳转 的过程中&#xff0c; 可以进行一些拦截&#xff0c;做一些逻辑判断&#xff0c; 控制该路由是否可以正常跳转的函数。常用的路由守卫有三个 &#xff1a; beforeEach() : 前置守卫&#xff0c;在路由 跳转前 就会被拦截&…

diffusers 源码待理解之处

一、训练DreamBooth时&#xff0c;相关代码的细节小计 ** class_labels timesteps 时&#xff0c;模型的前向传播怎么走&#xff1f;待深入去看 ** 利用class_prompt去生成数据&#xff0c;而不是instance_prompt class DreamBoothDataset(Dataset):"""A dat…

5大自动化测试的Python框架,看完就能涨薪5k 【实用干货】

目前&#xff0c;它在Tiobe指数中排名第三个&#xff0c;仅次于Java和C。随着该编程语言的广泛使用&#xff0c;基于Python的自动化测试框架也应运而生&#xff0c;且不断发展与丰富。 因此&#xff0c;开发与测试人员在为手头的项目选择测试框架时&#xff0c;需要考虑许多方…

网络安全—模拟IP代理隐藏身份

文章目录 网络拓扑安装使用代理服务器设置隐藏者设置 使用古老的ccproxy实现代理服务器&#xff0c;仅做实验用途&#xff0c;禁止做违法犯罪的事情&#xff0c;后果自负。 网络拓扑 均使用Windows Server 2003系统 Router 外网IP&#xff1a;使用NAT模式 IP DHCP自动分配或者…