frp改造Windows笔记本实现家庭版免费内网穿透

news2024/11/15 23:20:43

文章目录

    • 前言
    • frp原理
    • Windows服务端
      • IP检验
      • IP固定
      • 软件下载
      • 端口放行
      • 端口映射
      • 开机启动
    • NAS客户端
      • 端口查询
      • 软件下载
      • 端口检验
      • 穿透测试
      • 自启设置
    • Ubuntu客户端
      • 软件下载
      • 后台启动
    • 后记

前言

之前一直用花生壳远程控制一个服务器,但最近内网的网络策略似乎发生了变化,花生壳相关的域名都被屏蔽了。此时我恰好发现家里分配的宽带是公网IP(如果不是可以打电话申请一个),于是干脆选择自己动手丰衣足食了。

一开始我的想法是给家里的路由器刷完固件之后安装一个内网穿透工具,但是发现两个路由器都不行,一个是电信定制的,没有现成的刷机工具;另一个路由器内存太小了,就剩几十KB,没什么操作空间。

顺着这个思路,最好的解决方案似乎就是买一个大几百的高端路由器,但我实在是不想住在一个路由之家里面。此时又有某儿子吹风建议我可以买一个大几百的迷你主机,我都马上要下单了,才想起家里没有显示器,只能作罢。

正头痛之时,我突然看见才过了八岁生日的老电脑正在无事摸鱼,立即决定把它改造成内网穿透服务器,这样我不用再花钱,它可以有事做,可谓两全其美。

frp原理

frp(Fast Reverse Proxy)是一个高性能的反向代理应用,主要用于内网穿透场景,允许用户将内网服务暴露到公网上,从而实现外网用户对内网服务的访问。frp的原理基于以下关键概念:

  1. 反向代理:frp作为代理服务器,接收来自外网的连接请求,并将其转发到内网的服务器上。这样,外网用户可以直接通过frp服务器访问内网服务,而不需要直接连接到内网服务器。
  2. 端口映射:frp将外网用户请求的特定端口映射到内网服务器的对应端口。例如,如果内网服务器上运行了一个Web服务,监听80端口,frp可以将外网的80端口请求映射到内网服务器的80端口。
  3. 安全隧道:frp通过安全隧道传输数据,确保通信的安全性。它支持多种加密方式,如HTTPS、SSL等,以保护数据不被截获或篡改。
  4. 多协议支持:frp支持多种协议,包括HTTP、HTTPS、TCP、UDP、WebSocket等,这使得它可以用于多种不同的应用场景,如Web服务、文件传输、游戏服务器等。
  5. 服务端与客户端:frp由服务端(frps)和客户端(frpc)两部分组成。服务端运行在公网服务器上,负责接收外网请求并将其转发到内网客户端。客户端运行在内网服务器上,负责将服务端转发的请求传递给本地服务,并将本地服务的响应返回给服务端。
  6. 配置与控制:frp通过配置文件来指定服务端和客户端的行为,如监听的端口、映射规则、加密方式等。用户可以根据需要自定义配置,以适应不同的网络环境和需求。

通过这种方式,frp允许内网服务在不改变原有网络设置的情况下,通过公网服务器对外提供服务,从而实现了内网穿透的功能。

接下来我就记录一下在Windows服务端、NAS客户端以及Linux客户端使用frp实现内网穿透的一些步骤。

Windows服务端

IP检验

这一步要检验两个东西:一个是个人电脑的IP是否为公网IP,第二步是路由器的WAN口IP是否与公网IP相一致。
在电脑浏览器中打开公网IP检验网站,得到以下结果,确认为公网IP
在这里插入图片描述
打开路由器管理后台,发现WAN口IP并不是公网,而是内网IP
在这里插入图片描述
这时就要提一下我家的路由架构了,有一个带路由功能的光猫(天翼网关)作为主路由,还有一个华为路由(TC7206)作为子路由。

在家庭或企业网络中,通常会有一个主路由器连接到互联网服务提供商(ISP),并获得一个公网IP地址。子路由器(或二级路由器)则连接到主路由器,形成内网的一部分。在这种情况下,子路由器的WAN口IP地址通常是由主路由器分配的内网IP地址,而不是公网IP。

解决方案也很简单,让作为内网穿透的电脑连接作为主路由的光猫的WiFi即可,再看一下WAN口IP,舒服了。
在这里插入图片描述

IP固定

