当前所在位置: 首页 > 百度域名

frp,比ngrok更加耐用的内网穿透工具关于DNS不得不说的一些事

2021-10-10 本站作者 【 字体:

frp内网穿透的搭建

需要准备的工具

一个可以供外网访问的主机,这里我使用的是阿里云购买的云服务器。

一个已经备案的域名

专注于Java领域优质技术,欢迎关注

作者:孤独烟 文章转自:孤独烟

frp软件包,包括frp server和frp client。这里准备了github frp下载的地址,下载自己所需要的版本。

关于DNS不得不说的一些事引言

今天我们来聊聊DNS。

所谓域名系统(Domain Name System缩写DNS,Domain Name被译为域名)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,可以balabala..省略一万字不表,因为这都不是重点!

https://github.com/fatedier/frp/releases

编写frp server配置文件

重点只有一个,大厂经常问!

frps.ini文件配置

没错,正是因为DNS包含着很多大厂常考面试知识点!因此,烟哥认为很有必要再开一文说明。

[common]

正文

概念

# 绑定默认的机器端口,frp client注册frp server时,使用此端口,如果是使用的云服务器的话,需要开放此端口

DNS 的全称是 Domain Name System 或者 Domain Name Service,它主要的作用就是将人们所熟悉的网址 (域名) “翻译”成电脑可以理解的 IP 地址,这个过程叫做 DNS 域名解析。

打个比方,我们登百度的地址的时候,都是敲www.baidu.com,进行登陆,难道你会去敲IP地址登百度?明显,域名容易记忆。

bind_port = 7000

而且,一个域名往往对应多个DNS地址,如下图所示

关于DNS不得不说的一些事

如果要全部都记住,嗯,我相信兄台记忆力一定十分惊人!

流程

# http虚拟机的端口,http代理时,外网访问的主机端口

vhost_http_port=80

接下来,就不得不说一道经典面试题了

关于DNS不得不说的一些事

其实回答很简单(俗称天龙八步)

1.根据域名,进行DNS域名解析;2.拿到解析的IP地址,建立TCP连接;3.向IP地址,发送HTTP请求;4.服务器处理请求;5.返回响应结果;6.关闭TCP连接;7.浏览器解析HTML;8.浏览器布局渲染;

ps:由于本文不是讲HTTP请求,我提几个思考题,读者自己去思考(没错,我就是故意不说,咬我啊!)

# frps的域名配置,最好以 *.任意三级域名.二级域名.三级域名 进行命名,这样可以灵活方便的配置。例如:*.frp.xxx.com

subdomain_host=配置解析好的域名

1、一个 TCP 连接可以对应几个 HTTP 请求?(提示,这在问你HTTP1.0和1.1的区别)2、一个 TCP 连接中 HTTP 请求发送可以一起发送么(比如一起发三个请求,再三个响应一起接收)?(提示,这就是在问你HTTP2.0和HTTP1.1协议的区别)3、浏览器对同一Host建立TCP连接到数量有没有限制?(拜托,一个网站那么多图片,开一个TCP连接,按顺序下载?那不是等到死?)

好了,不扯了,本文不是在讲Http协议。

下面我们着重来说DNS解析这块

# frp server的一个看板,可以查看frp client的一些连接信息,需要开放该端口

dashboard_port = 7500

dashboard_user = admin

dashboard_pwd = xxxxxxxxx

# frp cleint连接frp server时所需要的token,只有token一致,才可以注册成功,提高frp的安全性

token = *PD7!Qz8f66tf!RG

然后在frp目录下执行以下命令,启动frp server:

解析

OK,着重说DNS解析这块,流程图如下

./frps -c frps.ini

关于DNS不得不说的一些事

如图所示,大致就是:浏览器输入地址,然后浏览器这个进程去调操作系统某个库里的gethostbyname函数(例如,Linux GNU glibc标准库的gethostbyname函数),然后呢这个函数通过网卡给DNS服务器发UDP请求,接收结果,然后将结果给返回给浏览器。

