1.WireGuard 教程:使用 DNS-SD 进行 NAT-to-NAT 穿透
2.Windows系统搭建VisualSVN服务结合内网穿透实现公网访问
3.有什么免费内网穿透的音频源码音频源码软件可以用吗?
4.Vue3中deep样式穿透的使用细节及源码解析
5.用Ngrok实现内网穿透
6.有什么免费内网穿透的软件可以用吗?
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 穿透问题的解决方案,它只是定义了一个机制,你可以用这个机制来组建实际的uboot 最新源码解决方案。 — 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 月...
Windows系统搭建VisualSVN服务结合内网穿透实现公网访问
SVN是subversion的缩写,是一种开放源代码的版本控制系统。它通过采用分支管理系统的高效管理,使多个人可以共同开发同一个项目,实现资源共享,文件永久直链源码最终实现集中式管理。作为一个通用的系统,Subversion可以用来管理任何类型的文件,包括程序源码。
SVN与CVS一样,也是一个跨平台的软件,支持大多数常见的操作系统。本文主要介绍SVN服务器在Windows平台上的安装和配置过程,以及如何结合cpolar内网穿透工具,实现随时随地公网远程访问内网本地服务。
1. VisualSVN安装与配置
首先,到SVN的官方网站:visualsvn.com/downloads... 下载服务端安装程序,下载好安装程序后,双击进入安装配置界面,点击Next进行下一步。
接受勾选框打勾,点击Next进入下一步,默认当前选择,点击Next进入下一步。
本界面中有四个选项,除了端口外的其他三个选项都可以点击Browse进行路径修改。Location:软件的安装位置,注意不要出现中文、空格或特殊字符。Repositories:默认版本仓库位置,自己选择。Server Port:端口号,或者都可以。Backups:备份文件保存路径。
我这里选择了默认路径与端口,点击Next进入下一步,不打钩,点击Next进入下一步,默认第一个选项,点击Next进入下一步。
点击Install进行安装,安装进度条走完后,点击Finish完成安装。
2. VisualSVN Server管理界面配置
点击Finish后,会弹出SVN Server的lua 录音源码管理界面,点击上方导航中的操作按钮,点击选项中的Properties。
在打开的窗口中,首先点击左侧的第三项:Network,然后点击右侧的Server name下方的选择框,输入服务器名称,这里我选择填写了localhost,也可以填写本地局域网的ip。
服务端口默认选择:,然后把下方使用安全连接的勾选取消,点击下方OK。
然后点击左侧SVN服务下方的Users,右键选择新建user,在弹出的窗口中设置用户名和密码,并确认密码,点击OK。
创建好新用户后,我们点击左侧SVN服务下方的Repositories,右键选择新建Repository(项目),点击Next进入下一步。
填写项目名称,这里我填写了共享文件,大家可以自定义填写,点击Next进入下一步。
默认选择即可,点击Next进入下一步,默认选择即可,点击Next进入下一步。
打钩选项默认即可,点击Create开始创建,点击Finish完成项目创建。
此时,在浏览器输入localhost,在弹窗中输入刚才在SVN服务时配置的用户名admin和密码,点击登录。
登录后,即可在本地局域网看到刚才在SVN创建的项目:共享文件。
3. 安装cpolar内网穿透
此时VisualSVN Server已经成功登录并运行,不过只能在本地访问,如果打算在公网环境随时随时访问内网的VisualSVN服务,我们需要安装cpolar内网穿透工具来实现。
3.1 注册账号
进入cpolar官网:cpolar.com/,点击右上角的免费注册,使用邮箱免费注册一个cpolar账号并登录。
3.2 下载cpolar客户端
登录成功后,点击下载cpolar到本地并安装(一路默认安装即可)本教程选择下载Windows版本。
3.3 登录cpolar web ui管理界面
在浏览器上访问.0.0.1:,使用所注册的cpolar邮箱账号登录cpolar web ui管理界面(默认为本地端口)。
3.4 创建公网地址
登录成功进入主界面后,我们点击左侧仪表盘的隧道管理——隧道列表,再点击创建隧道。
点击创建,此时,点击左侧状态中的在线隧道列表,可以看到刚才创建的svn隧道,生成了两个公网地址,有两种访问方式,分别是已备案。
注意需要将cpolar套餐升级至基础套餐或以上,且每个套餐对应的带宽不一样cpolar.cn已备案。
登录cpolar官网,点击左侧的预留,选择保留二级子域名,设置一个二级子域名名称,点击保留,保留成功后复制保留的二级子域名名称。
以本次教程为例,地区选择China VIP,二级域名填写mysvn,描述填写svntest,点击保留。
保留成功后复制保留的二级子域名地址,登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道:mysvn,点击右侧的编辑。
修改隧道信息,将保留成功的二级子域名配置到隧道中。
点击更新,更新完成后,打开在线隧道列表,此时可以看到公网地址已经发生变化,地址名称也变成了保留和固定的二级子域名名称。
最后,我们使用固定的公网地址进行连接访问,复制二级子域名:mysvn.vip.cpolar.cn到另一台公网电脑浏览器打开,无报错和连接异常,输入用户名密码后,可以看到连接成功,这样一个固定不变的地址访问就设置好了,您可以随时随地使用该域名来公网访问内网VisualSVN Server。
转载自cpolar极点云文章:Windows系统搭建VisualSVN服务结合内网穿透实现公网访问
有什么免费内网穿透的软件可以用吗?
为了在内网环境下实现穿透,常常需要借助一些工具或软件。其中,Ngrok被广泛使用于这类需求中,它能够实现任意端口映射,对于解决内网访问问题提供了便利。
Ngrok的使用主要涉及以下几个步骤:
1. 创建并进入用于编译程序的目录。
2. 更新包管理器,并安装Git和Go语言环境。
3. 通过Git克隆Ngrok源代码到本地。
4. 设置Go语言安装路径和Ngrok域名的环境变量。
5. 生成并复制自定义证书到Ngrok目录。
6. 分别生成Ngrok的服务器端和客户端。
7. 将生成的客户端复制至Windows的系统目录中,并创建配置文件。
8. 设置注册表项,并通过配置文件启动服务。
9. 对系统防火墙进行必要调整,以确保服务能正常运行。
. 将ngrok.exe文件放置于系统目录,以便于开机自动运行。
. 使用配置文件启动服务,测试映射端口。
通过上述步骤,内网穿透问题得以解决,实现不同端口的映射,方便了内网与外网的通信,提高了项目实施的灵活性和效率。通过Ngrok,无需固定IP,也能实现类似TeamViewer那样的远程访问功能。
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库的样式。
用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:`。
有什么免费内网穿透的软件可以用吗?
寻找免费且高效的内网穿透工具?ngrok无疑是你的不二之选!面对IPv4资源日益紧张的挑战,ngrok以其便捷的映射功能,让你的网络服务突破防火墙的束缚。接下来,让我们一步步解锁如何在Ubuntu(如.)上轻松配置ngrok。必备前提:确保你拥有备案域名,服务器(如ECS)拥有固定的公网IP,并且最好设置了防火墙,将域名A记录指向服务器。
动手编译:
首先,确保你已经安装了Git和Go语言环境,这是ngrok的基础配置。
接着,从ngrok官方仓库克隆源代码,并设置必要的环境变量,让ngrok能够顺利运行。
接下来,下载并替换证书文件:rootCA.pem、server.crt和server.key,将它们放置在ngrok目录的相应位置。
安全提示:操作时务必使用root权限,设置并更新ngrok的密码,同时配置好你的ngrok域名,确保一切设置准确无误。
接着,进行一些必要的文件操作以适应不同平台: 1. rename与配置:将server.key重命名为snakeoil.key,并将其放入assets/server/tls/目录中。 2. 生成二进制文件:在ngrok目录下,根据你的系统(Windows或Linux)生成release-server和release-client文件。 对于Windows用户,ngrok为你准备了ngrok.exe和ngrokd.exe(服务器端)。在Windows Server上,创建ngrokserver目录,复制相关文件,并配置服务以隐身运行或作为后台服务。 在Windows客户端,将ngrok.exe和ngrok.cfg配置文件移动至c:\windows\system,然后启动ngrok,设置远程桌面映射,以便支持多个端口的穿透。 防火墙协作:别忘了检查并确保防火墙对ngrok所使用的端口开放,以便外部访问。 最后,通过测试远程桌面连接来验证ngrok的设置,如果一切顺利,你应该能够成功实现内网穿透。ngrok的强大功能让你的网络服务如同穿云破雾,畅通无阻!