这里要介绍一下我家光猫与路由器的连接方式:光猫连接互联网服务提供商(ISP)的光纤网络,光猫LAN口接路由器的WAN口。因此,光猫和路由器及连接光猫的其他设备是一个网络,路由器和连接路由器的网络设备是另一个网络,两个网络相互独立互不影响,且光猫和路由都各自开启了DHCP。

  • 光猫和路由器都是双网卡设备,一个WAN(Wide Area Network,广域网)接口,多个LAN(Local Area Network,局域网)接口,同时有DHCP服务器和拨号客户端
  • DHCP(动态主机配置协议)是一种网络协议,它允许服务器向客户端自动分配IP地址和配置信息,不需要手动为每个设备配置IP地址、子网掩码、默认网关和DNS服务器等信息。

这样就带来了一个问题:当路由器重启时,DHCP服务也会重启。重启后,DHCP服务器可能不会保留之前的IP地址分配记录,而是重新开始分配IP地址。这可能导致某些设备获得不同的IP地址,尤其是当多个设备同时请求IP地址时,这就会为后文的IP端口映射带来麻烦,总不能每次一重启就把所有的端口映射重新设置一遍吧。

如果是连接路由器WiFi,其实固定IP这事还好,路由器自带根据MAC地址分配固定IP的功能。但是光猫并没有这么高级,所以只能先修改DHCP的范围,再在范围之外手动分配IP。

DHCP默认的分配范围是所有可能的IP,即2-255,我们将其的范围缩小到2-250,剩下的部分用来固定设备IP
在这里插入图片描述
按照以下操作步骤,将默认的自动获取IP地址修改为使用下面的IP地址
在这里插入图片描述
设置哪个IP地址呢?为了向某爱国厂商致敬,就设一个251吧,具体参数可以参考路由器的网关设置部分
在这里插入图片描述

软件下载

进入frp下载页,选择最新版本的windows_amd64下载到本地。

解开压缩包,因为它作为服务端,所以删掉frpc开头的两个文件,只保留frps开头的两个文件。

打开frps.toml这个配置文件,参考服务端详细配置说明,输入以下内容并保存:

# frps.toml
bindPort = 7000 				# 服务端与客户端通信端口

transport.tls.force = true		# 服务端将只接受 TLS链接

auth.token = "123" 			# 身份验证令牌,frpc要与frps一致

# Server Dashboard,可以查看frp服务状态以及统计信息
webServer.addr = "0.0.0.0"		# 后台管理地址
webServer.port = 7500 			# 后台管理端口
webServer.user = "root"		# 后台登录用户名
webServer.password = "admin"	# 后台登录密码

执行 .\frps -c .\frps.toml启动服务,不知道为啥会有些乱码
在这里插入图片描述
此时已经可以在浏览器中打开网页
在这里插入图片描述

端口放行

为了让流量在开放的端口中畅行无阻,需要对Windows防火墙的规则进行修改。
Win10左下角搜索防火墙和网络设置,点击高级设置入站规则,下拉会发现frps在公用网络被ban得死死,直接右键取消禁用
在这里插入图片描述
再按以下步骤新增自定义的frp规则,开放特定端口
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后将防火墙改造如下
在这里插入图片描述

端口映射

做完上面这些步骤,如果我们输入公网IP:7500,却仍然会提示网页无法打开,这是因为还差最后一步,没有将光猫端口与笔记本的端口做映射。
在这里插入图片描述
进入光猫管理页面,找到端口映射,按此添加7000等端口映射

路由器上的端口映射(Port Mapping)是一种网络地址转换(NAT)的技术,它允许将路由器的外部接口(通常连接到互联网的WAN口)的某个端口映射到内部网络的某台设备的特定端口上。这样,当外部的网络请求到达路由器的特定端口时,路由器会将这些请求转发到内部网络中相应的设备上。

在这里插入图片描述
刷新页面,完美打开
在这里插入图片描述

开机启动

在frp文件夹下新建start.bat可执行文件,输入以下内容

@echo off
:home
frps -c frps.toml
goto home

右键新建快捷方式
在这里插入图片描述
将快捷方式复制到C:\Users\【替换成你的用户名】\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup下,重启一下,即可实现开机自动运行内网穿透服务
在这里插入图片描述

NAS客户端

端口查询

第一步是查询NAS上有哪些服务对应的端口需要穿透

  • DSM服务
    在这里插入图片描述

  • SSH服务
    在这里插入图片描述

  • WebDAV服务
    在这里插入图片描述

软件下载

