通信将通过串口进行。在服务器端,我们将通过 "/dev/ttyS1" (DOS/Windows 中的 COM2) 设备进行连接。在您的计算机上,这可能会有所不同,您应该相应地修改以下示例。我强制身份验证,因为我使用此配置为一组人提供访问文件服务器上文件的方式。登录后,他们可以使用 Samba 文件共享来复制笔记本电脑上的文件。如果您不担心安全性,您可以注释掉相关的选项。
PPP (点对点协议) 通信通过串行链路提供 TCP/IP。换句话说:当您想通过调制解调器进行基于互联网的浏览时,您很可能正在使用它。在 Linux 中,PPP 由 PPP 守护进程 "pppd" 实现。它的配置通过 "/etc/ppp/" 目录中的文件完成。我们将使用以下文件
/etc/ppp/options 包含 PPP 连接的所有通用选项
包含特定于通过 "/dev/ttyS1" 的连接的 PPP 选项
包含身份验证信息
启动初始系统服务
"/etc/ppp/options" 文件应该看起来大致如下
#/etc/ppp/options lock #auth forces authorization from peer #login makes authentication use the system password file #NOTE: my pap-secrets allows anyone access, so if this is not specified # anyone could connect! If this is a machine on which you dial out # as well, then comment auth and login out and move them to # /etc/options.ttySn auth login |
以 "#" 开头的行是注释。"lock" 参数表示将创建一个锁文件以确保对串行设备的独占访问,"auth" 参数表示客户端将需要进行身份验证,"login" 告诉 pppd 使用系统用户名和密码进行身份验证。
请注意,pppd 仍然会检查 "/etc/ppp/pap-secrets" 文件以获取用户名和密码信息。一个特殊的单行条目使 pppd 仅使用系统的用户信息。"/etc/ppp/pap-secrets" 文件如下所示
#/etc/ppp/pap-secrets # Secrets for authentication using PAP # client server secret IP addresses * * "" ppp_laplink_client |
这允许任何 IP 地址为 "ppp_laplink_client" 的机器连接到服务器,而无需使用密码(您可以看到在您的 /etc/hosts 文件中拥有 ppp_laplink 条目是多么方便)。但是,"/etc/ppp/options" 文件中的 "login" 参数使得客户端为授权提供的用户名和密码必须与 "/etc/ppp/pap-secrets" 文件以及系统用户名和密码匹配,因此只有在提供有效的用户名和密码后连接才会成功。
特定于您正在连接的串行线的选项放置在 "/etc/ppp/options.ttySn" 中,其中 n 是串行设备的编号。我的服务器使用 "/dev/ttyS1",因此选项进入... "/etc/ppp/options.ttyS1"。
#/etc/ppp/options.ttyS1 asyncmap 0 crtscts #local indicates that modem lines are not used local #silent causes pppd to wait until a connection is made from the other side silent #these are entries that exist in the /etc/hosts file #the link does not work if this is at the end of this file - order matters! ppp_laplink_server:ppp_laplink_client #auth forces authorization from peer #login makes authentication use the system password file #NOTE: my pap-secrets allows anyone access, so if this is not specified # anyone could connect! If this is a server that will never use ppp # for dialing out, you should move auth and login to /etc/ppp/options #auth #login #use PAP, not CHAP for authentication require-pap 115200 |
所有这些选项都在 pppd 手册页中得到了很好的描述;一些关键选项在文件中用注释进行了说明。"crtscts" 参数告诉 pppd 使用硬件流控制。这是推荐的,因为它是最快的。或者,您可以指定 "xonxoff" 以使用基于软件的流控制 - 如果您的零调制解调器线缆没有连接 RTS/CTS 线,您将指定此选项(如果您在商店购买了线缆,则不太可能)。"115200" 指定数据传输速率 - 如果您在连接时遇到问题,您可能需要尝试较低的速度。您可以在 termios 手册页中找到有效的速度设置,尽管您的硬件会限制波特率。选择无效的速度设置将引起来自 pppd 守护进程的错误消息,并且显然它会恢复为某些默认值。
请注意,"auth" 和 "login" 选项在此处被注释掉,因为它们在通用选项文件中指定。如果您也使用您的计算机拨号连接到 ISP,您将希望在此处而不是在 "/etc/ppp/options" 中指定它们,否则您将要求您的 ISP 在您拨号时对其自身进行授权,这可能不会成功。默认情况下未在此文件中指定它们的原因是,如果您现在或将来有其他传入的 PPP 连接,您希望确保它们始终经过身份验证。请记住,此处提供的 "pap-secrets" 不提供任何保护。
最后,"ppp_laplink_server:ppp_laplink_client" 条目指定链路建立后的本地和远程 IP 地址。您可以在此处使用实际的 IP 号码(例如 192.168.0.1:192.168.1.1),或来自 "/etc/hosts" 文件的条目,就像我所做的那样。后者的好处是您可以使用名称在以后引用这些链接。我也建议您使用像我使用的那些 IP 号码(192.168.0.1:192.168.1.1)。这些地址是为本地网络预留的,在互联网上不存在,因此您避免了可能的冲突。链路建立后,客户端可以使用 ppp_laplink_server (192.168.0.1) 的 IP 地址引用服务器,服务器可以使用 ppp_laplink_client (192.168.1.1) 引用客户端。
您可以在 "/etc/ppp/pap-secrets" 中使用不同的条目,仅允许选定的用户访问。我正在使用 PAP 协议进行身份验证;如果您愿意,可以使用 CHAP - 设置大致相同,使用 "chap-secrets" 文件。对于这些和其他选项,您可以查阅手册页和底部提到的文档。
您可以让 PPP 守护进程 (pppd) 在您启动系统时启动,并让它监控您选择的串口线。实现此目的的一种优雅方法是编辑 "/etc/inittab" 文件。此文件包含用于初始化系统的信息。将以下内容添加到此文件中
# Start pppd for the serial laplink. pd:2345:respawn:/usr/sbin/pppd /dev/ttyS1 nodetach |
这可以理解为:对于运行级别 2、3、4 和 5,启动 "/usr/sbin/pppd /dev/ttyS1 nodetach",如果它死了(在连接结束时),则 respawn(启动一个新的)。"nodetach" 选项使 pppd 保持连接到启动它的终端,而不是 fork 并退出。此选项是必要的,因为 "init" 进程否则会立即 respawn 一个新的进程。inittab 文件中的其他条目指定在串行终端 (tty) 上运行的 getty 进程;它们的初始化看起来很像这个。
要激活此新配置,请键入
[root@griis /root]# /sbin/init q |
如果只是偶尔您想连接到您的服务器,您可能更喜欢手动启动连接。所有设置保持不变;您可以通过简单地键入以下命令来启动服务器
/usr/sbin/pppd /dev/ttyS1 nodetach |
在命令行中。"nodetach" 选项不是真正必要的,但它使通过按 "ctrl-c" 来终止连接变得容易。
不幸的是,MS Windows 的实现不是很标准。在启动 PPP 连接之前,它需要交换文本字符串 "CLIENT"(来自客户端)和 "CLIENTSERVER"(来自服务器)。为了适应 Windows 客户端,必须将以下行添加到 "/etc/ppp/options.ttyS1" 文件中
connect 'chat -v -f /etc/ppp/scripts/winclient.chat' |
然后创建 scripts 目录和 chat 文件 "/etc/ppp/scripts/winclient.chat"
TIMEOUT 3600 CLIENT CLIENTSERVER\c |
connect 选项允许您指定一个程序来处理连接之前的字符串交换。通常,"chat" 程序用于此目的;请查看手册以了解更多详细信息。给定的脚本处理 Windows 连接问题。当连接 Linux 机器时,您不需要它。