注:frps.ini文件中配置的域名,需要配置域名解析

编写frp client配置文件

frpc.ini文件配置

这张图其实已经讲明白大致的流程,但是细节上可能有些差异。

例如

(1)我们在用chrome浏览器的时候,其实会先去浏览器的dns缓存里头查询,dns缓存中没有,再去调用gethostbyname函数(2)gethostbyname函数在试图进行DNS解析之前首先检查域名是否在本地 Hosts 里,如果没找到再去DNS服务器上查

不过,看到这里!请回忆下这两道面试题?

关于DNS不得不说的一些事

现在,会回答了么?

什么,你还不懂怎么答?把文章拉到开头。从头看过。

不过呢,需要补充说明一下,DNS中也有一个地方用到了TCP协议。那就是区域传送!

[common]

# frp server的地址

server_addr = 47.94.247.230

DNS的规范规定了2种类型的DNS服务器,一个叫主DNS服务器,一个叫辅助DNS服务器。在一个区中主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息。当一个辅助DNS服务器启动时,它需要与主DNS服务器通信,并加载数据信息,这就叫做区传送(zone transfer)。这种情况下,使用TCP协议。

# frp server的bind_port

server_port = 7000

讲到这里。其实面试官是可以深入追问的,如下所示

关于DNS不得不说的一些事

针对第一问,为什么域名解析用UDP协议?

# 与frp server的连接token,如果没有配置,可以忽略

因为UDP快啊!UDP的DNS协议只要一个请求、一个应答就好了。而使用基于TCP的DNS协议要三次握手、发送数据以及应答、四次挥手。但是UDP协议传输内容不能超过512字节。不过客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。

针对第二问,为什么区域传送用TCP协议?

因为TCP协议可靠性好啊!你要从主DNS上复制内容啊,你用不可靠的UDP?

token = *PD7!Qz8f66tf!RG

因为TCP协议传输的内容大啊,你用最大只能传512字节的UDP协议?万一同步的数据大于512字节,你怎么办?

讲到这里,我突然想到一个段子(没办法,头脑中知识太多)!

# frp client的名字,相当于是唯一的id,不可重复

关于DNS不得不说的一些事

这个问题,我们这里当段子来讲,改天写一篇《TCP/IP面试指南》!

[web]

# frp client 要代理的类型

三次握手:

关于DNS不得不说的一些事

两次握手:

type = http

关于DNS不得不说的一些事

四次握手:

关于DNS不得不说的一些事

所以啊。三次握手资源最省(当段子看看就好)!扯回我们的DNS话题!

原理

现在,讲最后一块DNS解析域名的原理!这块是重中之重!

先介绍linux下一个dig命令,以显示解析域名的过程。

# 设置要代理的本地或局域网内的ip

local_ip = 127.0.0.1

为了便于说明,我们来dig一下天猫的过程

# 代理本地服务的端口

dig www.tmall.com

local_port = 8300

# 访问代理服务的域名,根据frp server的subdomain_host属性来配置,配置成功后,就可以通过该域名进行访问你要穿透的服务

结果如下图所示

关于DNS不得不说的一些事

莫方,看不懂没事。

现在我们来读重点的两段。第一段代表请求参数如下图所示

custom_domains = web.frp.xxx.com

# 配置可以通过ssh连接到内网的主机,如果需要的话,可以做此配置

关于DNS不得不说的一些事

这段为查询内容。

DNS的查询参数一般有三个

(1)域名:服务器、邮件服务器(邮件地址中 @ 后面的部分)的名称(2)Class:在设置DNS方案时,互联网之外的网络也考虑到了,而Class就是用来识别网络的,不过现在只有互联网,所以它的值永远都是代表互联网的IN(3)记录类型:标识域名对应何种类型的记录。类型为A,表示域名对应的IP地址。类型为MX时,表示域名对应的是邮件服务器。类型为PTR,表示根据IP地址反查域名。类型为CNAME,表示查询域名相关别名。

