第12章  网络

翻译:林 秉忠.
12.1. 我应该到哪里找有关 “无盘启动 (diskless booting)” 的资料?
12.2. 运行 FreeBSD 的服务器可以作为专用的网络路由器来用吗?
12.3. 我可以透过 FreeBSD 将我的 Windows® 机器连上 Internet 吗?
12.4. FreeBSD 支持 SLIP 和 PPP 吗?
12.5. FreeBSD 支持 NAT 或 地址伪装(Masquerading) 吗?
12.6. 我如何将两台 FreeBSD 主机用并口线 (parallel line) 透过 PLIP 联机?
12.7. 我如何建立以太网地址别名 (alias)?
12.8. 我如何指定我的 3C503 使用其它不同的网口?
12.9. 为什么我在使用 FreeBSD 的 NFS 时出现问题?
12.10. 为什么我不能从 Linux® 机器上挂接 NFS?
12.11. 为什么我不能从 Sun™ 机器上挂接 NFS?
12.12. 为什么 mountd 一直鬼叫说 “can't change attributes” 而且我一直看到 “bad exports list” 这个讯息在我的 FreeBSD NFS 服务器上?
12.13. 为什么我在使用 PPP 联机到 NeXTStep 机器时有问题?
12.14. 我要怎样才能把 IP 多播支持打开?
12.15. 哪些网络卡是使用 DEC PCI 芯片组?
12.16. 为什么要用 FQDN 才能连到我的站点上的其它机器?
12.17. 为什么我在联机时一直出现 “Permission denied” 的错误讯息?
12.18. 为什么我的 ipfw “fwd” 规则将服务转向其它机器时无法正常运作?
12.19. 要如何把对某台机器的网络服务请求 (service request)转向到另一台?
12.20. 那里可以找到管理带宽的工具?
12.21. 怎么会跑出 “/dev/bpf0: device not configured” 这个讯息?
12.22. 我要怎样才能将本地网络中 Windows 机器中的磁盘挂入系统, 就像 Linux 中的 smbmount 那样?
12.23. 我在系统日志中发现 “Limiting icmp/open port/closed port response” 这样的讯息, 这是什么意思?
12.24. 这个错误讯息 “arp: unknown hardware address format” 是什么意思?
12.25. 我刚刚装好 CVSup 套件,但是在尝试执行时发生了错误,要怎么办?

12.1. 我应该到哪里找有关 “无盘启动 (diskless booting)” 的资料?

“无盘启动” 就是让 FreeBSD 从网络启动, 并且从网络上的 server 上读取其它必要的文件, 而非由本机硬盘上获得。 详细的资料, 可以参考 FreeBSD 使用手册中关于无盘启动的部分

12.2. 运行 FreeBSD 的服务器可以作为专用的网络路由器来用吗?

可以的。 请参见使用手册中的 网络进阶篇, 特别是其中的 路由器与网关 部分。

12.3. 我可以透过 FreeBSD 将我的 Windows® 机器连上 Internet 吗?

基本上,会问这种问题的人在家里至少有两台计算机,一台跑 FreeBSD 另外一台跑某个版本的 Windows; 具体的想法是将 FreeBSD 主机连上 Internet, 然后透过这台 FreeBSD 主机, 让跑 Windows 的计算机能够上网。 这个问题算是前一个问题的一个特例, 因此答案当然是可以的。

如果您正使用拨号方式接入 Internet, 则可以使用用户态 ppp(8) 提供的 -nat 选项。 如果您在运行 ppp(8) 时指定了 -nat 选项, 则应在 /etc/rc.conf 中将 gateway_enable 设置为 YES, 并相应地对 Windows 机器进行配置, 这样就可以很好地工作了。 具体细节, 请参见 ppp(8) 的联机手册, 以及 使用手册中关于 PPP 的那章

如果使用的是内核模式的 PPP, 或者以以太网方式联入 Internet, 则需要使用 natd(8)。 请参见使用手册中的 natd 部分所提供的教程。

12.4. FreeBSD 支持 SLIP 和 PPP 吗?

是的。 你可以查查 slattach(8)sliplogin(8)ppp(8), 以及 pppd(8) 的联机手册, 以了解相关的情况。 ppp(8)pppd(8) 分别提供了进出双向联机的支持, 另外 sliplogin(8) 专门提供进入联机的支持, 而 slattach(8) 专门提供向外联机的支持。

如果你需要更进一步的数据的话, 请查阅 使用手册关于 PPP 和 SLIP 的部分

如果你只能够过 “shell 帐号” 来访问 Internet, 的话, 也许可以试试 net/slirp 这个套件程序。 这个套件程序可以提供你的计算机直接连上某些 (有限的) 服务, ftp 及 http 等等。

12.5. FreeBSD 支持 NAT 或 地址伪装(Masquerading) 吗?

是的。 如果您希望在用户态 PPP 连接上使用 NAT 的话, 请参见 使用手册中关于用户态 PPP 的部分。 如果您希望在某种其它形式的网络连接上使用 NAT, 请参阅使用手册中的 natd 部分。

12.6. 我如何将两台 FreeBSD 主机用并口线 (parallel line) 透过 PLIP 联机?

