这节内容只在 FreeBSD 7.X 上可用。
下面是在静态主机网络上配置 FreeBSD 机器使用 SLIP 的方法。 对于动态主机名分配 (您的地址会随每次拨号而不同), 您可能需要稍复杂一些的设置。
首先, 您需要确认调制解调器所连接的串口。
许多人会设置一个符号连接, 例如
/dev/modem
, 用以指向实际的设备名, 如
/dev/cuad
。
这样您就可以对实际的设备名进行抽象,
以备调制解调器换到其他串口时方便调整之用。 不然, 修改
N
/etc
和遍布于系统中的 .kermrc
文件将是一件很麻烦的事情!
/dev/cuad0
对应
COM1
, 而 /dev/cuad1
则对应
COM2
, 等等。
确保您的内核文件包含以下内容:
这包含在GENERIC
内核, 所以这应该不会是个问题, 除非您
已经删除了它。
把您本地网络上的机器、 网关以及域名服务器,
都加入到 /etc/hosts
文件中。
我们的是下面这个样子:
请确保在您的 /etc/nsswitch.conf
中的 hosts:
小节里面, files
先于
dns
出现。 如果不是这样的话,
可能会产生一些不希望的现象。
编辑/etc/rc.conf
。
创建文件/etc/resolv.conf
, 写入以下内容:
正如您看到的, 这些行设置了域名服务器。 当然, 实际的域名和IP地址取决于您的环境。
设置root
和
toor
的密码(其它任何没有密码的帐号)。
重启计算机, 然后确认使用了正确的主机名。
在命令提示符之后输入 slip
进行拨号,
输入您的机器名和口令。 具体需要输入什么,
与您的环境密切相关。 如果使用
Kermit,
则可以使用类似下面的脚本:
当然, 您还需要修改用户名和口令来满足实际需要。
完成这些操作之后, 只需在 Kermit
提示符之后输入 slip
就可以连接了。
将密码以纯文本的形式存放在文件系统无论如何都是个 坏 主意。 请考虑这样做的风险。
在这里退出 Kermit (也可以用
Ctrl+z 将其挂起), 以 root
用户键入:
#
slattach -h -c -s 115200 /dev/modem
如果您能ping
通路由器另一端的主机, 就是连接好了! 如果不行,
您可以使用-a
选项代替
-c
作为slattach
的参数。
按下面的步骤做:
#
kill -INT `cat /var/run/slattach.modem.pid`
来杀掉 slattach
。 切记上述操作只有以
root
身份才能完成。 接下来回到
kermit
(如果之前是将它挂起了,
则使用 fg
) 并退出 (q)。
在 slattach(8) 联机手册中提到,
必须使用 ifconfig sl0 down
才能将接口标记为关闭, 但和这样做似乎没有什么区别。
(ifconfig sl0
仍然报告同样的东西。)
有时, 您的 modem 可能会拒绝挂断。
这种情况下, 只需重新启动 kermit
并再次退出它就可以了。 一般来说试二次就可以了。
如果还不行, 尽管发邮件到 freebsd-net 邮件列表来提问。 常见的问题包括:
执行 slattach
时不使用
-c
和-a
选项
(这应该不是关键的, 但有些用户报告这样做解决了问题)。
使用s10
替换
sl0
(在一些字体下很难看出不同)。
试试ifconfig sl0
来查看您的接口状态。
例如, 您可以这样做:
#
ifconfig sl0
sl0: flags=10<POINTOPOINT>
inet 136.152.64.181 --> 136.152.64.1 netmask ffffff00如果在使用 ping(8) 时得到了
no route to host 这样的提示,
则说明您的路由表可能有问题。 可以用 netstat -r
命令来显示当前的路由:
#
netstat -r
Routing tables
Destination Gateway Flags Refs Use IfaceMTU Rtt Netmasks:
(root node)
(root node)
Route Tree for Protocol Family inet:
(root node) =>
default inr-3.Example.EDU UG 8 224515 sl0 - -
localhost.Exampl localhost.Example. UH 5 42127 lo0 - 0.438
inr-3.Example.ED water.CS.Example.E UH 1 0 sl0 - -
water.CS.Example localhost.Example. UGH 34 47641234 lo0 - 0.438
(root node)前述的例子来自于一个非常繁忙的系统。 您系统上的这些数字会因网络活动的不同而改变。
本文提供了在 FreeBSD 上设置 SLIP 服务, 也就是如何配置您的系统, 使其能在远程 SLIP 客户端登录时自动地开启连接的建议。
这一节技术性很强, 所以要求您有一定的背景知识。 本节假定您熟悉 TCP/IP 网络协议, 特别是网络和节点寻址、 子网掩码、 子网划分、 路由、 路由协议 (如RIP) 等知识。 在拨号服务器上配置 SLIP 需要这些概念性的知识。 如果您不熟悉它们, 请先阅读 Craig Hunt 的 TCP/IP 网络管理 由O'Reilly & Associates, Inc. 出版 (ISBN 0-937175-82-X), 或 Douglas Comer 有关 TCP/IP 协议的书籍。
此外还假定您已经配置好了您的调制解调器以及相应的系统文件,
以允许通过调制解调器进行登录。 如果您还没有为此配置好系统,
请参见 第 27.4 节 “拨入服务” 以了解关于如何进行拨号服务的配置。
您可能也会想看一看 sio(4) 的联机手册,
以了解关于串口设备驱动的进一步信息, 以及 ttys(5)、
gettytab(5)、 getty(8) & init(8)
上关于怎样配置系统来接受来自调制解调器的登录请求的具体情况,
还有 stty(1) 以了解关于设置串口参数
(例如 clocal
表示串口直联) 等。
使用FreeBSD作为SLIP服务器, 在典型配置时, 它是这样工作的:
一个SLIP客户拨号并以专用的login ID登录到FreeBSD SLIP服务器系统。
这个用户使用 /usr/sbin/sliplogin
作为 shell。 sliplogin
程序会在文件
/etc/sliphome/slip.hosts
中查找这个用户的项,
如果找到了匹配项, 就将串行线连接到一个可用的 SLIP 接口,
然后运行 shell 脚本 /etc/sliphome/slip.login
以配置 SLIP 接口。
例如, 如果一个SLIP用户的ID是Shelmerg
,
在/etc/master.passwd
中Shelmerg
的项如下的所示:
Shelmerg
登录时,
sliplogin
在文件
/etc/sliphome/slip.hosts
中搜索与用户ID匹配的行;如下所示:
sliplogin
找到这条区配行,
并将串行线与另一个可用的SLIP接口连起来,
然后执行/etc/sliphome/slip.login
脚本:
如果一切顺利
/etc/sliphome/slip.login
将在
sliplogin
绑定的 SLIP 接口上发出
ifconfig
(前述的例子中是 SLIP 接口
0, 这是 slip.login
的第一个参数),
以设置本地 IP 地址 (dc-slip
)、 远程 IP 地址
(sl-helmer
)、 这一 SLIP
接口的子网掩码 (0xfffffc00
),
以及任何其他标志 (autocomp
)。
如果发生错误, sliplogin
通常会通过
syslogd 的 daemon facility
记下有用的信息, 前者会把这些信息保存到
/var/log/messages
(参见 syslogd(8) 和 syslog.conf(5) 以及
/etc/syslog.conf
的联机手册, 以了解
syslogd 在记录什么,
以及这些内容将被记在哪里)。
FreeBSD 的默认内核 (GENERIC
)
提供了 SLIP (sl(4)) 支持; 使用定制的内核时,
您必须把下面的设置加入到配置文件:
默认情况下, 您的 FreeBSD 计算机不会转发包。
如果您希望将 FreeBSD SLIP 服务器作为路由器使用,
就需要修改 /etc/rc.conf
文件,
将 gateway_enable
变量设为
YES
。 这样下次系统引导时就能够保持这一配置了。
要立即应用这些配置, 可以 root
的身份运行:
#
/etc/rc.d/routing start请参阅 第 9 章 配置FreeBSD的内核 以了解如何配置 FreeBSD 内核, 并获得在重新配置内核方面的指导。
正如先前所提到的,
/etc/sliphome
目录中有三个文件,
它们共同构成 /usr/sbin/sliplogin
的配置 (参考
sliplogin
的联机手册 sliplogin(8)):
用于定义 SLIP 用户和相关的 IP
地址的 slip.hosts
、
通常仅用于配置 SLIP 接口的 slip.login
, 以及 (可选的)
slip.logout
, 用以撤销由
slip.login
所执行的动作。
/etc/sliphome/slip.hosts
里的每行包含至少四个元素, 元素之间由空格隔开:
SLIP用户的登录ID
SLIP连接的本地地址(指SLIP服务器)
SLIP连接的远程地址
网络掩网
本地和远程地址可以是主机名
(通过文件/etc/hosts
或者域名服务解析为IP地址,
这取决于文件/etc/nsswitch.conf
中的设置), 网络掩网可以是一个
能通过文件/etc/networks
解析的名字。
在一个样例系统中,
/etc/sliphome/slip.hosts
是这样的:
在这行末尾是一或多个选项:
normal
—不压缩报头
compress
— 压缩报头
autocomp
—如果远程端允许, 压缩报头
noicmp
—禁用ICMP数据包
(这样就会丢弃所有的“ping”数据包, 不占用您的带宽)
对SLIP连接的本地及远程地址的选择取决是您是准备在SLIP服务器上使用 TCP/IP 子网还是使用“ARP代理” (它并不是“真正的”ARP代理, 而是我们在本节用于介绍的术语)。 如果您不能确定选择何种方式或者如何分配地址, 请参考"前提条件"(第 28.7.2.1 节 “前提条件”)里列出的TCP/IP书籍 或者向您的IP网络管理员请教。
如果打算为您的 SLIP 客户使用一个独立的子网, 就需要先从分配得到的网络号中取出一个子网号, 然后再在这个子网里给每个 SLIP 客户分配 IP 地址。 接下来, 您还需要通过 SLIP 服务器在最近的 IP 路由器上配置一个指向 SLIP 子网的静态路由。
如果要使用 “代理 ARP”
的方式, 您还需要从 SLIP 服务器的以太子网中为每个 SLIP 客户分配IP地址,
还必须修改/etc/sliphome/slip.login
和
/etc/sliphome/slip.logout
脚本以使用
arp(8)来管理在 SLIP
服务器 ARP 表中的 “代理 ARP” 项。
典型的/etc/sliphome/slip.login
如下所示:
这个slip.login
脚本仅仅为带有相应本地及远程地址和掩码的SLIP接口执行
ifconfig
。
如果您决定使用“ARP代理”
方式(而非为您的SLIP客户使用独立的子网), 您的/etc/sliphome/slip.login
应该是这样:
slip.login
新加的行arp -s
$5 00:11:22:33:44:55 pub
在 SLIP 服务器的 ARP
表中加入了一个表项。 这个ARP项使得每当这个以太网上的其它
IP 节点对 SLIP 客户端 IP 地址进行 ARP 请求时,
SLIP 服务器会以自已的以太网MAC地址作为回应。
当使用以上的例子时, 一定要将
以太网MAC地址 (00:11:22:33:44:55
)
替换成您系统网卡的MAC地址, 否则“ARP代理”
将完全无法工作! 您可以查看 netstat -i
输出结果以取得以太网 MAC 地址; 输出的第二行应该是这样:
这行表明这个系统的以太网MAC地址是00:02:c1:28:5f:4a
—netstat -i
输出的以太网MAC地址必须改成用冒号隔开, 并且要单个十六进数前加上。
这是arp(8)要求的格式; 参考arp(8) 的联机手册以获取完整的使用方法。
在编写
/etc/sliphome/slip.login
和
/etc/sliphome/slip.logout
时, 一定要设置
“可执行” (execute) 位 (换言之, chmod 755
/etc/sliphome/slip.login /etc/sliphome/slip.logout
),
否则 sliplogin
将无法执行它。
/etc/sliphome/slip.logout
并不是必需的
(除非您使用了“ARP代理”), 如果您准备创建它, 这里有一个基本的
slip.logout
脚本的例子:
如果使用了 “代理 ARP”,
则可能希望 /etc/sliphome/slip.logout
在用户注销时自动为 SLIP 客户端删除
ARP 项:
arp -d $5
将删除由 “代理 ARP”
slip.login
在 SLIP 客户程序登录时所生成的
ARP 项。
再次强调: 建立
/etc/sliphome/slip.logout
之后,
一定要设置可执行位 (也就是说, chmod 755
/etc/sliphome/slip.logout
)。
本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
如果对于FreeBSD有问题,请先阅读
文档,如不能解决再联系
<questions@FreeBSD.org>.
关于本文档的问题请发信联系
<doc@FreeBSD.org>.