互联网(ADSL)连接似乎在 Arch 上不起作用

4 arch-linux pacman internet

我已经设置了 ADSL 并且已经将它用于系统更新,所以我确定设置没问题,但是 pacman 突然停止工作,当我检查 ping 也没有工作时。如何找出问题所在以及如何解决?

Sha*_*off 12

IP 网络故障排除

当您遇到网络连接问题时,您可以寻找一些标准的东西。这些是从上到下列出的,或者从最根本的问题到最根本的问题。

ip此处显示的所有示例命令都使用名为 iproute2 的 Linux 特定工具。许多任务可能可以用ifconfig和完成route,但语法取决于系统。您可以开始在Rosetta Stone for Unix上为您的系统寻找正确的命令(感谢 @Gilles)。

是否只能访问一个站点而不是其他站点?

如果您刚刚注意到某个网站或服务出现故障,请先尝试其他网站,然后再确定遇到问题的是您,而不是您尝试访问的网站。

DNS 不工作吗?

DNS 将域名解析为 IP 地址。如果它不起作用,您可能可以通过 IP 地址访问服务,但不能通过域名访问。要对此进行测试,请使用

ping -c 2 8.8.8.8
Run Code Online (Sandbox Code Playgroud)

8.8.8.8 是互联网上谷歌服务器的 IP 地址,它应该始终处于开启状态;它可以被目标网络上已知的任何 IP 地址替换。该命令向特定 IP 地址发送两个 ICMP 回显数据包;它不依赖于 DNS 来工作。如果该命令有效,请将 IP 地址替换为已知在目标网络上工作的域名,例如ping -c 2 yahoo.com;如果这不起作用,问题很可能是 DNS。作为快速修复,您可以尝试在最后一行之后打开/etc/resolv.conf和添加nameserver 8.8.8.8(注意,您可能需要 root 权限才能编辑文件)。该地址恰好是一个 DNS 服务器,将其添加到 resolv.conf 将告诉您的系统使用它。如果这不起作用,您应该提交另一个包含更多详细信息的问题。

有路由到网络吗?

要访问网络,您的系统必须知道如何路由到该网络。要查看您的系统知道的路由,我们需要几个命令。

ip rule show
Run Code Online (Sandbox Code Playgroud)

此命令列出在您的系统上设置的所有路由规则。如果您只看到三个条目(行)并且它们以“local”、“main”和“default”结尾,那么您只有标准规则设置。如果还有其他条目,请注明;特别是,该行的最后一个字——它们是路由表的名称。

ip route show
Run Code Online (Sandbox Code Playgroud)

此命令显示主表上的路由设置。通常应该有一个条目将流量定向到目标网络。对于互联网连接,它是一条看起来像default [via address] dev [dev]...您可能有也可能没有“via”部分的路由,而“[dev]”可能类似于“eth0”或“wlan0”,表示网络所在的网络接口.

之前我说过那里通常应该有一个条目。如果您设置了其他表,并且有一条规则指向它们以查看其他表中的条目,请使用以下命令替换[table name]为您在前一(ip 规则)步骤中记下的名称之一。

ip route show table [table name]
Run Code Online (Sandbox Code Playgroud)

如果您没有到目标网络的路由,则需要添加一个(或修改您的网络设置,以便它自动为您添加正确的一个)。如果您不知道如何,请在此处提出更具体的问题,并掌握这些知识。

网络接口是否打开?

为了能够使用网络接口,它必须启动并且应该有一个地址。您可以使用以下命令查看它是否已启动:

ip link show
Run Code Online (Sandbox Code Playgroud)

这列出了系统上的网络接口。您应该至少看到两个,一个称为“lo”,另一个是系统上每个网络接口的条目。如果您有有线和无线接口,您可能会看到“lo”、“eth0”和“wlan0”或“lo”、“eth0”和“eth1”,无论它们是什么——条目索引之后的第一位是网络接口的名称。对于每个接口条目,您还应该看到“state UP”、“state DOWN”或“state UNKNOWN”。如果连接到目标网络的网络接口不存在,则可能是硬件驱动程序未加载或未工作(对于实际网卡)或 PPP 连接,没有建立连接。如果它说链接已关闭或未知,需要调出界面。这通常是由您系统的网络设置完成的 - 如果它没有启动,您可以在此处提出更具体的问题,并考虑到这一点。可以通过以下命令手动完成,替换[dev] 使用接口名称(您可能需要 root 权限)。

ip link set dev [dev] up
Run Code Online (Sandbox Code Playgroud)

网络接口有地址吗?

除了拥有接口,它还需要有一个 IP 地址。您可以通过运行以下命令来查找接口的地址。

ip address show
Run Code Online (Sandbox Code Playgroud)

您将看到每个接口的条目及其所有地址。大多数条目都会有一个链接地址,重要的部分是 IP 地址。应该有一行标有“inet”的行,其中包含连接到目标网络的网络接口的地址。它应该由您的网络设置自动添加;如果不是,dhcp 客户端可能没有运行,或者 ppp 守护进程可能没有添加它——你应该在这里问一个更具体的问题,记住这一点。可以通过以下命令手动添加(但取决于网络可能无法正常工作),替换[ip address]为适合网络的 ip 地址(如果网络通过 DHCP 或 PPP 提供 IP 地址,则可能未知)并替换[dev]为接口姓名。

ip address add [ip address] dev [dev]
Run Code Online (Sandbox Code Playgroud)