1.Vue3中deep样式穿透的网络网络使用细节及源码解析
2.7. 用Rust手把手编写一个wmproxy(代理,内网穿透等),穿透穿透 HTTP及TCP内网穿透原理及运行篇
3.一文搞懂frp内网穿透并搭建配置使用
4.有什么免费内网穿透的软件可以用吗?
5.极空间NAS终于可以远程访问Docker,还能给全家设备内网穿透!源码源码
6.用Ngrok实现内网穿透
Vue3中deep样式穿透的使用细节及源码解析
在Vue3的开发中,遇到第三方UI库(如element-plus)样式失效的网络网络问题时,可以借助:deep()方法实现样式穿透。穿透穿透试玩软件源码开发首先理解一下 scoped属性的源码源码作用,它在组件style标签中设置,设置设置能确保样式隔离,网络网络避免组件间的穿透穿透样式污染。
例如,源码源码在element-plus的设置设置组件中,即使设置了宽度,网络网络由于 scoped属性导致的穿透穿透属性选择器不匹配,导致样式无法生效。源码源码这时,:deep()派上了用场。它将属性选择器前置,如:.el-inputwrapper::v-deep(.bar)会被转换为[data-v-xxxxxxx] .el-inputwrapper .bar,从而定位到UI库的选择器。
源码解析在core-main/packages/compiler-sfc/src/compileStyle.ts中,当遇到 scoped时,会使用postcss插件将CSS转换为抽象语法树,然后在processRule函数中,rewriteSelector()方法会处理:deep,将其转换为穿透选择器。
总结来说,当在Vue3中使用第三方UI库时,若样式设置无响应,可以考虑使用:deep()来解决样式穿透问题,以便于精确地控制和修改UI库的样式。
7. 用Rust手把手编写一个wmproxy(代理,内网穿透等), HTTP及TCP内网穿透原理及运行篇
内网与公网的差异:
内网通常指的是局域网环境,包括家庭、网吧、公司、学校网络,网络内部的忠县网站源码设备可以互相访问,但一旦越出网络,无法访问该网络内的主机。公网则泛指互联网,是一个更大规模的网络环境,拥有单独的公网IP,任何外部地址可以直接访问,从而实现对外服务。
内网穿透的需求与场景:
场景一:开发人员本地调试接口,线上项目遇到问题或新功能上线,需要进行本地调试,且通常需要HTTP或HTTPS协议支持。
场景二:远程访问本地存储或公司内部系统,如外出工作或需要远程访问本地的私有数据,如git服务或照片服务等。
场景三:本地搭建私有服务器,为减少云上服务器高昂的费用,使用本地电脑作为服务器,满足对稳定性要求较低的场景。
内网穿透原理:
内网穿透通过在内网与公网之间建立长连接,实现数据转发,使外部用户能够访问到内网服务器的数据。客户端与服务端保持长连接,便于数据的推送,实质上是在转发数据以实现穿透功能。
Rust实现内网穿透:wmproxy工具实现简单易用的内网穿透功能。客户端与服务端分别配置yaml文件,启动程序以实现穿透。
HTTP与TCP内网穿透测试:
在本地端口启动一个简单的HTTP文件服务器,端口实现HTTP内网穿透,将流量映射到端口,通过访问/fatedier/fr…)获取源代码。然后,在服务器中执行下载、解压、移动至/usr/local等操作。服务器配置文件(frps.ini)与客户端配置文件(frpc.ini)分别用于服务端与客户端配置。
配置服务端时,主线指标源码创建并编辑frps.ini文件,设置好路径、监听端口等信息。服务端启动后,可通过systemctl进行控制,实现启动、停止、重启、查看状态等操作。同样地,客户端需根据frpc.ini文件进行配置,并通过启动frpc命令进行运行。
访问内网服务时,只需运行服务后输入**custom_domains:vhost_/iii/lucky#...
安装教程如下:
根据iii老哥的说明,lucky这个Docker在不挂载主机目录时,删除容器时会同步删除配置信息。
所以为了避免以后删除后需要重新配置,接下来我们随意在极空间中新建一个文件夹,用来将保存这个容器的本地配置文件。
然后在极空间客户端中的Docker——镜像——仓库中搜索gdy/lucky。
点击“下载”按钮后,保持默认的latest版本不用更改,继续点击”下载“。
这时才发现原来极空间已经可以显示拉取的进度了,着实用心了。
下载完成后,就可以在本地镜像中找到我们刚才拉取的Docker了,接下来我们直接双击打开。
在文件夹路径中,用我们刚才新建的文件夹来装载Docker配置文件:
在网络选项中,将驱动更改为HOST模式,这样Docker容器相当于是宿主机中的一个进程,而不是一个独立的机器,其中所运行的程序同时也会占用宿主机的对应端口。
接下来,我们就可以在网页中输入NASIP地址+端口号进入lucky进行设置工作。当然如果此时你不在家的手机导游源码话,也同样可以通过极空间的远程访问功能给它新建一个连接:
连接lucky后,首先需要登录,默认管理账号和密码都是。
登录后界面如下,功能很多,大家可以多研究研究。
由于我们只是想转发家庭局域网中其他设备的管理端口,所以主要应用到端口转发的相关功能。在这里依次点击菜单——端口转发——转发规则列表,最后点击”添加转发规则”。
接下来说一下各个需要填入的参数:
点击添加后,即可看到转发规则已经生成了。
此时如果在家中的话,我们尝试一下,用极空间的局域网地址+端口能否打开软路由网关的管理页面。
如图所示,我的极空间局域网IP地址是...:
然后在浏览器中用极空间IP+端口号,能顺利访问软路由的后台管理页面:
输入账号密码后也能正常进行操作:
确认lucky转发规则生效后,我们就可以回到极空间的“远程管理”功能中,为路由器创建一个新连接:
点击这个新创建的连接,既可以在极空间客户端内,访问路由器的管理页面了:
再试一下,用极空间来查看和管理家中在跑的京东云无线宝也没问题,这下是真的方便很多了:
本文中的相关操作会涉及到Docker,在极空间NAS产品线中,能使用Docker的版本包括4G内存版的Z2S,以及新Z4、Z4S和Z4S旗舰版。
如果您是非NAS老鸟的新人用户,只是想买台NAS给家人保存资料和照片视频,顺便用极影视看看**电视剧的话,个人感觉入手双盘位的Z2S 4G版就足够了。Rockchip RK CPU性能很棒,4K播放没啥压力,还能学着玩一玩Docker,关键是价格还低,很适合入门使用。溧阳麻将源码
我自己在用的这款新Z4的处理器是X平台4核心4线程的J,用了快一年后感觉对我来说性能完全溢出了,没遇到过性能瓶颈,而且标配了两个2.5G网口,传输速度更给力,我自己和家人都用得很满意。而且这一款现在价格也比发售时降了不少,个人强烈推荐。
不过美中不足的是,极空间新Z4只有一条M.2固态硬盘插槽,对插槽数量和处理器有更高要求的同学可以考虑入手Z4S和Z4S旗舰版。
其中极空间Z4S采用的是N处理器,而Z4S旗舰版使用的是更强的N处理器,性能更强,能通过两条M.2固态硬盘插槽启用读写双缓存,还有 HDMI2.0 接口可以直接输出画面给电视,属于一步到位的选择了。
另外,极空间的X处理器机型,包括Z4、Z4S、Z4S旗舰版等都全系采用了2个2.5G网口,能发挥机械硬盘的全部读写实力,传输数据更加快速,可以和现在基本标配了2.5G网口的电脑主板完美配合。
不过一般我们家里路由器的2.5G网口数量都比较有限,硬路由也就配备1-2个而已,软路由一般也不过4-5个。如果遇到家里2.5G设备多、路由器2.5G网口不够用的情况,就可以考虑增加2.5G交换机了。
正好最近2.5G交换机的硬件方案有了突破,不少厂商都推出的新型号产品,不止售价大幅度下降,而且更关键的是,交换机的发热更少、温度更低,已经很适合家庭长期使用了。
我家使用2.5G网口的设备比较多,所以自己也趁这机会入手了一台兮克的SKS-8GPY1XF,这台交换机2.5G交换机同时拥有8个2.5G电口+1个G光口(SFP+),其中光口还支持2.5G猫棒,售价却只要元,这价格放在半年前想都不敢想,属实太香了。
由于采用了被动散热设计,兮克SKS这台8口2.5G交换机用起来非常安静,但是实测运行温度并不高,而且使用一段之后稳定也很棒,有需要的朋友可以放心入手。
极空间这次新开发的远程访问功能用起来真的方便,可以通过简单的操作就可以轻松访问NAS中的Docker应用,对喜欢折腾Docker的用户来说极其实用。
另外,只要家里有一台极空间NAS,通过iii大佬开发的gdy/lucky这个Docker的帮助,就能为整个家庭局域网中的设备都进行内网穿透。这样即使我们人不在家,也能随意管理和配置家里的各个网络设备,充分利用了极空间提供了中转带宽,免去了折腾DDNS和其他内网穿透工具的麻烦和费用,这一点个人感觉超级方便。
好了,以上就是今天为大家分享的内容了。如果本文对您有帮助的话,期待大家给个关注点赞收藏三连,您的支持就是我持续更新的最大动力!
用Ngrok实现内网穿透
Ngrok简介:
Ngrok是用于内网穿透的开源软件,它的1.x版本存在内存泄漏问题,从2.x版本开始转向闭源。其工作原理是:服务器端运行于拥有公网IP的服务器上,监听/inconshrevea...
2. 外网服务器:配备公网IP的服务器,需设置子域名(A、CNAME)。
3. 内网客户端:可以是虚拟机,本文以Ubuntu .为例。
准备编译环境:
1. 安装go:使用命令`sudo apt install golang`。
2. 安装git:通过命令`sudo apt install git`实现。
3. 生成自签名证书:执行`cd ngrok`至项目目录,设置服务器域名`NGROK_DOMAIN="ngrok.abc.com"`。然后依次运行`openssl genrsa -out rootCA.key `、`openssl req -x -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days -out rootCA.pem`、`openssl genrsa -out device.key `、`openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr`、`openssl x -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days `。
4. 将证书复制到指定文件夹:`cp rootCA.pem ../assets/client/tls/ngrokroot.crt`、`cp device.crt ../assets/server/tls/snakeoil.crt`、`cp device.key ../assets/server/tls/snakeoil.key`。
编译服务器和客户端:
1. 服务器编译:在Linux系统中,使用命令`GOOS=linux GOARCH= make release-server`(位)或`GOOS=linux GOARCH=amd make release-server`(位),针对Mac OS和Windows系统,分别使用相应命令进行编译。
2. 客户端编译:根据系统类型,执行`GOOS=linux GOARCH= make release-client`(位)或`GOOS=linux GOARCH=amd make release-client`(位),同样包括Mac OS和Windows系统。
编译完成后,服务器和客户端程序将被生成在bin文件夹中。
运行服务器:
将`ngrokd`程序复制至服务器指定目录,若端口被占用可更改端口号,并确保开启防火墙并打开端口允许外网访问。具体操作参考相关文章。
开启服务器命令:`./ngrokd -domain="ngrok.abc.com" -`即可转发至`ngrok.abc.com:`。
WireGuard 教程:使用 DNS-SD 进行 NAT-to-NAT 穿透
原文链接: fuckcloudnative.io/post...
WireGuard 是由 Jason A. Donenfeld 等人创建的下一代开源 *** 协议,旨在解决许多困扰 IPSec/IKEv2、Open*** 或 L2TP 等其他 *** 协议的问题。 年 1 月 日,WireGuard 正式合并进入 Linux 5.6 内核主线。
利用 WireGuard 我们可以实现很多非常奇妙的功能,比如跨公有云组建 Kubernetes 集群,本地直接访问公有云 Kubernetes 集群中的 Pod IP 和 Service IP,在家中没有公网 IP 的情况下直连家中的设备,等等。
如果你是第一次听说 WireGuard,建议你花点时间看看我之前写的 WireGuard 工作原理。然后可以参考下面两篇文章来快速上手:
如果遇到某些细节不太明白的,再去参考 WireGuard 配置详解。
本文将探讨 WireGuard 使用过程中遇到的一个重大难题:如何使两个位于 NAT 后面(且没有指定公网出口)的客户端之间直接建立连接。
WireGuard 不区分服务端和客户端,大家都是客户端,与自己连接的所有客户端都被称之为Peer。
1. IP 不固定的 Peer
WireGuard 的核心部分是 加密密钥路由(Cryptokey Routing),它的工作原理是将公钥和 IP 地址列表(AllowedIPs)关联起来。每一个网络接口都有一个私钥和一个 Peer 列表,每一个 Peer 都有一个公钥和 IP 地址列表。发送数据时,可以把 IP 地址列表看成路由表;接收数据时,可以把 IP 地址列表看成访问控制列表。
公钥和 IP 地址列表的关联组成了 Peer 的必要配置,从隧道验证的角度看,根本不需要 Peer 具备静态 IP 地址。理论上,如果 Peer 的 IP 地址不同时发生变化,WireGuard 是可以实现 IP 漫游的。
现在回到最初的问题:假设两个 Peer 都在 NAT 后面,且这个 NAT 不受我们控制,无法配置 UDP 端口转发,即无法指定公网出口,要想建立连接,不仅要动态发现 Peer 的 IP 地址,还要发现 Peer 的端口。
找了一圈下来,现有的工具根本无法实现这个需求,本文将致力于不对 WireGuard 源码做任何改动的情况下实现上述需求。
2. 中心辐射型网络拓扑
你可能会问我为什么不使用 中心辐射型(hub-and-spoke)网络拓扑?中心辐射型网络有一个 *** 网关,这个网关通常都有一个静态 IP 地址,其他所有的客户端都需要连接这个 *** 网关,再由网关将流量转发到其他的客户端。假设 Alice 和 Bob 都位于 NAT 后面,那么 Alice 和 Bob 都要和网关建立隧道,然后 Alice 和 Bob 之间就可以通过 *** 网关转发流量来实现相互通信。
其实这个方法是如今大家都在用的方法,已经没什么可说的了,缺点相当明显:
本文想探讨的是Alice 和 Bob 之间直接建立隧道,中心辐射型(hub-and-spoke)网络拓扑是无法做到的。
3. NAT 穿透
要想在Alice 和 Bob 之间直接建立一个 WireGuard 隧道,就需要它们能够穿过挡在它们面前的 NAT。由于 WireGuard 是通过 UDP 来相互通信的,所以理论上 UDP 打洞(UDP hole punching) 是最佳选择。
UDP 打洞(UDP hole punching)利用了这样一个事实:大多数 NAT 在将入站数据包与现有的连接进行匹配时都很宽松。这样就可以重复使用端口状态来打洞,因为 NAT 路由器不会限制只接收来自原始目的地址(信使服务器)的流量,其他客户端的流量也可以接收。
举个例子,假设Alice 向新主机 Carol 发送一个 UDP 数据包,而 Bob 此时通过某种方法获取到了 Alice 的 NAT 在地址转换过程中使用的出站源 IP:Port,Bob 就可以向这个 IP:Port(2.2.2.2:) 发送 UDP 数据包来和 Alice 建立联系。
其实上面讨论的就是完全圆锥型 NAT(Full cone NAT),即一对一(one-to-one)NAT。它具有以下特点:
大部分的 NAT 都是这种 NAT,对于其他少数不常见的 NAT,这种打洞方法有一定的局限性,无法顺利使用。
4. STUN
回到上面的例子,UDP 打洞过程中有几个问题至关重要:
RFC 关于 STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)的详细描述中定义了一个协议回答了上面的一部分问题,这是一篇内容很长的 RFC,所以我将尽我所能对其进行总结。先提醒一下,STUN 并不能直接解决上面的问题,它只是个扳手,你还得拿他去打造一个称手的工具:
STUN 本身并不是 NAT 穿透问题的解决方案,它只是定义了一个机制,你可以用这个机制来组建实际的解决方案。 — RFC
STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)是一种网络协议,它允许位于NAT(或多重NAT)后的客户端找出自己的公网地址,查出自己位于哪种类型的 NAT 之后以及 NAT 为某一个本地端口所绑定的公网端口。这些信息被用来在两个同时处于 NAT 路由器之后的主机之间建立 UDP 通信。该协议由 RFC 定义。
STUN 是一个客户端-服务端协议,在上图的例子中,Alice 是客户端,Carol 是服务端。Alice 向 Carol 发送一个 STUN Binding 请求,当 Binding 请求通过 Alice 的 NAT 时,源 IP:Port 会被重写。当 Carol 收到 Binding 请求后,会将三层和四层的源 IP:Port 复制到 Binding 响应的有效载荷中,并将其发送给 Alice。Binding 响应通过 Alice 的 NAT 转发到内网的 Alice,此时的目标 IP:Port 被重写成了内网地址,但有效载荷保持不变。Alice 收到 Binding 响应后,就会意识到这个 Socket 的公网 IP:Port 是 2.2.2.2:。
然而,STUN 并不是一个完整的解决方案,它只是提供了这么一种机制,让应用程序获取到它的公网 IP:Port,但 STUN 并没有提供具体的方法来向相关方向发出信号。如果要重头编写一个具有 NAT 穿透功能的应用,肯定要利用 STUN 来实现。当然,明智的做法是不修改 WireGuard 的源码,最好是借鉴 STUN 的概念来实现。总之,不管如何,都需要一个拥有静态公网地址的主机来充当信使服务器。
5. NAT 穿透示例
早在 年 8 月...