请参考手册中关于 PLIP 的部分。

12.7. 我如何建立以太网地址别名 (alias)?

如果你的 alias 地址跟你目前网络接口的地址在同一个子网下的话, 在 ifconfig(8) 命令行中指定 netmask 0xffffffff, 类似下面这样:

# ifconfig ed0 alias 192.0.2.2 netmask 0xffffffff

反之, 就像平时那样指定子网掩码即可:

# ifconfig ed0 alias 172.16.141.5 netmask 0xffffff00

You can read more about this in the FreeBSD Handbook.

12.8. 我如何指定我的 3C503 使用其它不同的网口?

如果您想使用其它的网口, 必须在 ifconfig(8) 的命令中指定额外的参数。 默认的端口是 link0。 如果希望使用 AUI 网口来代替 BNC 的话, 则应指定 link2。 这些参数也应放到 /etc/rc.conf 中的 ifconfig_* 变量中 (参见 rc.conf(5))。

12.9. 为什么我在使用 FreeBSD 的 NFS 时出现问题?

我们用含蓄一点的说法,某些 PC 的网络卡比其它的好, 这种状况在造成 NFS 这种对网络敏感的程序有时会出现问题。

参考 使用手册中关于 NFS 的部分 以了解进一步的详情。

12.10. 为什么我不能从 Linux® 机器上挂接 NFS?

某些版本的 Linux NFS 程序代码只接受来自特权端口的挂接请求; 试用这行指令看看:

# mount -o -P linuxbox:/blah /mnt

12.11. 为什么我不能从 Sun™ 机器上挂接 NFS?

SunOS™ 4.X 的 Sun 工作站只接受来自特权端口的挂接请求; 试用这行指令看看:

# mount -o -P sunbox:/blah /mnt

12.12. 为什么 mountd 一直鬼叫说 “can't change attributes” 而且我一直看到 “bad exports list” 这个讯息在我的 FreeBSD NFS 服务器上?

这个问题最常发生的原因是在于不了解 /etc/exports 的正确格式。 请详读 exports(5) 以及使用手册中的 NFS 部分, 特别是 配置 NFS 这节。

12.13. 为什么我在使用 PPP 联机到 NeXTStep 机器时有问题?

尝试禁用 TCP 扩展, 方法是在 /etc/rc.conf (参见 rc.conf(5)) 中, 把以下这个值设成 NO

tcp_extensions=NO

Xylogic 的 Annex 主机也有相同的问题, 您要做相同的修改才能连上这些主机。

12.14. 我要怎样才能把 IP 多播支持打开?

FreeBSD 默认即支持多播主机的操作。 如果希望让您的机器作为多播路由器运行, 则需要重新编译内核, 以便在其中加入 MROUTING, 并运行 mrouted(8)。 如果您在 /etc/rc.conf 中将 mrouted_enable 设置为 YES, 则 FreeBSD 会在开机时自动启动 mrouted(8)

注意: 在最新的 FreeBSD 版本中, mrouted(8) 多播路由服务、 map-mbone(8) mrinfo(8) 工具已经从基本系统中删除。 现在这些程序改为通过 FreeBSD Ports 套件中的 net/mrouted 提供。

MBONE 的各种工具可以在它们 ports 下所属叫做 mbone 的目录中找到。 如果您在找视频会议的工具如 vicvat, 看看那里吧。

12.15. 哪些网络卡是使用 DEC PCI 芯片组?

以下是 Glen Foster 提供的清单:

表 12-1. 采用 DEC PCI 芯片组的网卡

制造商 型号
华硕 (ASUS) PCI-L101-TB
Accton ENI1203
Cogent EM960PCI
Compex ENET32-PCI
D-Link DE-530
Dayna DP1203, DP2100
DEC DE435, DE450
Danpex EN-9400P3
JCIS Condor JC1260
Linksys EtherPCI
Mylex LNP101
SMC EtherPower 10/100 (Model 9332)
SMC EtherPower (Model 8432)
TopWare TE-3500P
Znyx (2.2.x) ZX312, ZX314, ZX342, ZX345, ZX346, ZX348
Znyx (3.x) ZX345Q, ZX346Q, ZX348Q, ZX412Q, ZX414, ZX442, ZX444, ZX474, ZX478, ZX212, ZX214 (10mbps/hd)

12.16. 为什么要用 FQDN 才能连到我的站点上的其它机器?

请参阅 FreeBSD Handbook 中的答案。

12.17. 为什么我在联机时一直出现 “Permission denied” 的错误讯息?

如果您有在内核中联编进 IPFIREWALL 选项, 则需要小心其默认配置是禁止所有没有明确地允许的包。

如果您无意中错误地配置了系统中的防火墙设置, 则可以以 root 身份登录系统, 并输入下面的命令:

# ipfw add 65534 allow all from any to any

也可以在 /etc/rc.conf 加入 firewall_type="open" 的配置。

关于如何配置 FreeBSD 防火墙的进一步细节, 请参见 使用手册中的对应章节

12.18. 为什么我的 ipfw “fwd” 规则将服务转向其它机器时无法正常运作?

