网络配置/以太网 - Arch Linux 中文维基

跳转到内容

# 网络配置/以太网

来自 Arch Linux 中文维基
< 网络配置
翻译状态：

- 本文（或部分内容）译自 Network configuration/Ethernet，最近一次同步于 2022-12-01，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

本页描述了以太网的详细信息，一般的网络配置则为网络配置所涵盖。

## 设备驱动

### 检测驱动状态

udev 会探测你的网卡（网络接口控制器）并在启动时自动载入必要的内核模块。通过 `lspci -v` 输出中的“Ethernet controller”(或类似条目)可以确认网络设备所使用的内核驱动和内核模块。例如：

    $ lspci -v

    02:00.0 Ethernet controller: Attansic Technology Corp. L1 Gigabit Ethernet Adapter (rev b0)
     	...
     	Kernel driver in use: atl1
     	Kernel modules: atl1

`dmesg | grep module_name` 命令可以检查是否已经加载了驱动。例如：

    # dmesg | grep atl1

    ...
    atl1 0000:02:00.0: eth0 link is up 100 Mbps full duplex

如果驱动加载成功，就跳过下一节，否则，需要知道特定型号的网络设备需要哪一个模块。

### 加载设备模块

在互联网上搜索芯片组需要的模块/驱动。常见的驱动模块有用于 Realtek 芯片组网卡的 `8139too`，或者用于 Sis 芯片组网卡的 `sis900`。确定模块后，请尝试手动加载它。如果碰到了未找到模块的错误，可能是驱动没有包括在 Arch 的内核中。可以在 AUR 中搜索模块名称进行安装。

如果 udev 在引导时不能自动侦测和加载适当的模块，请查阅 Kernel module#自动加载模块。

## 提示与技巧

### 用于笔记本的 ifplugd

提示：dhcpcd 也提供了同样的功能。

ifplugd包 是一个守护进程，在网络适配器插入的时候自动配置网络，当网络断开的时候自动取消配置。因为这个程序只会在网络实际接入的时候才会配置网络接口，所以非常适用于笔记本电脑这样的使用移动式的网络，还可以用于不重启电脑、不使用命令行就自动重启网络。

在默认情况下，它会工作于 `eth0` 设备。要更改这个设置（以及更改其他设置，比如等待时间），可以编辑 `/etc/ifplugd/ifplugd.conf`。

注意：netctl 软件包包含了 `netctl-ifplugd@.service`，否则你可以使用 ifplugd包 软件包中的 `ifplugd@.service`。例如启用 `ifplugd@eth0.service`。

## 故障排除

### 更换了连接有线调制解调器的计算机

许多有线网络运营商（例如加拿大最大的有线电视公司 Vidéotron，还有中国大陆的有线电视宽带公司）都使用记录网卡 MAC 地址的方法将有线调制解调器配置为只能一台计算机使用。一旦调制解调器获得第一台连接它的设备的 MAC 地址，就不会响应任何其它 MAC 地址。这样如果你换了台计算机（或者路由器），由于新计算机（或者路由器）的 MAC 地址和旧的不同，就没法连接调制解调器了。这时候必须复位调制解调器以使它重新进行识别。 你得关闭调制解调器电源，然后重新打开。一旦调制解调器重启并再次登录完毕（指示灯熄灭），重启新连接的设备以使它发起一个 DHCP 请求，或者手动发起 DHCP 请求。

如果这个方法不能奏效，你需要克隆原来机器上的 MAC 地址。参见 MAC 地址伪装。

### 显式拥塞通知

显式拥塞通知(Explicit Congestion Notification, ECN) 可能在老旧/劣质的路由器上造成网络拥堵问题[1]。从 systemd 239 开始，它同时为入站流量和出站流量启用。

设置仅当传入连接请求时才启用 ECN（内核默认设置，相当安全）：

    # sysctl net.ipv4.tcp_ecn=2

设置完全禁用 ECN（例如，测试 ECN 是否引起问题）：

    # sysctl net.ipv4.tcp_ecn=0

