0

    外行:“网断了”!内行:“断在哪儿我全知道”!3指令精准定位

    2023.05.29 | admin | 155次围观

    引言

    做Web开发必不可少与网络连接打交道,就是运维也整天都是301,302,401,403,404,500,502,503。见的多了,你都会烂熟于胸。让我们采用自上而下的方法,来测试Internet连接并对其进行故障排除。

    下面的每个步骤,都可能为你提供有关互联网连接可能存在的问题的关键点。

    Step 1

    如何测试互联网连接,第一种也是最基本的方法,是打开浏览器,浏览目标网址。

    如果没有可用的图形界面,可以尝试使用 curl 获取目标网址的内容。例如:

    $ curl -I https://www.example.com
    HTTP/1.1 200 OK

    如果可以在浏览器上看到网站,或者在使用 curl 命令时收到 200 OK,那就可以确认连接访问是成功的。

    如果不成功,那中间环节就多的去了。操作系统可能有问题,路由可能有问题,Web服务器可能有问题,防火墙可能有问题,等等等等。

    Step 2

    如果第一步不能解决问题,那么是时候在网络传输的底层,检查互联网的连接了。

    请执行以下 ping 命令,该命令会使用外部服务器的 IP 地址向其发送网络数据包。

    在本例中,让我们尝试 ping Google 的 DNS 服务器:

    $ ping -c 2 8.8.8.8
    PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
    64 bytes from 8.8.8.8: icmp_seq=1 ttl=54 time=10.4 ms
    64 bytes from 8.8.8.8: icmp_seq=2 ttl=54 time=10.2 ms
    --- 8.8.8.8 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1006ms
    rtt min/avg/max/mdev = 10.157/10.291/10.425/0.134 ms

    上述命令正常的情况,必须是 0% 的数据包丢失

    Step 3

    如果无法 ping 通,则说明你已断开与互联网的连接,或者你的网络接口的网关设置不正确。

    首先检索网关 IP 地址首选dns和备用dns都要填上吗,并尝试使用 ping 命令查看是否可以访问该地址。

    例如,首先使用 ip 命令获取默认网关 IP 地址:

    $ ip r
    default via 192.168.1.1 dev enp0s3 proto dhcp metric 100

    接下来,尝试 ping 此 IP 地址:

    $ ping -c 1 192.168.1.1
    PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
    64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=2.77 ms
    --- 192.168.1.1 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 2.765/2.765/2.765/0.000 ms

    如果可以到达网关,但无法 ping 通服务器,那么很可能断网了。

    如果您无法 ping 通网关,要么是默认网关设置不正确,要么是网关阻止了 ping 请求ICMP包。

    Step 4

    下一步是检查 DNS 服务器网络配置:

    $ systemd-resolve --status | grep Current
          Current Scopes: DNS
      Current DNS Server: 192.168.1.1

    我们的系统设置为使用IP地址为 192.168.1.1 的 DNS 服务器主机。确保你可以访问到该 DNS 服务器。

    同样,使用 ping 指令:

    $ ping -c 2 192.168.1.1
    PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
    64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.535 ms
    64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.570 ms
    --- 192.168.1.1 ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1016ms
    rtt min/avg/max/mdev = 0.535/0.552/0.570/0.017 ms

    同样,上述命令的输出需要保证 0% 的数据包丢失率。

    如果无法连接到 DNS,这可能意味着它没有响应 ping 的 ICPM 包首选dns和备用dns都要填上吗,DNS 在防火墙后面,或者服务器已关闭。

    在这种情况下,请使用备用 DNS 服务器更新 /etc/resolv.conf 文件 。

    Step 5

    通过尝试使用 dig 命令解析DNS名称,来测试DNS服务器:

    $ dig @192.168.1.1 example.com
    ; <<>> DiG 9.16.1-Ubuntu <<>> @192.168.1.1 linuxconfig.org
    ; (1 server found)
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10032
    ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;example.com.               IN      A
    ;; ANSWER SECTION:
    example.com.        187     IN      A       104.103.102.1
    example.com.        187     IN      A       104.103.102.1
    ;; Query time: 4 msec
    ;; SERVER: 192.168.1.1#53(192.168.1.1)
    ;; WHEN: Thu May 07 11:01:41 AEST 2020
    ;; MSG SIZE  rcvd: 76

    Step 6

    通过尝试解析 DNS 主机名来确认系统范围的设置。

    $ resolvectl query example.com
    example: 104.103.102.1                   -- link: enp0s3
             104.103.102.1                   -- link: enp0s3
    -- Information acquired via protocol DNS in 2.7ms.
    -- Data is authenticated: no

    写在最后

    通过本篇,我们基本厘清了路由,网关,DNS 服务器,网络响应等知识。

    Web 开发是一门综合的技术,理解的越细致,也越容易定位故障。

    Happy coding :-)

    我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论