当然,你这个时候要问我一个问题啦(注意上图红框)

烟哥,我输入的明明是www.tmall.com可是命令里解析的地址是www.tmall.com.啊,多了一个.的符号啊?这个.符号是什么意思呢?

于是乎,又扯了一道经典面试题

[ssh]

关于DNS不得不说的一些事

OK,好,要讲明白这个问题。我们要先把域名的结构讲清楚!

www.tmall.com对应的真正的域名为www.tmall.com.。末尾的.称为根域名,因为每个域名都有根域名,因此我们通常省略。

根域名的下一级,叫做"顶级域名"(top-level domain,缩写为TLD),比如.com、.net;

再下一级叫做"次级域名"(second-level domain,缩写为SLD),比如www.tmall.com里面的.tmall,这一级域名是用户可以注册的;

再下一级是主机名(host),比如www.tmall.com里面的www,又称为"三级域名",这是用户在自己的域里面为服务器分配的名称,是用户可以任意分配的。

# 特权模式,默认需要设置为true

privilege_mode = true

那么解析流程就是分级查询!

# 代理的类型为tcp

(1)先在本机的DNS里头查,如果没有就直接返回了。本机DNS就是下面这个东东

type = tcp

# 设置要代理的本地或局域网内的ip

关于DNS不得不说的一些事

(2)本机DNS里头发现没有,就去根服务器里查。根服务器发现这个域名是属于com域,因此根域DNS服务器会返回它所管理的com域中的DNS 服务器的IP地址,意思是“虽然我不知道你要查的那个域名的地址,但你可以去com域问问看”

(3)本机的DNS接到又会向com域的DNS服务器发送查询消息。com 域中也没有www.tmall.com这个域名的信息,和刚才一样,com域服务器会返回它下面的tmall.com域的DNS服务器的IP地址。

以此类推,只要重复前面的步骤,就可以顺藤摸瓜找到目标DNS服务器ps:温馨提醒,dig +trace www.tmall.com 可以看到解析过程。有兴趣的读者,自己实验一下。

local_ip = 127.0.0.1

扯了那么多东西,我们来看第二段内容,也就是响应体的部分!

# 设置ssh远程连接的本地端口,默认ssh都为22

如下所示

local_port = 22

关于DNS不得不说的一些事

很明显,第一行就是说www.tmall.com这个域名地址拥有一个别名是www.tmall.com.danuoyi.tbcache.com。那么,很显然,后面几行就是这个www.tmall.com.danuoyi.tbcache.com地址的真实IP。

为什么天猫要设一个别名到www.tmall.com.danuoyi.tbcache.com地址呢?

# 远程连接的端口,即使用ssh连接时需要通过此端口进行连接,注意:需要开启云服务器的该端口

remote_port = 5200

于是乎,又一道经典面试题出现

关于DNS不得不说的一些事

说句实在话,我当初第一眼,见到这题的时候,我觉得应该是方便cdn配置。

启动测试

配置完成后,执行以下命令进行frp client的启动:

回到我们的例子,如果烟哥的猜测正确,www.tmall.com.danuoyi.tbcache.com这个地址,应该是淘宝的一个cdn地址。

./frpc -c frpc.ini

因此,我特意去查了域名备案记录。如下图所示

然后在frp client启动的log中看到start proxy success,则为成功,如果没有成功,需要检查以上配置步骤是否有误。

关于DNS不得不说的一些事

果然,就是一个淘宝的cdn环境。

frp,比ngrok更加耐用的内网穿透工具

type为http类型的我们可以通过访问在frpc.ini文件中配置的custom_domains = web.frp.xxx.com域名进行测试,如果在浏览器或者以其它方式连通此域名则配置成功。

type为tcp的ssh,我们可以通过使用ssh连接进行测试:

那么这么配有什么好处呢?

ssh 穿透主机的用户名@云服务器的ip地址 -p 在frpc.ini中配置的端口

