王嘉怡 發表於 2023-7-31 00:00:00

Ubuntu系统网络故障排查的方法

<p>
        <span><strong>一、首先说明的是连不上 wifi 的原因无外乎以下几点</strong></span></p>
<p>
             1、网卡问题</p>
<p>
             2、没有安装网络驱动</p>
<p>
             3、安装了网络驱动,但是没有加载进内核</p>
<p>
             4、以上均没问题,那么就是路由器没有接入 internet 了</p>
<p>
        接下来,一步步排查</p>
<p>
        <span><strong>二、查看网卡信息</strong></span></p>
<p>
        可以使用以下命令查看网卡信息</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_437859">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">$ lshw -C network</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        正常情况至少会显示两个网卡,一个 eth0, 一个 wlan0。运行这个命令,我电脑的情况是: 两个网卡的 <code>description </code>字段后面都是 <code>unclaim</code>,并且没有 logical name。</p>
<p>
        <strong>根据这个命令的结果,可以得出以下结论</strong></p>
<p>
             1、网卡没有问题</p>
<p>
             2、考虑到之前能够连接 wifi,所以系统中肯定存在网络驱动</p>
<p>
             3、鉴于网卡信息识别为 “<code>unclaim</code>”,网络驱动应该没有在运行,即没有加载进内核</p>
<p>
        所以,接下来要做的便是: 找到和网卡相关的驱动,然后加载进内核</p>
<p>
        <span><strong>三、寻找网卡驱动</strong></span></p>
<p>
        运行以下命令</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_804536">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">$ vim </code><code class="bash plain">/etc/udev/rules</code><code class="bash plain">.d</code><code class="bash plain">/70-persistent-net</code><code class="bash plain">.rules</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <strong>结果如下</strong></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterxhtml" id="highlighter_865200">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="xhtml plain"># PCI device 0x10ec:0x8168 (r8169)</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="xhtml plain">SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="54:53:ed:31:c3:29", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                         </div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="xhtml plain"># PCI device 0x168c:0x0032 (ath9k)</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="xhtml plain">SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="08:3e:8e:d8:10:95", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0"</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        从这里得知,eth0, wlan0 的驱动分别是 r8169.ko, ath9k.ko</p>
<p>
        <strong>检查以上驱动模块是否在运行</strong></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_819511">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">$ lsmod | </code><code class="bash functions">grep</code> <code class="bash string">"ath9k"</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        发现没有任何输出,这个证明模块 <code>ath9k.ko </code>没有被加载</p>
<p>
        下面检查系统中是否真的已经有这个模块</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_816653">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">$ </code><code class="bash functions">find</code> <code class="bash plain">/ -name </code><code class="bash string">"ath9k.ko"</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <strong>结果为</strong></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterxhtml" id="highlighter_321797">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="xhtml plain">/lib/modules/3.13.0-32-generic/kernel/drivers/net/wireless/ath/ath9k/ath9k.ko</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="xhtml plain">/lib/modules/3.13.0-79-generic/kernel/drivers/net/wireless/ath/ath9k/ath9k.ko</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="xhtml plain">/usr/lib/debug/lib/modules/3.13.0-79-generic/kernel/drivers/net/wireless/ath/ath9k/ath9k.ko</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        以上说明模块 <code>ath9k.ko</code> 确实存在!但是,等等,上面前面两个 <code>ath9k.ko </code>分别处在不同的内核模块下,即 <code>3.13.0-32-generic </code>和 <code>3.13.0-79-generic </code>下。此时,我们查看以下当前系统的内核版本</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_311321">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">$ </code><code class="bash functions">uname</code> <code class="bash plain">-r</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <strong>结果显示的是</strong></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterxhtml" id="highlighter_584074">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="xhtml plain">3.13.0-92-generic</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        到这里问题已经很明朗了,我们系统中确实存在无线网卡驱动模块,<code>ath9k.ko</code>,但是当前运行的内核版本中却没有!解决办法有两个</p>
<p>
             1、在当前内核版本中,下载相应的 <code>ath9k.ko</code>,并通过 <code>insmod </code>命令安装</p>
<p>
             2、将当前的内核回退到 <code>3.13.0-79-generic </code>版本</p>
<p>
        由于我这里不仅仅是无线模块没有加载,eth0 模块也没有,所以猜测是因为系统在升级到 3.13.0-92 的过程中,发生错误导致的,所以,我这里选择将系统回退。</p>
<p>
        <span><strong>四、系统回退</strong></span></p>
<p>
        由于系统上已经存在 <code>3.13.0-79-generic</code>,所以不需要下载,安装</p>
<p>
        <strong>修改 boot 启动选项</strong></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_144230">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">$ vim </code><code class="bash plain">/boot/grub/grub</code><code class="bash plain">.cfg</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        在打开的文件中,存在诸多的 menuentry,每个 menuentry 对应开机菜单中的一个选项,找到 <code>3.13.0-79-generic</code> 内核对应的 menuentry,确定它的位置序号,第一个 menuentry 位置为 0,逐次加 1。</p>
<p>
        然后修改<code> /etc/default/grub</code> 中的 <code>GRUB_DEFAULT </code>值为刚才那个序列号</p>
<p>
        最后运行 <code>update-grub</code>,以及 <code>reboot </code>即可</p>
<p>
        <span><strong>总结</strong></span></p>
<p>
        以上就是这篇文章的全部内容了,希望本文的内容对大家能有一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。</p>
頁: [1]
查看完整版本: Ubuntu系统网络故障排查的方法