进入frp下载页,选择最新版本的linux_amd64下载到本地。

解开压缩包,因为它作为服务端,所以删掉frps开头的两个文件,只保留frpc开头的两个文件。打开frpc.toml这个配置文件,根据frp客户端配置 以及 访问内网机器中的相关说明,输入以下内容

# frpc.toml
transport.tls.enable = true		# 从 v0.50.0版本开始,transport.tls.enable的默认值为 true
serverAddr = "1xx.xxx.xxx.xxx"
serverPort = 7000 				# 公网服务端通信端口

auth.token = "123" 			# 令牌,与公网服务端保持一致

[[proxies]]
name = "NAS-http"
type = "tcp"
localIP = "127.0.0.1"			# 需要暴露的服务的IP
localPort = 65000				# 将本地65000端口的服务暴露在公网的7001端口
remotePort = 7001

[[proxies]]
name = "NAS-https"
type = "tcp"
localIP = "127.0.0.1"			# 需要暴露的服务的IP
localPort = 65001				# 将本地65001端口的服务暴露在公网的7002端口
remotePort = 7002

[[proxies]]
name = "NAS-SSH"
type = "tcp"
localIP = "127.0.0.1"			# 需要暴露的服务的IP
localPort = 60001				# 将本地60001端口的服务暴露在公网的7022端口
remotePort = 7022

[[proxies]]
name = "NAS-webdav"
type = "tcp"
localIP = "127.0.0.1"			# 需要暴露的服务的IP
localPort = 5005				# 将本地5005端口的服务暴露在公网的7003端口
remotePort = 7003

端口检验

由于之前已经在NAS上部署了zerotier-one的docker环境,本着节约资源保护环境的原则,我决定直接把frp布到已有的环境中。
进入zerotier-one的docker环境,点击通过命令启动并输入ash进入终端,输入 cat /etc/issue查看镜像类型
在这里插入图片描述

Alpine Linux 是一个轻量级的发行版,它使用musl libc 和 busybox,使用apk做包管理。

使用以下命令安装端口扫描工具nmap

apk update
apk add nmap

探测win服务端的端口是否打开,确认已打开
在这里插入图片描述

穿透测试

在docker文件夹中新建frp文件夹,将frpc相关文件传进去,并编辑容器,建立存储空间的映射
在这里插入图片描述
按如下方式启动穿透服务
在这里插入图片描述
尝试在外网通过ssh user@1xx.xxx.xxx.xxx -p 7022访问NAS的SSH服务,成功进入并查看文件内容
在这里插入图片描述
尝试在外网通过1xx.xxx.xxx.xxx:7001访问NAS的DSM服务,访问失败,后台报如下错误
在这里插入图片描述
尝试了一堆解决方案未果,最后猜测是端口被之前安的花生壳应用占有了,也罢,反正能穿透就行
在这里插入图片描述
接下来测试webdav,首先下载raidrive软件,打开后做如下设置,注意要取消地址旁的勾选
在这里插入图片描述
在这里插入图片描述
连接瞬间成功,现在打开电脑多了一个网络位置
在这里插入图片描述

自启设置

查看容器设置,其每次开机都会自启动,并执行/entrypoint.sh
在这里插入图片描述
进入容器终端,查看文件内容
在这里插入图片描述
将其修改成以下内容,并重新启动容器

#!/bin/sh                                                                                                    
set -eu                                                                                                      
                                                                                                             
if [ ! -e /dev/net/tun ]; then                                                                               
  echo 'FATAL: cannot start ZeroTier One in container: /dev/net/tun not present.'                            
  exit 1                                                                                                     
fi                                                                                                           
                                                                                                             
/usr/sbin/zerotier-one &
/frp/frp_0.57.0_linux_amd64/frpc -c /frp/frp_0.57.0_linux_amd64/frpc.toml

这里我们使用 & 将 zerotier-one 后台运行,这样它就不会阻塞脚本中的其他命令。注意,exec 命令会替换当前进程,因此如果使用 exec 启动进程,该进程会取代当前脚本的进程,导致后续的命令不会被执行。

查看进程,两个进程同时后台启动
在这里插入图片描述
查看日志,frp正常开启
在这里插入图片描述
接下来再设置每次NAS开机都会自启动docker

在这里插入图片描述
在这里插入图片描述
可以把docker关了之后,选中命令右键运行,测试一下能不能正常执行并查看结果

在这里插入图片描述

Ubuntu客户端

软件下载

跟上一部分下载一样的文件,在frpc.toml文件中输入以下内容

