快速设置 PLIP 和 NFS

作者:Loris Renggli

如果您有两台运行 Linux 的计算机,其中一台是笔记本电脑,您很可能已经厌倦了使用软盘在它们之间交换数据。本文解释了如何快速设置这两台计算机,以便您可以使用网络来代替。如果您之前没有网络知识,请不要害怕;只需一步一步地按照说明进行操作即可。如果您已经在您的计算机上成功安装了 Linux,那么您也能够做到这一点。

我将首先设置 PLIP(并行线路 Internet 协议)连接,这仅仅是通过并行端口的网络连接。此端口最常用于连接打印机,并且很可能位于您计算机的背面。它有一个带有 25 个孔的连接器。您将需要一根特殊的电缆来进行此连接。连接完成后,您将拥有完整的网络连接,允许您使用 ftprcp 在计算机之间传输文件。

接下来,我将讨论使用 NFS 和 挂载 笔记本电脑的磁盘到台式计算机上。通过这种方式,笔记本电脑的磁盘将看起来像是台式计算机上的本地磁盘,您可以使用您喜欢的命令来操作(编辑、复制等)您的笔记本电脑文件。

最后,如果您的台式计算机可以访问互联网,我将向您展示如何通过 PLIP 从笔记本电脑访问互联网。

假设和约定

我使用的是 Slackware 3.2 Linux 发行版(内核 2.0.27),因此,如果您有其他发行版,可能需要进行一些调整——特别是对于内核配置和系统文件的位置。您将需要以下内容

  • 两台安装了 Slackware 3.2 的计算机——通用 Slackware 内核——或您喜欢的 Linux 发行版

  • 两台计算机上的 root 访问权限

  • 两台计算机上您自己的帐户(NFS 使用相同的 UID)

  • 已安装 TCP/IP 包

  • 每台计算机上的并行端口 plip1(IO 0x378,IRQ 7)

我将对命令使用以下约定

  • 提示符以 # 结尾的命令以 root 身份发出

  • 提示符以 > 结尾的命令以非特权用户身份发出

最后,当以 root 身份编辑文件时,请记住在配置过程中更改任何配置文件之前,始终 制作所有配置文件的备份副本!

第一部分. 什么是 PLIP?

PLIP 类似于 SLIP(串行线路 Internet 协议),不同之处在于它使用并行电缆进行连接。SLIP 用于通过串行线路进行联网(如调制解调器,或您计算机的串行端口,通常带有 9 孔连接器)。您的打印机和 PLIP 连接不能同时使用,因为它们都使用并行端口。但是,我们的主要目标是在两台计算机之间建立临时连接,并且在打印机和连接之间切换非常容易。您将必须手动连接/断开电缆,这可能涉及爬到桌子底下。如果您经常这样做,您可能希望考虑购买数据切换盒。

设置 PLIP

如前所述,您需要的第一件事是“零打印机”并行电缆,它通常以“Laplink”电缆或“PC-to-PC”电缆的名称出售。它很便宜(约 10 美元)并且在任何计算机商店都很容易找到。NET-2-HOWTO 中也有关于如何自己构建一个的说明,但我认为不值得麻烦,如果您犯了错误,您可能会损坏并行端口——所以只需购买一个即可。

检查内核

接下来,检查您的内核。如果您使用的是 Slackware 3.2 发行版附带的发行版内核,那么您就一切就绪了。(如果您不知道您正在使用哪个内核,那么您可能只是使用了通用内核。)如果不是,请检查您是否具有可加载模块支持、网络支持、PLIP 和打印机支持作为模块(没有内置打印机支持)。如果您必须重新编译内核,请查看相应的文档并确保启用这些选项

CONFIG_MODULES=y
CONFIG_NET=y
CONFIG_INET=y
CONFIG_NETDEVICES=y
CONFIG_PLIP=m
CONFIG_PRINTER=m

重新编译内核并不难。您需要知道您拥有什么硬件并了解所有选项的含义。查看 Kernel-HOWTO 和内核源代码附带的 Documentation/Config.help 文件。如果您必须重新编译内核,请首先阅读本文的全文,因为稍后我将提到您可能想要启用的一些其他选项。

使用内核的正确选项,开始配置,采取以下步骤(如下两个部分所述)

  • 检查 /etc/rc.d/rc.modules 中的模块并更新 /etc/hosts。

  • 编写脚本以启动/停止连接。

网络设置

