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

文章目录

    • 前言
    • 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.mzph.cn/web/2956.shtml

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

相关文章

信息系统项目管理师0068:数据标准化(5信息系统工程—5.2数据工程—5.2.2数据标准化)

点击查看专栏目录 文章目录 5.2.2数据标准化1.元数据标准化2.数据元标准化3.数据模式标准化4.数据分类与编码标准化5.数据标准化管理记忆要点总结5.2.2数据标准化 数据标准化是实现数据共享的基础。数据标准化主要为复杂的信息表达、分类和定位建立相应的原则和规范,使其简单化…

谷歌发布基于声学建模的无限虚拟房间增强现实鲁棒语音识别技术

声学室模拟允许在AR眼镜上以最少的真实数据进行训练,用于开发鲁棒的语音识别声音分离模型。 随着增强现实(AR)技术的强大和广泛应用,它能应用到各种日常情境中。我们对AR技术的潜能感到兴奋,并持续不断地开发和测试新…

Adobe Illustrator 2024 v28.4.1 (macOS, Windows) - 矢量绘图

Adobe Illustrator 2024 v28.4.1 (macOS, Windows) - 矢量绘图 Acrobat、After Effects、Animate、Audition、Bridge、Character Animator、Dimension、Dreamweaver、Illustrator、InCopy、InDesign、Lightroom Classic、Media Encoder、Photoshop、Premiere Pro、Adobe XD 请…

ChatGPT实战100例 - (18) 用事件风暴玩转DDD

文章目录 ChatGPT实战100例 - (18) 用事件风暴玩转DDD一、标准流程二、定义目标和范围三、准备工具和环境四、列举业务事件五、 组织和排序事件六、确定聚合并引入命令七、明确界限上下文八、识别领域事件和领域服务九、验证和修正模型十、生成并验证软件设计十一、总结 ChatGP…

解线性方程组——(Gauss-Seidel)高斯-赛德尔迭代法 | 北太天元

一、Gauss-Seidel迭代法 n 3 n3 n3时 A ( a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ) , b ( b 1 b 2 b 3 ) , A\begin{pmatrix} a_{11} & a_{12} &a_{13}\\ a_{21} & a_{22} &a_{23}\\ a_{31} & a_{32} &a_{33}\\ \end{pmatrix} ,\quad b\be…

缓存神器-JetCache

序言 今天和大家聊聊阿里的一款缓存神器 JetCache。 一、缓存在开发实践中的问题 1.1 缓存方案的可扩展性问题 谈及缓存,其实有许多方案可供选择。例如:Guava Cache、Caffine、Encache、Redis 等。 这些缓存技术都能满足我们的需求,但现…

《从零开始的Java世界》10File类与IO流

《从零开始的Java世界》系列主要讲解Javase部分,从最简单的程序设计到面向对象编程,再到异常处理、常用API的使用,最后到注解、反射,涵盖Java基础所需的所有知识点。学习者应该从学会如何使用,到知道其实现原理全方位式…

LAMP(Linux+Apache+MySQL+PHP)环境介绍、配置、搭建

LAMP(LinuxApacheMySQLPHP)环境介绍、配置、搭建 LAMP介绍 LAMP是由Linux, Apache, MySQL, PHP组成的,即把Apache、MySQL以及PHP安装在Linux系统上,组成一个环境来运行PHP的脚本语言。Apache是最常用的Web服务软件&a…

纸箱码垛机:从传统到智能,科技如何助力产业升级

随着科技的飞速发展,传统工业领域正经历着一场重要的变革。作为物流行业重要一环的纸箱码垛机,其从传统到智能的转型升级,不仅提高了生产效率,还大幅降低了人工成本,为产业升级提供了强大助力。星派将探讨纸箱码垛机的…

【Unity】UnityEvent(一)

​UnityEvent----高效管理游戏事件的利器 在游戏开发中,事件系统是实现各种功能的关键组成部分。它允许我们将不同对象之间的交互解耦,使得代码更加模块化和易于维护。而UnityEvent作为Unity引擎提供的一种强大的事件系统工具,为开发者提供了…

CPDA|0到1突破:构建高效数据分析体系的秘密武器

在现今信息爆炸的时代,数据已经渗透到了我们生活的方方面面,成为了决策、创新和竞争优势的关键。因此,构建一套高效的数据分析体系,对于企业和个人而言,都是至关重要的。那么,如何在众多的数据海洋中脱颖而…

分类神经网络1:VGGNet模型复现

目录 分类网络的常见形式 VGG网络架构 VGG网络部分实现代码 分类网络的常见形式 常见的分类网络通常由特征提取部分和分类部分组成。 特征提取部分实质就是各种神经网络,如VGG、ResNet、DenseNet、MobileNet等。其负责捕获数据的有用信息,一般是通过…

5分钟——测试搭建的springboot接口(二)

5分钟——测试搭建的springboot接口(二) 1. 查看数据库字段2. 测试getAll接口3. 测试add接口4. 测试update接口5. 测试deleteById接口 1. 查看数据库字段 2. 测试getAll接口 3. 测试add接口 4. 测试update接口 5. 测试deleteById接口

Docker 开启远程安全访问

说明 如果你的服务器是公网IP,并且开放了docker的远程访问,如果没有进行保护是非常危险的,任何人都可以向你的docker中推送镜像、运行实例。我曾开放过阿里云服务器中docker的远程访问权限,在没有开启保护的状态下,几…

用 LMDeploy 高效部署 Llama-3-8B,1.8倍vLLM推理效率

节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学,针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…

Springboot 整合 Quartz框架做定时任务

在Spring Boot中整合Quartz&#xff0c;可以实现定时任务调度的功能 1、首先&#xff0c;在pom.xml文件中添加Quartz和Spring Boot Starter Quartz的依赖&#xff1a; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-bo…

一些好听且有心意的英文全名Burwood新南威尔士州伯伍德喝酒上脸就是乙醛中毒1. 康奈尔大学官宣恢复标化要求2. 香港城市大学(东莞)正式设立!

目录 一些好听且有心意的英文全名 Burwood新南威尔士州伯伍德 喝酒上脸就是乙醛中毒 1. 康奈尔大学官宣恢复标化要求 2. 香港城市大学&#xff08;东莞&#xff09;正式设立&#xff01; 一些好听且有心意的英文全名 在选择好听且有意义的英文全名时&#xff0c;我们可…

synchronized的底层原理

目录 介绍 实现原理 对象头 Monitor&#xff08;监视器&#xff09; 锁升级 偏向锁 轻量级锁 重量级锁 锁的优缺点 介绍 synchronized 是 Java 中的关键字&#xff0c;它用于锁定代码块或方法&#xff0c;以确保同一时刻只有一个线程可以进入被锁定的部分。这在多线程…

css盒子设置圆角边框的方法

前言 欢迎来到我的博客 个人主页&#xff1a;北岭敲键盘的荒漠猫-CSDN博客 本文为我整理的设置圆角边框的方法 需求描述 我们在设置盒子边框时&#xff0c;他总是方方正正的。 我们想让这个直直的边框委婉一点该怎么办呢。这个就提到了我们这篇文章讲的东西&#xff1a; bord…

聚观早报 | OpenAI在印度开始招聘;特斯拉将发布一季度财报

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 4月23日消息 OpenAI在印度开始招聘 特斯拉将发布一季度财报 理想汽车全线产品降价 优酷升级悬疑剧场为白夜剧场 …