# frpc.toml
transport.tls.enable = true		# 从 v0.50.0版本开始,transport.tls.enable的默认值为 true
serverAddr = "1xx.xxx.xxx.xxx"
serverPort = 7000 				# 公网服务端通信端口

auth.token = "123" 			# 令牌,与公网服务端保持一致

[[proxies]]
name = "Ubuntu-Gradio"
type = "tcp"
localIP = "127.0.0.1"			
localPort = 7860				
remotePort = 7007

[[proxies]]
name = "Ubuntu-Gradioo"
type = "tcp"
localIP = "127.0.0.1"			
localPort = 7861				
remotePort = 7008

[[proxies]]
name = "Ubuntu-SSH"
type = "tcp"
localIP = "127.0.0.1"			
localPort = 22				
remotePort = 7006

后台启动

  • 安装screen
sudo apt-get update
sudo apt install screen
  • 进入后台执行
screen -R frp
sudo chmod 777 frpc
./frpc -c ./frpc.toml

在这里插入图片描述

  • ctrl+A+D退出,screen -R frp进入查看

客户端全部配完后,进入端口号为7500的后台管理页面,欣赏一下劳动成果
在这里插入图片描述

后记

尽管上面的这一段流程看起来像是一个天才的一气呵成,但我必须承认,实情并非如此。这完全是一个菜鸡在设定好目标后,从自己半知不解的一点知识入手,靠着智谱、GPT3.5、Claude以及各种博客和论坛上的信息东凑西补踉踉跄跄拼装而来。

虽然听起来有些辛酸,但这个过程并不辛苦,我只是花一个周时间全身心投入,酣畅淋漓地通关了一场庞大的游戏。从一开始我就觉得我能通过这个游戏,而结局也确实如此,那些我初中高中从来没弄明白的路由器和光猫,大学里险些害我计网挂科的各种IP知识,在这场游戏中以以一种全新的方式进入我脑海并扎根下来,这实在是一个神奇的时刻。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

InfiniGate自研网关实现思路二

5.HTTP请求参数解析 解析 HTTP 网络请求的参数信息,包括;GET/POST,以及应对不同 Content-Type 类型的处理。 HTTP 接口请求的参数需要解析成可以匹配到 RPC 接口的入参信息,所以通常为了方便控制一般只支持 RPC 接口单个对象入参…

「sentinel」流量控制组件的应用

「sentinel」流量控制组件的应用 Sentinel版本QPS 一、初识Sentinel1、Sentinel2、Sentinel 和 Hystrix对比3、雪崩问题 二、环境搭建1、下载安装Sentinel2、微服务整合Sentinel 三、流量控制1、簇点链路2、流控设置3、流控模式直接关联链路 4、流控效果流控效果解释 四、热点限…

C#通用类库封装实战

数据库查询 特性方式获取数据库列的别名 数据库更新 使用简单工厂配置的方式

C++ stl容器stack,queue,priority_queue的底层模拟实现

目录 前言: 文档借鉴:Reference - C Reference 1.deque a.deque的结构特点: b.deque的迭代器结构: c.面试题: 2.stack 3.queue 4.仿函数 5.priority_queue 总结: 前言: 本篇一共简单…

【QT学习】8.qt事件处理机制,事件过滤器,自定义事件

1.qt事件处理机制 事件处理: 当用户移动鼠标的时候 ,创建一个 鼠标移动事件对象 然后把这个对象放到 事件队列里面去,事件管理器 从队列中 取出事件,然后 调用其对应的事件处理函数。 多态机制: &#x…

靠谱的婚恋平台有哪些?青藤之恋、二狗、百合网、珍爱网等深度测评

哇塞,恋爱和结婚对于年轻人来讲可是超级重要的大事呢!不过呀,找到一个稳稳当当的婚恋平台可不简单哟!那么,到底哪个婚恋平台最靠得住呢? 丛丛: 这可是我用了好久好久的脱单交友小程序嘞&#xf…

MySQL中explain的用法

执行结果各字段的含义 EXPLAIN SQL语句 如: EXPLAIN SELECT * FROM test 执行结果: 列名描述id在一个大的查询语句中每个SELECT关键字都对应一个 唯一的idselect_typeSELECT关键字对应的那个查询的类型table表名partitions匹配的分区信息type针对单表…

机器学习预测汽车油耗效率 MPG