可能是你除了转送封包以外还额外想进行地址转译 (NAT)。 “fwd” 规则所进行的动作就如同字面所示; 仅转送封包, 它并不会去修改封包中的数据。 假设我们有如下的规则:

01000 fwd 10.0.0.1 from any to foo 21

当一个通往特定目标地址 foo 的封包送达主机时, 根据这条规则, 封包将被转送至 10.0.0.1, 但是它的目标地址却仍然是 foo! 封包的目标地址并 没有 更改为 10.0.0.1。 大部分的主机会将封包丢弃, 因为它们并不是这个目标地址。 因此, 使用 “fwd” 规则时往往不如使用者所预期的那般顺利。 这种行为是系统特性,而非错误。

参考 关于服务转向的常见问答集natd(8) 联机手册, 或是使用 Ports 套件 中许多服务转向的工具来正确地完成你想进行的工作。

12.19. 要如何把对某台机器的网络服务请求 (service request)转向到另一台?

您可以利用 sysutils/socket port 来对 FTP (以及其他服务) 进行转向。 只需简单地将服务命令替换为 socket, 如下所示:

ftp stream tcp nowait nobody /usr/local/bin/socket socket ftp.example.com ftp

其中 ftp.example.comftp 分别是被转到的机器和服务端口名称。

12.20. 那里可以找到管理带宽的工具?

FreeBSD 上提供了三种带宽管理工具。 dummynet(4) 是以 ipfw(4) 一部分的形式整合进 FreeBSD 的, 而 ALTQ 则是作为 pf(4) 的一部分整合进来。 Emerging Technologies 提供的 Bandwidth Manager 则是商业产品。

12.21. 怎么会跑出 “/dev/bpf0: device not configured” 这个讯息?

你执行了一个需要 Berkeley 封包过滤器 (bpf(4)) 的程序, 但在内核中则没有。 把下面这一行加到内核的编译配置中, 并重新联编新的内核:

device bpf        # Berkeley Packet Filter

12.22. 我要怎样才能将本地网络中 Windows 机器中的磁盘挂入系统, 就像 Linux 中的 smbmount 那样?

使用 SMBFS 工具组。 这套工具组中包含了一系列的内核变动, 以及一些使用者的工具程序。 这些程序和信息在是作为基本系统中的 mount_smbfs(8) 提供的。

12.23. 我在系统日志中发现 “Limiting icmp/open port/closed port response” 这样的讯息, 这是什么意思?

这是系统内核告诉你有某些活动引发它送出比它所认为应该送出更多的 ICMP 或 TCP 重置 (RST) 回应。 ICMP 响应讯息常常是因为有人尝试连接未被使用的通讯端口。 而 TCP 重置讯息则是有人尝试连接未开放 TCP 通讯端口造成的结果。 以下这些活动可能就是造成这些讯息的原因:

  • 暴力法的拒绝服务 (DoS) 攻击 (相较于针对特殊弱点使用单一封包的攻击方式)。

  • 大量的通讯端口扫描 (相较于仅尝试少数的常见服务通讯端口)。

出现的数字中第一个代表根据这些流量内核应该送出的封包数, 第二个数字则是内核目前限制最大发送数。你可以利用 sysctl 修改 net.inet.icmp.icmplim 变数值来更改最大值。 举例来说, 如果希望修改限制为每秒 300 个:

# sysctl -w net.inet.icmp.icmplim=300

如果你不想在系统日志中看到这些讯息, 但是仍然希望保持响应的限制的话, 你可以利用 sysctl 修改 net.inet.icmp.icmplim_output 来取消这些讯息:

# sysctl -w net.inet.icmp.icmplim_output=0

最后, 如果你想取消这些限制的话, 可以把 sysctl 变量 net.inet.icmp.icmplim 设定 (如上例所示) 为 0基于上述理由, 我们建议你不要取消这些限制。

12.24. 这个错误讯息 “arp: unknown hardware address format” 是什么意思?

这代表你的局域网络联机上有一些设备使用 FreeBSD 看不懂的 MAC 地址格式。 这通常是代表有人在你的局域网络上进行实验, 最常见的就是 cable modem 的联机。 这讯息无害, 而且应该不至于影响到 FreeBSD 主机的效能。

12.25. 我刚刚装好 CVSup 套件,但是在尝试执行时发生了错误,要怎么办?

首先,看看错误的讯息是否如下:

/usr/libexec/ld-elf.so.1: Shared object "libXaw.so.6" not found

这种错误讯息代表你主机上安装的 net/cvsup 没有配合所需的 Xorg 套件一起安装。 如果您希望使用 CVSupGUI, 则应安装 Xorg。 此外, 如果只希望使用命令行模式的 CVSup, 则应首先卸载先前安装的套件, 并安装 net/cvsup-without-guinet/csup。 如果您使用较新的 FreeBSD 版本, 可以试试看 csup(1)。 在使用手册中的 CVSup 一节 中有更详细的说明。

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

如果对于FreeBSD有问题,请先阅读文档,如不能解决再联系<questions@FreeBSD.org>.
关于本文档的问题请发信联系 <doc@FreeBSD.org>.