# 例如

唉,这题当思考题,快过来探讨留言!

总结

本文讲了DNS的一些常见知识点,希望大家有所收获。如果有其他关于DNS的问题,欢迎留言咨询。

ssh root@192.168.0.1 -p 5200

执行成功之后,需要输入穿透主机的用户登录密码,完成ssh连接

注:如果需要开启此配置,建议登录密码设置的难度高一些,或者禁止使用密码登录,而是采用秘钥的方式登录。这样可以在一定程度上保证主机的安全性,否则,这样将主机暴露在公网内,是极不安全的。

如果配置了frp server的dashboard,我们可以通过与服务器ip:配置dashboard端口的方式进行访问,如下图:

frp,比ngrok更加耐用的内网穿透工具

从中我们可以看到一些frp client连接的信息。

阅读全文
id_1广告位-300*300
相关推荐

写出域名解析的过程和具体步骤申请域名的流程?

写出域名解析的过程和具体步骤申请域名的流程?
域名分为国际域名和国内域名。国内域名需要实名制审核,具体流程如下:1、国际域名:...

这些免费DNS域名解析服务你们知道吗?稳定、可靠从DoH到ODoH,运营商再也不能搞DNS劫持了

这些免费DNS域名解析服务你们知道吗?稳定、可靠从DoH到ODoH,运营商再也不能搞DNS劫持了
DNS,即Domain Name System,中文为域名解析系统,平时我们可能...

域名解析中的cname和url转发有什么区别二级域名和URL转发的区别

域名解析中的cname和url转发有什么区别二级域名和URL转发的区别
a (address) 记录是用来指定主机名(或域名)对应的ip地址记录。用户可...

让我来帮你轻松搞定那些又臭又长的网页地址短网址系统(又名短链接系统)

让我来帮你轻松搞定那些又臭又长的网页地址短网址系统(又名短链接系统)
上网的时候我们总要与各种各样形式的网页链接打交道。那些很难记住的链接,特别是非常...

短链接/短网址缩短服务通常运用在哪些场景?又有什么样的作用?利用AdFly网址缩短服务跳转率分享赚美元方法分析操作

短链接/短网址缩短服务通常运用在哪些场景?又有什么样的作用?利用AdFly网址缩短服务跳转率分享赚美元方法分析操作
短链接特点简短、易记、易推广同时可以统计跟踪用户分析,让你的推广变得简单有效。在...

尼康以6800美金高价购买“尼康.世界”中文域名(转载)浅解姓氏域名的重要性,中小企业必看!

尼康以6800美金高价购买“尼康.世界”中文域名(转载)浅解姓氏域名的重要性,中小企业必看!
Sedo上周出售域名价值100万美元,其中包括了一些值得注意的新顶级域名。  新...

怎么缩短一个网址的链接?如何把这个网址简缩一下!不要二级域名的!急需!!!

怎么缩短一个网址的链接?如何把这个网址简缩一下!不要二级域名的!急需!!!
http://store.taobao.com淘宝首页http://store....

com.cn / .cn / .net的同名域名哪个主推比较好?快捷指令高级用法?

com.cn / .cn / .net的同名域名哪个主推比较好?快捷指令高级用法?
网站原本的网址是ip地址,例如www.wikipedia.org是一个域名,他的...

如何使用ScrapeBox查找过期域名几种域名whois查询的方法及平台介绍

如何使用ScrapeBox查找过期域名几种域名whois查询的方法及平台介绍
过期域名是SEO 项目中的一个宝贵资源,很多在做SEO项目的人都在挖掘它。域名注...

域名要过期多久之后才开放注册[网络天地]方便快捷查询网站域名Alexa和whios信息的捷径

域名要过期多久之后才开放注册[网络天地]方便快捷查询网站域名Alexa和whios信息的捷径
 所有的域名都会有一定的注册时间,最长的一半是10年,最短也要1年起注册。所以只...