参见内核文档。

### Realtek 没有连接/网络唤醒故障

使用基于 Realtek 8168 8169 8101 8111(C) 芯片网卡（独立网卡和板载）的用户也许会发现这个故障，启动时网卡不可用，网卡上的连接指示灯不亮。这通常会发生在安装了 Windows 的双启动系统上。在 Windows 下使用 Realtek 官方驱动（2007 年 5 月后的版本）会引发故障。新驱动通过在 Windows 关机时禁止网卡来关闭网络唤醒功能，直到下一次 Windows 启动前网卡都会一直不可用。如果是这个原因影响的你，你会观察到连接指示灯在 Windows 启动前一直熄灭，在 Windows 关机过程中也会熄灭。正常情况应该是只要计算机一直开着，即使在 POST 加电过程中，连接指示灯也应该一直亮着。这个故障也会影响其它没有安装新驱动的操作系统（例如各种 Live CD）。这里给出几种解决方案：

#### 在 Linux 中启用网卡

参考网络配置#启用和禁用网络接口来启用网卡。

#### 还原/变更 Windows 驱动

你可以将你的 Windows 网卡驱动还原回微软自带的驱动（如果有的话），或者安装 2007 年 5 月份以前的 Realtek 官方驱动（也许在网卡附带的 CD 上）。

#### 启动 Windows 驱动里的网络唤醒功能

也许最好最快的修复方法就是改变 Windows 驱动里的这个设置。这个方法可以解决很多其它操作系统而不仅仅是 Arch 的麻烦。在 Windows 的设备管理器里，找到你的 Realtek 网卡，双击它。在“高级”标签页中，开启“wake-on-lan after shutdown”选项。

例如在 Windows XP 里

     右键点击我的电脑
     -->管理
       -->设备管理器
         -->网络适配器
           -->双击 Realtek ...
             --> 高级标签页
               --> Wake-On-Lan After Shutdown
                 --> 启用。

注意：新的 Realtek Windows 驱动程序中（已测试了 2009/01/22 GIGABYTE 上的 Realtek 8111/8169 LAN Driver v5.708.1030.2008）可能与这里的选项稍微有点不同，像 Shutdown Wake-On-LAN > Enable。似乎把它切换成 `Disable` 没有效果（你仍然可以在Windows关闭时看到连接指示灯熄灭）。一个比较不好的解决方法是引导 Windows，然后立即重启系统（执行非正常重启/关机），不给予 Windows 驱动程序关闭 LAN 的机会。连接指示灯将会保持亮着，网卡也会在 POST 之后保持可用——直到你再次进入 Windows 并正常关机。

#### 在 BIOS/CMOS 中启用 LAN Boot ROM

尽管 Windows 驱动程序在系统关闭时禁用了它，但在 BIOS/CMOS 中设置 Integrated Peripherals --> Onboard LAN Boot ROM --> Enabled，系统启动时会重新激活 Realtek LAN 芯片。

注意：这个方法多次在 GIGABYTE GA-G31M-ES2L 主板，2009/02/05 发布的 BIOS 版本 F8 上测试成功。你的情况可能不同。

#### 禁用 USB 自动挂起功能

本文或本章节的语言、语法或风格需要改进。参考：帮助:风格

原因：不是所有人都使用了 TLP.（在Talk:网络配置/以太网讨论）

当使用省电功能时，特别是带 TLP 的 USB自动挂起，设备可能无法正确加载，导致NO-CARRIER状态(用RT8156B测试)，也不能建立网络连接。

解决办法是将设备 ID 添加到 TLP 配置的 USB 黑名单（denylist）中，并重新连接设备。

### Atheros 芯片组找不到网卡

有些用户的 Atheros 芯片无法正常工作 (至少在 2014 年 2 月的安装镜像中)。可以通过安装 backports-patchedAUR[损坏的链接：package not found] 解决。

### Broadcom BCM57780

这个 Broadcom 芯片只有你指定模块的加载顺序后才能正常工作。这些模块是 `broadcom` 和 `tg3`，前者需要首先加载。

