11.8 设置网卡

Contributed by Marc Fonvieille.

  现在我们不可想象一台计算机没有网络连接的情况。 添加和配置一块网卡是任何 FreeBSD 系统管理员的一项基本任务。

11.8.1 查找正确的驱动程序

  在开始之前,您应该知道您的网卡类型,它用的芯片和它是 PCI 还是 ISA 网卡。FreeBSD 支持很多种 PCI 和 ISA 网卡。 可以查看您的版本硬件兼容性列表以确定您的网卡被支持。

  确认系统能够支持您的网卡之后, 您还需要为它选择合适的驱动程序。 /usr/src/sys/conf/NOTES/usr/src/sys/arch/conf/NOTES 将为您提供所支持的一些网卡和芯片组的信息。 如果您怀疑驱动程序是否使所要找的那一个, 请参考驱动程序的联机手册。 联机手册将提供关于所支持的硬件更详细的信息, 甚至还包括可能发生的问题。

  如果您的网卡很常见的话, 大多数时候您不需要为驱动浪费精力。 常用的网卡在 GENERIC 内核中已经支持了, 所以您的网卡在启动时就会显示出来,像是:

dc0: <82c169 PNIC 10/100BaseTX> port 0xa000-0xa0ff mem 0xd3800000-0xd38
000ff irq 15 at device 11.0 on pci0
dc0: Ethernet address: 00:a0:cc:da:da:da
miibus0: <MII bus> on dc0
ukphy0: <Generic IEEE 802.3u media interface> on miibus0
ukphy0:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
dc1: <82c169 PNIC 10/100BaseTX> port 0x9800-0x98ff mem 0xd3000000-0xd30
000ff irq 11 at device 12.0 on pci0
dc1: Ethernet address: 00:a0:cc:da:da:db
miibus1: <MII bus> on dc1
ukphy1: <Generic IEEE 802.3u media interface> on miibus1
ukphy1:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto

  在这个例子中,我们看到有两块使用 dc(4) 驱动的网卡在系统中。

  如果您的网卡没有出现在 GENERIC 中, 则需要手工加载合适的驱动程序。 要完成这项工作可以使用下面两种方法之一:

11.8.2 配置网卡

  现在正确的网卡驱动程序已经装载,那么就应该配置它了。 跟其他配置一样,网卡可以在安装时用 sysinstall 来配置。

  要显示您系统上的网络接口的配置,输入下列命令:

% ifconfig
dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
        ether 00:a0:cc:da:da:da
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
dc1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
        ether 00:a0:cc:da:da:db
        media: Ethernet 10baseT/UTP
        status: no carrier
lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet 127.0.0.1 netmask 0xff000000
tun0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500

注意: 老版本的 FreeBSD 可能需要在 ifconfig(8) 后面接 -a 选项,需要了解更多的 ifconfig(8) 语法请查阅使用手册。注意所有关于 IPv6 (inet6 等等) 的记录在这个例子里都被忽略了。

  在这个例子中,显示出了下列设备:

   FreeBSD 使用内核引导时检测到的网卡驱动顺序来命名网卡。例如 sis2 是系统中使用 sis(4) 驱动的第三块网卡。

  在这个例子中,dc0 设备启用了。主要表现在:

  1. UP 表示这块网卡已经配置完成准备工作。

  2. 这块网卡有一个 Internet (inet) 地址 (这个例子中是 192.168.1.3)。

  3. 它有一个有效的子网掩码 (netmask0xffffff00 等同于 255.255.255.0)。

  4. 它有一个有效的广播地址 (这个例子中是 192.168.1.255)。

  5. 网卡的 MAC (ether) 地址是 00:a0:cc:da:da:da

  6. 物理传输媒介模式处于自动选择状态 (media: Ethernet autoselect (100baseTX <full-duplex>))。我们看到 dc1 被配置成运行在 10baseT/UTP 模式下。 要了解驱动媒介类型的更多信息, 请查阅它们的使用手册。

  7. 连接状态 (status)是 active,也就是说连接信号被检测到了。对于 dc1,我们看到 status: no carrier。 这通常是网线没有插好。

  如果 ifconfig(8) 的输出显示了类似于:

