官方服务微信:dat818 购买与出租对接

解决Kali系统使用OpenVPN时网络无法访问的问题及调试方法

3万

主题

2

回帖

10万

积分

管理员

积分
104691
发表于 2024-12-20 19:16:34 | 显示全部楼层 |阅读模式
    文字总计: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> [AF_INET]</span></code></pre></p>
    如果按字面翻译,则表示检测到递归路由,并将来自tun接口的数据包丢弃到服务器接口[]。

    起初我并没有意识到发生了什么事。我在网上搜索了很长时间,找到了两万多个相关问答,但每个人的答案都很模糊,一直重复着“这道题很简单,答案就在谜语上”。 。

   


    然后我又明白了,大概是这样的:主机本身有一条默认路由,指向本地网关;连接成功后,服务器下发了两条可以替代默认路由的详细路由:0.0.0.0/1和128.0.0.0/1,然后发生了微妙的变化。新的访问请求必须到服务器网关,它本身也需要由底层网络承载。

    为了验证,我还在HCL上重现了该问题,看看是否是系统问题。

    我们首先构建一个包含 3 台设备的网络,然后在 RT1 和 RT3 之间建立 GRE 隧道。

    当没有配置新的详细路由时,RT1和RT3流量优先走基于GRE隧道的直连路由,底层基于默认路由转发。

    在调试报文转发过程时,可以看到逻辑上报文是从端口发出的,但实际上是从物理接口发出的。

    然后,我们在RT1上配置一条静态路由来模拟下发的详细默认路由。

    首先可以看到GRE隧道状态没有异常,但是出接口的路由掩码长度是一个GRE隧道接口,比默认路由长1位,符合最长匹配。

    此时,我们看一下数据包的调试信息。

   


    可以看到,本应底层转发的报文也进入了GRE隧道,导致报文转发异常。也就是报错中的路由递归问题。

    那么如何解决呢?确实,答案就在米面,只要让路由非递归即可。

    很简单,只要底层还能找到路到达另一端就可以了。

    知道了问题是怎么发生的,Kali的问题就解决了。我们只需要添加到目的网段的详细路由即可。

    不过这个连接过程应该是有问题的。我换了另一台服务器测试了一下,发现连接的时候发出了详细的路由。

    所以我之前的测试是没有问题的,因为我的服务器一直下发这个详细的路由,但是在Kali所连接的服务器上,并没有这个详细的路由。具体原因我还需要进一步调查。

    长按二维码
您需要登录后才可以回帖 登录 | 立即注册

Archiver|手机版|小黑屋|关于我们

Copyright © 2001-2025, Tencent Cloud.    Powered by Discuz! X3.5    京ICP备20013102号-30

违法和不良信息举报电话:86-13718795856 举报邮箱:hwtx2020@163.com

GMT+8, 2025-5-13 16:23 , Processed in 0.088700 second(s), 17 queries .