解决Kali系统使用OpenVPN时网络无法访问的问题及调试方法
文字总计:999字12图,预计阅读时间:1分钟使用了这么久,按照之前的配置指南()进行配置后,在系统、macOS系统和系统上都运行得很好。但后来收到反馈,有朋友在使用Kali时发现了一个小问题,就是连接成功后,也显示有VPN连接,但所有网络都无法访问。
一切看起来都正常,但是网络不通,只有Kali系统有问题,其他系统都使用正常。
看了日志告警,发现还有隧道保活超时提醒,此后一直无法建立连接。
这个时候就要用到debug了。前面提到(),可以通过命令设置日志级别。我们把日志级别配置为4看看有没有效果。
果然,连接完成后,出现了新的提醒。报警如下:
<p style='margin-bottom:15px;color:#555555;font-size:15px;line-height:200%;text-indent:2em;'> <pre class="code-snippet__js" data-lang="sql"><code><span class="code-snippet_outer">Recursive routing detected, <span class="code-snippet__keyword">drop</span> tun packet <span class="code-snippet__keyword">to</span> </span></code></pre></p>
如果按字面翻译,则表示检测到递归路由,并将来自tun接口的数据包丢弃到服务器接口[]。
起初我并没有意识到发生了什么事。我在网上搜索了很长时间,找到了两万多个相关问答,但每个人的答案都很模糊,一直重复着“这道题很简单,答案就在谜语上”。 。
https://img0.baidu.com/it/u=2626041093,1322270492&fm=253&fmt=JPEG&app=120&f=PNG?w=500&h=856
然后我又明白了,大概是这样的:主机本身有一条默认路由,指向本地网关;连接成功后,服务器下发了两条可以替代默认路由的详细路由:0.0.0.0/1和128.0.0.0/1,然后发生了微妙的变化。新的访问请求必须到服务器网关,它本身也需要由底层网络承载。
为了验证,我还在HCL上重现了该问题,看看是否是系统问题。
我们首先构建一个包含 3 台设备的网络,然后在 RT1 和 RT3 之间建立 GRE 隧道。
当没有配置新的详细路由时,RT1和RT3流量优先走基于GRE隧道的直连路由,底层基于默认路由转发。
在调试报文转发过程时,可以看到逻辑上报文是从端口发出的,但实际上是从物理接口发出的。
然后,我们在RT1上配置一条静态路由来模拟下发的详细默认路由。
首先可以看到GRE隧道状态没有异常,但是出接口的路由掩码长度是一个GRE隧道接口,比默认路由长1位,符合最长匹配。
此时,我们看一下数据包的调试信息。
https://img1.baidu.com/it/u=3391595784,3957350134&fm=253&fmt=JPEG&app=138&f=JPEG?w=909&h=500
可以看到,本应底层转发的报文也进入了GRE隧道,导致报文转发异常。也就是报错中的路由递归问题。
那么如何解决呢?确实,答案就在米面,只要让路由非递归即可。
很简单,只要底层还能找到路到达另一端就可以了。
知道了问题是怎么发生的,Kali的问题就解决了。我们只需要添加到目的网段的详细路由即可。
不过这个连接过程应该是有问题的。我换了另一台服务器测试了一下,发现连接的时候发出了详细的路由。
所以我之前的测试是没有问题的,因为我的服务器一直下发这个详细的路由,但是在Kali所连接的服务器上,并没有这个详细的路由。具体原因我还需要进一步调查。
长按二维码
页:
[1]