dc0: flags=8843<BROADCAST,SIMPLEX,MULTICAST> mtu 1500
            ether 00:a0:cc:da:da:da

  的信息,那么就是还没有配置网卡。

  要配置网卡,您需要 root 权限。 网卡配置可以通过使用 ifconfig(8) 命令行方式来完成, 但是这样每次启动都要做一遍。放置网卡配置信息的文件是 /etc/rc.conf

  用您自己喜欢的编辑器打开 /etc/rc.conf。 并且您需要为每一块系统中存在的网卡添加一行, 在我们的例子中,添加如下几行:

ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0"
ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP"

  用自己正确的设备名和地址来替换例子中的 dc0dc1 等内容。您应该应该查阅网卡驱动和 ifconfig(8) 的手册页来了解各选项,也要查看一下 rc.conf(5) 帮助页来了解 /etc/rc.conf 的语法。

   如果在安装的时候配置了网络,关于网卡的一些行可能已经存在了。 所以在添加新行前仔细检查一下 /etc/rc.conf

   您也可能需要编辑 /etc/hosts 来添加局域网中不同的机器名称和 IP 地址,如果它们不存在,查看 hosts(5) 帮助和 /usr/share/examples/etc/hosts 以获得更多信息。

11.8.3 测试和调试

  对 /etc/rc.conf 做了必要的修改之后应该重启系统以应用对接口的修改, 并且确认系统重启后没有任何配置错误。

  系统重启后就应该测试网络接口了。

11.8.3.1 测试以太网卡

  为了确认网卡被正确的配置了,在这里我们要做两件事情。首先, ping 自己的网络接口,接着 ping 局域网内的其他机器。

  首先测试本地接口:

% ping -c5 192.168.1.3
PING 192.168.1.3 (192.168.1.3): 56 data bytes
64 bytes from 192.168.1.3: icmp_seq=0 ttl=64 time=0.082 ms
64 bytes from 192.168.1.3: icmp_seq=1 ttl=64 time=0.074 ms
64 bytes from 192.168.1.3: icmp_seq=2 ttl=64 time=0.076 ms
64 bytes from 192.168.1.3: icmp_seq=3 ttl=64 time=0.108 ms
64 bytes from 192.168.1.3: icmp_seq=4 ttl=64 time=0.076 ms

--- 192.168.1.3 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.074/0.083/0.108/0.013 ms

  现在我们应该 ping 局域网内的其他机器:

% ping -c5 192.168.1.2
PING 192.168.1.2 (192.168.1.2): 56 data bytes
64 bytes from 192.168.1.2: icmp_seq=0 ttl=64 time=0.726 ms
64 bytes from 192.168.1.2: icmp_seq=1 ttl=64 time=0.766 ms
64 bytes from 192.168.1.2: icmp_seq=2 ttl=64 time=0.700 ms
64 bytes from 192.168.1.2: icmp_seq=3 ttl=64 time=0.747 ms
64 bytes from 192.168.1.2: icmp_seq=4 ttl=64 time=0.704 ms

--- 192.168.1.2 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.700/0.729/0.766/0.025 ms

  您如果您设置了 /etc/hosts 文件,也可以用机器名来替换 192.168.1.2

11.8.3.2 调试

  调试硬件和软件配置一直是一件头痛的事情, 从最简单的开始可以减轻一些痛苦。 例如网线是否插好了?是否配置好了网络服务?防火墙配置正确吗? 是否使用了被 FreeBSD 支持的网卡? 在发送错误报告之前您应该查看一下硬件说明, 升级 FreeBSD 到最新的 STABLE 版本, 看一下邮件列表或者在 Internet 上搜索一下。

  如果网卡工作了, 但性能低下,应该好好阅读一下 tuning(7) 联机手册。 您也可以检查一下网络配置, 不正确的设置会导致慢速的网络连接。

  一些用户可能会在一些网卡上经历一到两次 “device timeouts”, 这通常是正常现象。 如果经常这样甚至引起麻烦, 则应确定一下它跟其他设备没有冲突。 仔细检查网线连接, 或者换一块网卡。

  有时用户会看到少量 “watchdog timeout” 错误。 这种情况要做的第一件事就是检查线缆连接。 一些网卡需要支持总线控制的 PCI 插槽。 在一些老的主板上,只有一个 PCI 插槽支持 (一般是 slot 0)。 检查网卡和主板说明书来确定是不是这个问题。

  “No route to host” 通常发生在如果系统不能发送一个路由到目的主机的包的时候。 这在没有指定默认路由或者网线没有插上时会发生。 检查 netstat -rn 的输出并确认有一个有效的路由能到达相应的主机。 如果没有,请查阅 第 27 章

  “ping: sendto: Permission denied” 错误信息经常由防火墙的配置错误引起。 如果 ipfw 在内核中启用了但是没有定义规则, 那么默认的规则就是拒绝所有通讯,甚至 ping 请求! 查阅 第 26 章 以了解更多信息。

  有时网卡性能低下或者低于平均水平, 这种情况最好把传输媒介模式从 autoselect 改变为正确的传输介质模式。 这通常对大多数硬件有用, 但可能不会解决所有人的问题。 接着,检查所有网络设置,并且阅读 tuning(7) 手册页。

本文档和其它文档可从这里下载:ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读文档,如不能解决再联系<[email protected]>.
关于本文档的问题请发信联系 <[email protected]>.