如果你的电脑有这个芯片，这些步骤应该有用：

- 从 `lspci` 的输出中找到你的网卡：

    $ lspci | grep Ethernet

    02:00.0 Ethernet controller: Broadcom Corporation NetLink BCM57780 Gigabit Ethernet PCIe (rev 01)

- 如果你的有线网络不能工作，尝试断开网线，然后以 root 权限实施以下步骤：

    # modprobe -r tg3
    # modprobe broadcom
    # modprobe tg3

- 插回网线，检查模块是否成功：

    # dmesg | grep tg3

- 如果现在你的故障解决了，你可以把 `broadcom` 和 `tg3` （以此顺序）加入到 `/etc/mkinitcpio.conf` 的 `MODULES` 一行，使得更改持久化：

    /etc/mkinitcpio.conf

    MODULES=(.. broadcom tg3 ..)

- 重新生成 initramfs
- 还有一种方法是创建 `/etc/modprobe.d/broadcom.conf`：

    softdep tg3 pre: broadcom

注意：这些方法可能也适用于其它芯片，例如 BCM57760。

### Realtek RTL8111/8168B

    # lspci | grep Ethernet

    03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 02)

这个网络适配器应被内核的`r8169`模块识别。 但是，对于某些芯片版本，网络连接可能一直是断开状态。 可以在 official repositories中找到r8168包 作为`r8169`的替代品，在这种情况下，其应该可以实现稳定可靠的连接。 将`r8169`列入黑名单Blacklist，如果 udev没有自动加载r8168包 ，请参见内核模块 Kernel module#自动加载模块

本文或本章节的事实准确性存在争议。

原因： "某些修订版本：", 不是驱动程序导致的问题，而是DNS服务器没有正确配置 （在 Talk:网络配置/以太网 中讨论）

对于此网络适配器的某些修订版，驱动程序中的另一个故障是IPv6支持不佳。 如果遇到诸如网页挂起和速度慢之类的问题，禁用IPv6功能 IPv6#Disable functionality可能会有所帮助。

### 配有 Realtek 8111/8168/8411 的 Gigabyte 主板

使用诸如 Gigabyte GA-990FXA-UD3 这样的主板，在关闭 IOMMU 的配置下启动（可能是默认设置）将会使网络连接出问题，通常是无法连接或连接上了但没有流量。这适用于板载网卡和小节标题中的任何其他 pci-NIC，因为 IOMMU 设置会影响主板上的整个网络接口。启用 IOMMU 并使用安装介质引导会在一秒钟内引发 AMD I-10/xhci 页面错误，但随后会正常启动，板载网卡完全正常运行（即使使用 r8169 模块）。在配置安装引导过程时，添加 `iommu=soft` 作为内核参数，以消除引导时的错误信息，并恢复 USB3.0 功能。

### 配有 Realtek 8111/8168/8411 的 微星主板

使用诸如 "MicroStar B450M MORTAR TITANIUM" 这样的主板, 拔插网线或者重启路由器的 DHCP 服务可能会导致 `r8169` 进入降档状态, 从千兆带宽（1000Mbit/s）降低到百兆（100 Mbit/s）。内核 log 会打印（可以通过 dmesg 命令查看）：

    # dmesg | grep r8169

    Generic FE-GE Realtek PHY r8169-2200:00: Downshift occurred from negotiated speed 1Gbps to actual speed 100Mbps, check cabling!
    r8169 0000:22:00.0 enp34s0: Link is Up - 100Mbps/Full (downshifted) - flow control rx/tx

这种情况下，可以通过重启网络接口进行恢复。例如执行下面的命令：

    # ip link set dev enp34s0 down
    # ip link set dev enp34s0 up

分类：​

- 网络配置
- 使用“模板:风格”标记的页面或章节
- 包含损坏的软件包链接的页面

隐藏分类：​

- 使用“模板:准确性”标记的页面或章节

网络配置/以太网
添加话题