您必须以 root 身份才能编辑文件。在两台计算机上,在 /etc/rc.d/rc.modules 中,注释掉启用打印机支持的行。(要在文件中注释掉语句,只需在行首放置 # 字符即可。)例如

#/sbin/modprobe lp

检查 PLIP 支持是否也被注释掉。

#/sbin/modprobe plip
我将根据需要从脚本文件中加载/卸载模块。为这两台计算机选择名称;我将台式计算机称为“zeus”,笔记本电脑称为“hermes”。(赫尔墨斯是古希腊的旅行和商业之神,而宙斯是他的“老板”,是天空之神和众神之王。)在 zeus 和 hermes 上,编辑文件 /etc/hosts 并添加以下两行
192.168.93.1     zeus
192.168.93.2     hermes
地址 192.168.93.xxx 可以安全使用;除非您已经有使用这些地址的本地网络,否则它们不会与现有地址冲突。这些 IP 地址遵循 IP 寻址的约定:它们仅用于本地网络。(有关更多信息,请参阅 NET-2-HOWTO 和 RFC1597。)您可以跳过此步骤并使用数字地址,但记住 zeus 和 hermes 更容易。
脚本

在 zeus 上,创建以下脚本,/usr/sbin/plip-on.sh

#!/bin/sh
/sbin/modprobe -r lp
/sbin/modprobe plip
/sbin/ifconfig plip1 zeus pointopoint hermes up
/sbin/route add hermes dev plip1

modprobe 命令卸载模块 lp(打印机模块)并加载 plip 模块。(实际上,PLIP 在我的系统上在加载 lp 的情况下工作,但可用的文档说它不会工作;随意尝试。)然后运行 ifconfig 来设置网络接口 plip1route 告诉计算机如何找到通往网络的路径;在这里,主机 hermes 通过网络接口 plip1 定位。接下来,创建以下脚本,/usr/sbin/plip-off.sh

#!/bin/sh
/sbin/route del hermes
/sbin/ifconfig plip1 down
/sbin/modprobe -r plip
/sbin/modprobe lp
类似地,在 hermes 上,编写以下脚本,/usr/sbin/plip-on.sh
#!/bin/sh
/sbin/modprobe -r lp
/sbin/modprobe plip
/sbin/ifconfig plip1 hermes pointopoint zeus up
/sbin/route add zeus dev plip1
/sbin/route add default gw zeus dev plip1
zeus 上的 plip-on.sh 文件之间的主要区别在于我自始至终交换了 zeushermes。我还添加了默认路由,也就是说,当请求连接到网络(除了 zeus 之外)时,我默认使用 plip1。我需要此默认值才能通过 zeus 使用伪装将 hermes 连接到互联网,如本文末尾所述;对于 PLIP 和 NFS,它不是必需的。现在编写以下脚本,/usr/sbin/plip-off.sh
#!/bin/sh
/sbin/route del default
/sbin/route del zeus
/sbin/ifconfig plip1 down
/sbin/modprobe -r plip
/sbin/modprobe lp
记住更改两台计算机上的权限 (chmod +x plip-*.sh) 以使脚本可执行。现在,您可以插入电缆并发出此命令(以 root 身份)
# /usr/sbin/plip-on
在 zeus 和 hermes 上。(您先发出哪个都无关紧要。)您现在应该在 zeus 和 hermes 之间具有完全的连接。从 hermes 类型
hermes:~> telnet zeus
并登录到 zeus。恭喜。您刚刚设置了自己的私有本地网络。
以 root 身份运行脚本

以 root 身份运行脚本不仅令人讨厌,而且还可能很危险。您可能很容易通过错误地删除文件来损坏您的 Linux 系统,从而失去宝贵的数小时有时困难且乏味的自定义设置。这就是为什么您应该使用 Phil Hughes 在 1997 年 5 月的 Linux Journal 中的“安全地以 Root 身份运行程序”中描述的技术,并创建名为 plip-onplip-off 的 suid root 可执行文件,以允许任何用户启动和停止连接。所有可执行文件所做的只是运行脚本,假设 root 身份,而不管哪个用户运行它们。示例源代码可在 ftp://sunsite.unc.edu/pub/Linux/docs/linux-journal/listings/issue37 的文件 2114.tgz 中找到。

传输文件

我现在在 zeus 和 hermes 之间建立了完整的网络连接,因此所有网络软件都将工作(TELNET、FTP、rlogin 等)。尝试使用 ftp 在两台计算机之间交换文件。(FTP 服务器在 Slackware 中默认开启;检查 /etc/inetd.conf 文件和 inetd(8)、ftpd(8) 的 man 页面。)甚至比 ftp 更快,您可以使用 rcp(远程复制;请参阅 rcp(1)、rlogin(1)、rsh(1) 的 man 页面)。我在我的系统上获得的传输速率在使用 FTP 时约为每秒 25KB。

第二部分. 什么是 NFS?

NFS(网络文件系统)允许您通过网络连接访问其他计算机的远程文件系统。换句话说,您可以直接操作另一台计算机上的文件,就像它们是您自己计算机上的文件一样。您的内核必须启用 NFS 支持(Slackware 上的默认设置),并且您需要运行程序(称为“守护进程”),这些程序监听网络上的连接请求并在收到请求时采取相应的操作。您还需要指定哪些目录可以访问以及允许哪些主机访问它们。

设置 NFS

NFS 是一种比使用 ftp 或 rcp 更好的在两台计算机之间访问文件的方式。(要启用 NFS 支持,选项是 CONFIG_NFS_FS=y;同样,这是 Slackware 的默认设置。)此处描述的设置允许您将 hermes 的磁盘视为 zeus 上的磁盘,从而允许您直接访问所有文件,而无需登录(如 ftp)或设置 rhosts 访问权限(如 rcp)。在开始之前,使用命令 id 检查您在两台机器上的用户识别号 (UID)

zeus:~> id
uid=401(zeusname) gid=100(users) groups=100(users)
hermes:~> id
uid=401(hermname) gid=100(users) groups=100(users)

我将假设“uid=”右边的两个数字匹配。(此数字可能是 401 以外的其他数字。)如果它们不匹配,请参阅前面名为“如果 UID 不匹配”的部分。现在执行以下步骤(在接下来的三个部分中描述)

  • 在 /etc/rc.d/rc.inet2 文件中启动 RPC(远程过程调用)守护进程。

  • 创建要导出的 hermes 目录列表。

  • 将 hermes 的导出目录挂载到 zeus 上。

RPC 守护进程

在 hermes 上,检查 rpc 守护进程是否在 /etc/rc.d/rc.inet2 文件中启动。这些守护进程处理网络请求以处理 NFS。它们在 Slackware 中默认启动,因此如果您没有更改原始发行版中的 re.inet2 文件,则无需执行任何操作,您可以跳过本节的其余部分。

首先,键入 ps a | grep rpc 以检查守护进程是否正在运行。在我的系统上,我得到以下输出

hermes:~> ps a | grep rpc
80  ?  S     0:00 /usr/sbin/rpc.mountd
83  ?  S     0:00 /usr/sbin/rpc.nfsd
74  ?  S     0:00 /usr/sbin/rpc.portmap

如果它们没有运行,请编辑 /etc/rc.d/rc.inet2 文件(首先制作备份副本)并附加以下行

/usr/sbin/rpc.portmap
/usr/sbin/rpc.mountd
/usr/sbin/rpc.nfsd
如果您对 /etc/rc.d/rc.inet2 文件进行了任何更改,请重新启动计算机并检查以确保守护进程现在正在运行。这些命令始终可以从命令行以 root 身份发出,而不是重新启动。
导出目录

在 hermes 上,编辑 /etc/exports 文件,其中包含您希望从 zeus 访问的目录。您必须选择要导出的目录。您可以只导出根目录 /,从而导出整个磁盘;但通常您只想访问 /home 中的用户文件,因此在本例中,我仅导出 /home。将以下行添加到 /etc/exports 文件

/home  zeus

有关文件格式和可用选项,请参阅 exports(5) 的 man 页面。特别是,您将能够从 zeus 写入 hermes 的磁盘;如果您认为这不是一个好主意,请使用

/home  zeus(ro)
选项 ro 代表“只读”。请注意,除非您使用 exports(5) 中描述的选项专门允许,否则用户 root 无法从 zeus 写入 hermes 的磁盘。您可以使用相同的语法添加其他目录,每行一个。

现在通过发送信号使用命令告诉 nfsdmountd 守护进程 exports 文件已更改

hermes# killall -HUP rpc.nfsd rpc.mountd
挂载目录

从 zeus,您可以通过发出命令检查 hermes 现在是否准备好导出

zeus# /usr/sbin/showmount -e hermes
Export list for hermes:
/home    zeus

最后,在 zeus 上,选择一个“挂载点”;这只是一个空目录,您将使用它来访问 hermes 上的远程目录。我建议

zeus# mkdir /nfs
zeus# mkdir /nfs/hermes
准备好挂载了吗?从 zeus 类型
zeus# /sbin/mount -t nfs hermes:/home /nfs/hermes
现在可以从 zeus 访问 hermes 中目录 /home 中的所有文件。键入
zeus:~> ls /nfs/hermes/hermname
您将看到 hermes 上所有文件的列表(如果您的帐户用户名是“hermname”)。完成后并希望关闭笔记本电脑,通过给出以下命令卸载 hermes 的文件系统
zeus# /sbin/umount /nfs/hermes
然后使用脚本 plip-off.sh 关闭连接。

我甚至可以通过在 zeus 上的 /etc/fstab 文件中添加以下行来使事情更舒适一些

hermes:/home  /nfs/hermes  nfs  noauto   0  0

此命令告诉 Linux 将主机 hermes 上的目录 /home 添加到其文件系统列表中,该目录必须挂载在 zeus 上的 /nfs/hermes 下,但不是自动挂载(特别是,不是在启动时),并且 hermes 的类型为 nfs。(有关详细信息,请参阅 nfs(5)、filesystems(9)、fstab(4) 的 man 页面。)通过添加该行,挂载命令简化为

zeus# /sbin/mount /nfs/hermes
最后,如果您仅使用 PLIP 来使用 NFS,则可以将 mount 命令添加到 zeus 脚本 plip-on.sh 的末尾,并将 umount 添加到 plip-off.sh 的开头。在这种情况下,您必须首先在 hermes 上启动 PLIP,然后在 zeus 上首先关闭它,否则 mount 无法访问网络。
如果 UID 不匹配

如果您在 hermes 和 zeus 上有两个不同的 UID,您仍然可以从 hermes 读取 zeus 上 /nfs/hermes/hermname 目录中的文件,前提是这些文件是全局可读的。因此,您可以列出和复制文件,但您将无法修改它们,即使目录已导出并具有读写访问权限。这是真的,因为 zeusname 和 hermname 被认为是两个不同的用户。Linux 通过使用用户的 UID 而不是他们的帐户名来识别用户。

如果您只想将文件从 hermes 复制到 zeus,并且不介意 hermes 上的文件是全局(或组)可读的,则可以保持原样。更可能的是,您希望在 hermes 的磁盘上写入文件以及读取文件。您必须为 zeus 上的 zeusname 和 hermes 上的 hermname 选择相同的 UID,并且它必须与可能已存在于两个系统上的任何其他 UID 不同。最好为组 GID 也使用相同的识别号,但这可能已经是这种情况了;使用 Slackware,用户的默认组只是“users”,GID 等于 100。

UID 存储在 /etc/passwd 文件中。此文件的每一行都是特定用户的信息,以用户名开头。UID 是从行首开始的第三个字段,字段之间用冒号 (:) 分隔。一旦您确定了适合您的 UID,请编辑 /etc/passwd 文件并插入正确的 UID。假设 zeus 上的 UID 410 也可以在 hermes 上使用,并且 GID 为 100,则 zeus 上无需更改任何内容。然后通过给出以下命令更改 hermes 上您的主目录中文件的所有权

hermes# chown -R 410.100 hermname .

确保您从您的主目录发出命令,否则可能会遇到一些问题。查看 chown 的 man 页面,以确保您了解它的工作原理。如果您必须更改 zeus 和 hermes 上的 UID,请从 zeus 上的主目录发出相同的命令。

注意: 确保更改所有权不会影响其他用户的访问文件权限。如果您有您拥有但与同一组中的其他用户共享的文件或目录,这可能会导致问题。

IP 伪装

我现在有两台计算机,使用 PLIP 的本地网络连接,使用 NFS 进行文件共享。听起来不错,不是吗?是的,但我们想要更多。

如果我们通过 PPP 连接(或以太网卡)从 zeus 访问互联网,我们可以将 zeus 用作 hermes 访问互联网的网关。换句话说,我们可以通过并行电缆从 hermes 使用 zeus 上的 PPP 连接。我们将使用 IP 伪装来做到这一点。这是独立文章的主题(请参阅 Chris Kostick 在 1996 年 7 月的 Linux Journal 中的“使用 Linux 进行 IP 伪装”),所以我只想提供一些相关文档的指针。请参阅资源以获取 IP Masquerade HOWTO 和 Firewall-HOWTO 的网址。您将必须重新编译内核以激活伪装。在 zeus 上创建一个 /usr/sbin/ipmasq-on.sh 脚本,其中包含以下行

#!/bin/sh
ipfwadm -F -p deny
ipfwadm -F -a m -S 192.168.93.0/24 -D 0.0.0.0/0

当 PLIP 连接处于活动状态时,以 root 身份在 zeus 上调用脚本。我知道这些信息还不够,但伪装不是本文的主题,HOWTO 包含所有详细信息。

结论

我在文章的开头说过,我只是想要 zeus 和 hermes 之间的临时连接;看起来我有点得意忘形,并且接近使其永久化。顺便说一句,本文的大部分内容是在 hermes 上编写的,文件位于通过 NFS 挂载的 zeus 文件系统上。是的,我认为它真的正在变得永久。

资源

Quickly Setting Up PLIP and NFS
Loris Renggli 是一位数学家,拥有瑞士联邦理工学院数值分析博士学位。在过去的四年里,他一直在瑞士、芬兰、法国和美国从事教学和研究工作。他最后一次露面是在佛罗里达州立大学担任数学助理教授。当您阅读本文时,他将在其他地方;他更喜欢通过电子邮件 renggli@math.fsu.edu 联系。
加载 Disqus 评论