书籍推荐《Wireshark网络分析就是这么简单》
工作性质原因,在现场进行项目实施部署的时候,总会遇到不少网络,以前在学校学习的计算机网络知识大多都是纸上谈兵,或者照着书本做一些照猫画虎的实验,当然也存在自己没太重视实践的原因,遇事不决就是搜索引擎【当然现在是问AI问得多了】,然后一顿操作,发现不行,又继续找答案,行了就了事,没有怎么将自己学的知识所结合起来,终归是少了些许自己的思考,后无意间在微信读书上发现了《Wireshark网络分析就是这么简单》这一书,被笔者风趣的文笔所吸引,同时也认识到自己在计算机网络方面的欠缺,遂学习了一番,可以说这本书对开发人员还是挺有帮助的,所以写下这篇文章推荐一下。
注:纯粹出于学习目的与个人兴趣摘抄书籍,不追求任何经济利益。其他权利以原作者和出版社的主张为准。本摘抄本只供学习研究参考之用,不得公开传播发行或用于商业用途。有能力阅读书籍者请购买正版支持。
小试牛刀
背景:项目部署等原因,本地开发环境下挂得有两个VPN,暂且称之为VPN_A,VPN_B,VPN_A单独开启可以连接到项目A的开发测试环境、线上环境。VPN_B单独开启可以访问到团队内部的ones等需求地址。但是同时开启VPN_A和B,只能访问项目A的线上环境和访问团队内部的ones等需求地址,不能访问到项目A的开发测试环境。
因此问题就出在了,访问开发测试环境上,毕竟我们开发的时候时不时需要核对需求等,需要访问团队内部的一些站点,但是一旦如果你开启VPN_B,此时会访问开发测试环境失效。所以针对上述情况,学了Wireshark之后,遇事不决先抓个包看看【这里不讲Wireshark怎么使用,书里面已经很详细了,这里只是分享一下学了Wireshark后解决网络问题有多么不一样】。我这里抓包发现ping 对应的开发环境地址一直包ICMP未响应,这说明了咱们的包根本就没过去,没过去可能和咋们的转发路由有关,于是又去看了看路由地址nestat -nr | grep ip,果真发现了对应的问题,咋们发开环境的ip路由被VPN_B所覆盖了,因此导致访问开发环境失效,于是设置上就行了。当然,这里只是简单说了一下,如果你是有经验的开发,很可能就会想到如下的一些影响
1. 路由冲突
当同时连接两个VPN时,可能会出现路由冲突或优先级问题。VPN会修改本地的路由表,把特定的流量路由到对应的VPN接口。如果两个VPN都试图控制相同的网络段,可能会导致路由冲突。
解决方案:手动修改路由表,为VPN_A和VPN_B设置不同的优先级。可以通过route命令或ip route命令来手动添加或修改路由。例如,确保项目A的开发测试环境流量优先通过VPN_A,而团队内部的流量优先通过VPN_B。
2. VPN配置中的默认网关设置
某些VPN配置会把所有的流量都通过VPN传输(即启用“默认网关在远程网络”设置),这样会覆盖本地网络的默认路由。如果两个VPN都试图设置默认网关,可能会导致路由到开发测试环境的流量无法正确转发。
解决方案:配置VPN连接,使其只路由特定的网络段流量,而不是所有流量。例如,可以在VPN_A的配置中添加静态路由,让其只处理项目A的相关IP地址段。
3. DNS解析问题
同时连接两个VPN时,DNS服务器可能会发生变化,导致某些域名解析失败。不同的VPN可能会配置不同的DNS服务器,当VPN连接上时,本地DNS配置可能会被覆盖。
解决方案:手动配置本地的DNS服务器,或者配置系统使用多个DNS服务器来解析不同的域名。可以修改/etc/hosts文件或手动设置本地的DNS解析优先级。
4. VPN网络适配器顺序
操作系统会根据网络适配器的顺序和优先级来决定如何路由流量。如果VPN_A的网络适配器的优先级低于VPN_B,即使VPN_A已经连接成功,流量可能仍会被VPN_B拦截。
解决方案:调整网络适配器的顺序或修改适配器的优先级,使需要优先访问的VPN的网络适配器排在前面。
5. 策略路由或策略路由表设置
一些系统支持策略路由,可以根据源IP地址或目标IP地址进行路由选择。这可以为不同的VPN流量制定特定的路由规则。
解决方案:设置策略路由规则,根据流量的目标IP地址决定走哪个VPN。
通过上述方法,可以逐步定位并解决同时连接多个VPN时的网络问题。
不过对于我这种网络实践经验欠缺的来说,通过抓包,分析协议等方式,无疑给我提供了一扇解决网络问题的方向和利刃。
网络延迟
背景:通过mac自带的终端工具连接上开发环境的服务器只需要不到1s,但是连接到线上服务器却需要15s左右的延迟,相信平时不怎么接触网络的同学一看到这种情形都会懵,为什么会慢这么多?因为本地网络的原因?还是服务器资源的原因?亦或是配置的原因?没有Wireshark的话,我遇到这类问题,相信也是会一个一个的进行尝试,直到遇到正确答案为止,但是有了Wireshark,不妨抓个包来分析分析。
后续经过抓包分析以及网络资料查找【也算是重新巩固一下计算机网络的知识,毕竟遇到得少,知识忘得快😁】,得出结论就是服务器在收到ssh访问请求时,会先查询该客户端IP所对应的PTR记录。假如经过5秒钟还没有收到回复,就再发一次查询。如果第二次查询还是等了5秒还没回复,再等一次就彻底放弃查询。后经验证,在DNS服务器中添加了对应ip的PTR记录,再次登录,发现不到一秒接连接上了。明白了DNS查询就是问题的起因,接下来就知道怎么进一步开启或关闭配置解决问题了。
小结
当然,笔者这里没有去阐述抓包以及分析的过程,只是想分享一下,有了Wireshark这个抓包工具,解决网络问题就有了一条新的方向和思路。实际的现场实施过程,往往比上面的场景套复杂得多,因此,掌握Wireshark,你在面对这些复杂的网络问题的时候,不至于手足无措,你脑海里面的网络知识,也不会是纸上谈兵,而有了实际的分析和用武之地。纸上得来终觉浅,绝知此事要躬行,加油吧💪🏻,各位互联网的同行。