流程 数据获取导入需要的包引入文件,查看内容划分训练集和测试集调用模型查看准确率 数据获取 链接:https://pan.baidu.com/s/1KeIJykbcVpsfEk0xjhiICA?pwd30oe 提取码:30oe --来自百度网盘超级会员V1的分享导入需要的包 import pandas as pd imp…

【Spring Boot】掌握Spring Boot:深入解析配置文件的使用与管理

💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:【Spring Boot】掌握Spring Boot:深入解析配置文件的使用与管理 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 Spring Boot 配置文件一. 配置文…

重新总结一下以前写过的“波特率”!单片机常见的通信速率分析!

文章目录 如题以前文章新的总结如题 波特率是单片机中描述通信速率的一个单位,比如串口通信、SPI通信、IIC通信、LIN通信、CAN通信等等,现在重新总结一下涉及到波特率的一些知识点。 以前文章 上面是存储的单位换算方式 这是通信速率的换算方式 新的总结 波特率的英文是…

画家-qt-surce

void GraphicView::paintEvent(QPaintEvent *pe) { QPainter painter(viewport()); painter.setRenderHint(QPainter::SmoothPixmapTransform);//升级画家 painter.drawImage(rect(),musicImage); } 分析: 这段代码是用于绘制图形视图的部分。 1. void GraphicV…

JavaCard学习笔记: CAP Component 之 Class Component

文章目录 整体结构tag和size字段signature_pool_length和signature_pooltype_descriptor结构导入类型编码导入项签名示例导入类导入数组导入远程方法 interfaces[]interface_info结构flagsinteface_countsuperinterfacesinterface_name class_info_compact classes[]结构flagsi…

mapreduce中的ReduceTask工作机制(Hadoop)

ReduceTask 是 Hadoop 中的一个重要组件,负责对 MapTask 的输出进行合并、排序和归并,最终生成最终的输出结果。 ReduceTask 的工作机制 1. 分组(Shuffle)阶段: 在分组阶段,ReduceTask 会从多个 Mapper …

【问题处理】银河麒麟操作系统实例分享,服务器操作系统VNC远程问题分析

1.服务器环境以及配置 【内核版本】 4.19.90-23.8.v2101.ky10.aarch64 【OS镜像版本】 0518-server 2.问题现象描述 服务器通过vncserver:1.service服务启动的vnc服务后,普通用户用vnc连接时,锁屏后,然后输入登陆密码会报密码错误&…

回溯算法练习day.4

93.复原ip地址 链接:. - 力扣(LeetCode) 题目描述: 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如:"…

基于单片机的智能病床呼叫系统设计与仿真

摘 要 本文设计的病床呼叫系统采用单片机作为控制器。该系统具有远程控制、病人的身体情况检测、报警呼叫、显示和执行器运动的功能。远程控制由红外线传感器和矩阵键盘组成,检测电路由温湿度传感器DH22、心率传感器Pulse Sensor、压力传感器MPX4115组成&#x…

苹果电脑虚拟机黑屏了怎么办解决 MAC系统升级后虚拟机黑屏问题 苹果电脑虚拟机卡住了怎么办

虚拟机是一种可以在一台电脑上运行多个操作系统的软件,它可以让用户在苹果电脑上安装和使用Windows、Linux等其他系统。但是,有时候在升级Mac系统或者虚拟机软件后,虚拟机会出现黑屏的现象,无法正常启动或者使用。这种情况该如何解…

java swing电商出入库管理系统eclipse开发Mysql数据库CS结构java编程

一、源码特点 java swing 电商出入库管理系统 是一套完善的窗体设计系统,对理解SWING java 编程开发语言有帮助,系统具有完整的源代码和数据库,,系统主要采用C/S模式开发。 应用技术:javamysql 开发工具&#xff1…

一堆喷儿香喷儿香的工具网站-已经收藏-搜嗖工具箱!

文心一言 https://yiyan.baidu.com/ ​ ChatGpt横空出世的横空出世好像一把钥匙,开启了大模型时代,国内也有不错的产品,比如百度的文心一言,从3.5到4.0看得见的成长,现在的文心一言是我们工作中不可缺少的好帮手&am…

vulfocus靶场之redis命令执行cve-2022-0543漏洞复现

漏洞: Redis是著名的开源Key-Value数据库,其具备在沙箱中执行Lua脚本的能力。 Debian以及Ubuntu发行版的源在打包Redis时,不慎在Lua沙箱中遗留了一个对象package,攻击者可以利用这个对象提供的方法加载动态链接库liblua里的函数&…