发信人: Steely_Fighter@bbs.ustc.edu.cn (麻烦大了), 信区: cnlinux
标 题: Linux NET HowTo (中文版) (3)
发信站: 中国科大BBS站 (Mon Apr 21 13:44:01 1997)
转信站: Lilac!ustcnews!ustcnews!ustcbbs
11.1.1. 为何我要使用 PPP 代替 SLIP ?
使用 PPP 代替 SLIP 通常的原因有:
提供你连 Internet 的设备只支援 PPP
你会使用 PPP 而不使用 SLIP 最明显的原因 , 主要在于提供连
线的单位仅提供 PPP, 而没有 SLIP。 Ok, I said it is obvious.
你有一个「饱受摧残」的 serial line
PPP 对每个传输的 frame 都会做 frame check, SLIP 不会。
如果你的线路容易受干扰,而且你使用 SLIP, error correction
将会在连线两端(自己的机器与目的机器, end to end)来做, 而
PPP 却在自己的一端做 error detection , 在你的机器与 PPP
server。这样允许快速的修复 errors。
你需要用到 PPP 提供的其他功能
PPP 提供许多需 SLIP 不提供的功能。
例如在同一条 serial link, 你可能不只要传 IP, 也同时要传
DECNET 或 AppleTalk 的封包, PPP 允许你做这样的事情。
11.1.2. 何处可取得 PPP 软体 ?
ppp 软体可在下列节点取得:
sunsite.unc.edu
/pub/Linux/system/Networking/serial/ppp-2.1.2a.tar.gz
这个档案包含 kernel source, 及 pppd source 及 binary 。
Version 1.0.0 可与 kernels 1.0.x and 1.1.x. 配合使用。现在并不
支援 Fred's Net-2E 的 kernel 。
11.1.3. 安装 PPP 软体
PPP 的安装是很直接的。( <---唉...我竟然在翻译废话 )
11.1.3.1. The kernel driver.
有些支援 ppp 的部份已经建入 kernel 了。 设定 kernel 是很简单的
啦, 以下步骤绝对 OK! 不会随便当给你看...
# cd /usr/src
# gzip -dc ppp-2.1.2a.tar.gz | tar xvf -
# cp /usr/src/ppp-2.1.2a/linux/ppp.c /usr/src/linux/drivers/net
# cp /usr/src/ppp-2.1.2a/pppd/ppp.h /usr/src/linux/include/linux
你将需要把 CONFIG_PPP define 上来, 在 /usr/src/linux/config.in
中。如果你正在跑的 kernel 是 1.1.4+ 的, 那拟就还要把 NET02D 标
为注解!!!在 /usr/src/linux/drivers/net/ppp.c 中, 如果你跑的是
最新的版本,好胆你就卖踩小伊。
然后你可以 make config, 选择 PPP support, 然后再下 make
dep;make.打个蛋花就好啦!
当你 reboot 新 kernel 时, 你会在画面上看到类似下列讯息:
PPP: version 2.1.1 (4 channels)
TCP compression code copyright 1989 Regents of the University of California
PPP line discipline registered.
现在呢, 来看看 /proc/net/dev 的内容, 看起来似乎是这锅样子地...
Inter-| Receive | Transmit
face |packets errs drop fifo frame|packets errs drop fifo colls carrier
lo: 0 0 0 0 0 0 0 0 0 0 0
ppp0: 0 0 0 0 0 0 0 0 0 0 0
ppp1: 0 0 0 0 0 0 0 0 0 0 0
ppp2: 0 0 0 0 0 0 0 0 0 0 0
ppp3: 0 0 0 0 0 0 0 0 0 0 0
能看到这些东西就是说你不必再重头来过啦... 唉... 累啊...
11.1.3.2. pppd
如果你要重新 compile pppd, 在 pppd Install 的子目录中打 make,
在 compile lcp.c, upap.c, 及 chap.c 时会有警告发生 (warning),
不过没关系的。
如果你要 recompile chat, 现了解 chat 目录中的 README.linux.
Install 时, 在 chat 及 pppd 目录中打 make install, 将会把 chat
及 pppd 的二进位档放到 /usr/etc 中, pppd.8 的 man page 会放在
/usr/man/man0 。
pppd 需要用 root 来执行。 你可以用 suid 到 root 或直接以 root
的身分来执行。 make install 时会尝试 suid 到 root, 所以如果你
已是 root , 那应该没问题。
11.1.4. 设定并使用 PPP 软体
就像 slip, 你可把 PPP 设定成 server 端或 client 端, chat 的功
能跟 dip 很类似。 会自动的拨号及 login 到远端的机器中有一点跟
dip 不像的地方, 他不会执行 ioctl 把 serial line 转换成 PPP
line 。 这个动作会由 pppd 来执行, pppd 可以当作 client 或
server 来跑。当作 client 时, 它会呼叫 chat 来建立连线及 login,
然后它执行 ioctl 把连线转成 ppp, 而后让你使用。
请参考 pppd 及 chat 的 man pages 查看更详尽的内容。 也顺便看看
PPP 软体中所附的 README 档。它会介绍一些执行档如何运作, 比我在
这口沫横飞所讲得还多。
11.1.4.1. Configuring a PPP client by dial-up modem.
这可能是大部分人想做的事, 所以先讲。你会使用到这个设定, 当你透
过 dialup modem 连上有支援 ppp 的网路。 当你要建立你的连线时,
你只要启动 pppd 程式, 并加上必要的参数。
以下的例子可能起初看起来会搞不清楚况, 但是你若把 ' ' 内的那段
文字看成是 pppd 的第二个参数, 把 " " 内的文字看成是, chat 的参
数, 那就容易得多了。
pppd connect 'chat -v "" ATDT5551212 CONNECT "" ogin: ppp word: password'\
/dev/cua1 38400 debug crtscts modem defaultroute 192.1.1.17:
这一行是在说:
o 用以下这一行来呼叫 chat:
chat -v "" ATDT5551212 CONNECT "" ogin: ppp word: password
那就是说: 拨 5551212, 等待 `CONNECT' 字串送初一个 CR(carriage
return), 等待 `ogin:', 送出 `ppp' 字串, 等待 `word' 然后送出
`password', 然后跳出。
o 使用 serial device /dev/cua1
o 设定速度到 38400 bps.
o debug 代表 log(动词) status messages 到 syslog
o crtscts 表示对 modem 使用 hardware handshaking - 强烈建议。.
o modem 表示 pppd 将会在拨号前后, 尝试挂断(hang up)。
o defaultroute 会指示 pppd 增加一个产生 default route 的 routing
entry。大部分的状况下将会是你要的。
o 192.1.1.17: 表示把 ppp interfaces address 设成 192.1.1.17。
这个参数正常的时候, 看来应该像: x.x.x.x:y.y.y.y , x.x.x.x 是
你的 IP address, y.y.y.y 是 server 的 IP address, 如果你省略
server 端的 IP address, pppd 将会 ask for it, x.x.x.x 将会被
设成你的 ip address.
请参考 pppd 及 chat 的 man pages.......
(这一段请参考 11.1.4 最后一段)
11.1.4.2. 以专线(leased line) 来设定 PP client
以专线 (leaseed line) 来设定 PPP client 跟用 slattach 来设定
slip 来得更直接。你还是会用到 pppd, 但是因为你不需要建立 modem
的连线, 所以会较减单。
例如: 我在此假设 ppp server 不用特别的 login procedure.我这样
做是因为每次的 login 都会不一样。如果你只跑区域的连线,你可能要
这样设定:
pppd connect 'echo connecting...' defaultroute noipdefault debug \
kdebug 2 /dev/cua0 9600
上一行会在萤幕上秀出讯息, 并设定 ppp interface 的 default
route "noipdefault" 这个参数会叫 pppd 从 server 端取得这个
device 的 address, 除错的讯息会送到 syslog 中。 "kdebug 2" 这
个参数会把除错讯息设成 level 2, 这样做会给你更多的资讯来了解到
底出了什么状况。它会使用到 /dev/cua0 (9600bps 的速率 ) 。
如果你的 ppp server 不需要 login procedure 之类的东西, 在这个
例子中, 你可以使用 chat 。
请参考 pppd 及 chat 的 man pages.......
(这一段请参考 11.1.4 最后一段)
11.1.4.3. Configuring a PPP server.
设定 PPP server 的程序跟架个 slip server 类似。 你可以开个特别
的 `ppp' 帐号, 这个帐号使用一个可执行的 script来当作 login
shell 。 /etc/passwd 档中的该行看起来像这样:
ppp:EncPasswd:102:50:PPP client login:/tmp:/etc/ppp/ppplogin
那锅 /etc/ppp/ppplogin shell script 看起来向这锅样子:
#!/bin/sh
exec /usr/etc/pppd passive :192.1.2.23
你提供的 address 将是呼叫的机器会被 assign 的。
当然, 如果你要允许许多 user 同时 access, 你必须开许多的
startup scripts 及各人的 accounts, 因为你只能在一个 script 中
使用一个 IP address 。
11.1.5. 哪儿可以取得更详尽的 PPP 或 bug 报告 的资讯呢 ?
大部分linux PPP 的讨论都在 PPP mailing list 上面。
若想要加入mail list server 中的 PPP channel, send mail 到:
linux-activists@niksula.hut.fi
with the line:
X-Mn-Admin: join PPP
at the top of the message body (not the subject line).
记得若是你要报告 bug 或问题上去, 你应该尽可能地详细描述你的问
题那会帮助你了解你的问题, 也使别人能更清楚地了解你的问题。
你也可以查查:
RFCS 1548, 1331, 1332, 1333, and 1334. 这些是 PPP 定义的文件。
W. Richard Stevens 也在 `TCP/IP Illustrated Volume 1',
(Addison- Wessley, 1994, ISBN 0-201-63346-9) 一书中讨论到 PPP.
11.2. 把 Linux 设定成 Slip Server
如果你有一台连网路的机器, 你可能会想要提供一些像 dial in 的网
路服务, 那拟就需要把你的机器设成一个 server, 如果你要使用 slip
当作 serial line protcocol, 那你有两条路可以走...我会两个都说
明。
11.2.1. Slip Server using sliplogin
sliplogin 是一个程式, 可用来代替一般 slip user 的 login shell
会将 terminal line 转成 slip line 。 caller 会 login 成标准的
login process, 输入 username 及 password, 在 login 之后,
sliplogin 会被执行, 去找 /etc/slip.hosts 查询跟 caller match
的 entry, 而不跑 shell 。 如果它 locate 成功一个 login, 它就把
连线设成 8bit 的线, 并使用 ioctl call 把连线转成 slip 。当这个
process 完成之后, 最后一个步骤就完成了。 这时 sliplogin 会呼叫
一个 shell script, 把设定 slip interface 相关的 ip address,
netmask 及适合的 routing 。 这个 script 通常叫做
/etc/slip.login, 但是跟 getty 的相同的规则。 如果你有特定的
caller 要求使用特别的 initialisation, 你可以写个设定的 script
叫做 /etc/slip.login.loginnmae, 会取代内定的 script 。
11.2.1.1. 何处取得 sliplogin
sliplogin 可在下列节点取得:
sunsite.unc.edu
/pub/Linux/system/Network/serial/sliplogin.tar.gz
tar 档中同时包括 source code, precompiled binary, 及 man page
。 把它 (binary) 给 install 到 /sbin 目录中, man page 就给他灌
到 section 8, 做看看:
# cd /usr/src
# gzip -dc .../sliplogin.tar.gz | tar xvf -
# cd src
# make install
如果你要重新 compile 出 binaries, 在 make install 之前, 下个
make clean 指令, 如果你要安装 binary 到其他的所在, 那你就要修
改 Makefile 内的规则罗...
11.2.1.2. 设定 slip host 的 /etc/passwd
你需要在 /etc/passwd 中为 caller 开一些特别的 login user 。 依
照惯例, 我们将使用 calling host 的 hostname 当作 login name,前
面再加个大写的 S, 所以, 例如: 如果 calling host 叫做 radio,那
你可在 /etc/passwd 中开个 login name:
Sradio:FvKurok73:1427:1:radio slip login:/tmp:/sbin/sliplogin
备注: caller 不需要任何的 home directory, 因为它们不会跑
shell.所以 /tmp 是个不错的选择。 也要注意 sliplogin 是使用来代
替一般的 login shell 。
11.2.1.3. 设定 /etc/slip.hosts
/etc/slip.hosts 是用来给 sliplogin 找寻相对应的 login name, 以
取得 caller 的设定内容。 它也是你指定 caller 的 ip address 及
netmask 的地方, 一个简单的 user name 为 `radio' 的例子如下:
Sradio `hostname` radio <netmask> <opt1> <opt2>
/etc/slip.hosts 的内容为:
1. caller 的 login name
2. server 的 ip address, 也就是本身这一台。
3. 设定给 caller 的 ip address
4. the netmask assigned to the calling machine in hexadecimal notation
eg 0xffffff00 for a Class C network mask.
5. optional parameters to enable/disable compression and other
features.
备注: 你可以在第二栏及第三栏使用 hostnames 或 IP addresses, 如
果你使用 hostnames 那这些 host 就必须要先翻译成 ip
address,也就是说, 你的机器必须对这些机器做 ip address 的
定址 ( <- 很玄吗? ), 不然 script 被呼叫后会失败。 你可以
先 telnet 到那台主机看看, 如果你看到 `Trying
nnn.nnn.nnn...' 的讯息, 那你的机器就可找到相对应的 ip
address, 如果你看到的是 `Unknown host', 那表示无法找到该
台主机, 如果不行, 直接用 ip address来连。或修改 resolver
的设定 ( 通常是 /etc/resolv.conf) 。
opt1 opt2 最普通的参数是:
normal
启动(enable) normal uncompressed slip.
compress
启动(enable) van Jacobsen header compression (cslip)
当然, 这些是互斥的 (mutually exclusive)( 有一就不能有二 ), 你
只能使用其中的一种, 其他参数请看 man page.
11.2.1.4. 设定 /etc/slip.login 档
在 sliplogin 搜寻 /etc/slip.hosts 档, 并且在找到之后, 它会去执
行 /etc/slip.login 档, 用 ip address 及 netmask 来设定 slip
interface 。
使用 sliplogin package 的 /etc/slip.login 范例档如下:
#!/bin/sh -
#
# @(#)slip.login 5.1 (Berkeley) 7/1/90
#
# generic login file for a slip line. sliplogin invokes this with
# the parameters:
# 1 2 3 4 5 6 7-n
# slipunit ttyspeed loginname local-addr remote-addr mask opt-args
#
/sbin/ifconfig $1 $4 pointopoint $5 mtu 1500 -trailers up
/sbin/route add $5
exit 0
要注意这个 script 只使用 ifconfig 及 route 指令来设定 slip
device 。 ( 设定: ip address, remote, ip address and netmask),
透过 slip device 为 remote address 开一个 route 。就跟你喜欢如
果你使用 slattach指令。
11.2.1.5. Configuring the /etc/slip.logout file.
当一个 connect close 后, 你要确定 serial device 回复原来的状态
。以使未来的使用者能正确的 login, 这要使用 /etc/slip.logout 档
来达成, 很简单的啦, script sample 如下:
#!/bin/sh -
#
# slip.logout
#
/sbin/ifconfig $1 down
/sbin/route del $5
exit 0
它所做的是把 interface `down' 下并删除先前开设的 route。
11.2.2. 使用 dip 的 Slip Server
现在我所要讲的, 有一部份来自 dip 的 man page, man page 内已经
包含了简要的设定。
设定 Linux 成 slip server, 你需要为使用者开设特别的 slip
accounts,在 slave mode 的 dip 被当作 user account 的 login
shell 。
Fred 建议使用惯例, 在 account 前面加上大写 S, 他的 slip
accounts以 `S' 开头, 如: `Sfredm' 。
因为 login 程式不接受 login shell 的参数, 所以你要写个小的程式:
/* dip-i.c - from a mail message of Karl kkeyte@esoc.bitnet */
int main()
{
execlp("dip", "dip", "-i", (char *) 0);
}
请用 gcc -O dip-i.c -o dip-i 来编译(compile)。
设定 permissions 为 555. 我建议把他叫做 /usr/bin/dip-i,
/etc/passwd 档内给 slip user 看起来像这个样子:
Sfredm:ij/SMxiTlGVCo:1004:10:UUNET:/tmp:/usr/bin/dip-i
^^ ^^ ^^ ^^ ^^ ^^ ^^
| | | | | | \__ 要执行的 shell program
| | | | | | dip -i as login shell
| | | | | \_______ Home directory
| | | | \_____________ User 全名
| | | \__________________ User Group ID
| | \______________________ User ID
| \________________________________ 加密后的密码
\___________________________________________ Slip User Login Name
(大写 S 开头)
在 user log in 之后, 如果确认 user 正确的话, login(1) 这个程式
会执行 shell dip-i, 而 dip-i 会执行 dip -i, 之后, dip 会扫描
/etc/net/diphosts 档, 找寻 login user name, 因此, 每个 slip
user 比需都要在 /etc/net/diphosts 中有一行。
你要重新读 9.3 `Proxy Arp' 哪一节, 重新为 slip user 安排 proxy
arp, 如果你要让他们使用到 slip server 所连到的网路的话。
11.2.2.1. Configuring /etc/net/diphosts
dip 会使用到 /etc/net/diphosts 来查询远端主机现在的设定, 远端
主机可能是拨进你的 linux 主机的 user, 或是你拨进去的主机。
/etc/net/diphosts 的一般格式如下:
Suwalt::145.71.34.1:SLIP uwalt:CSLIP,1006
^ ^ ^ ^ ^ ^
| | | | | \___ MTU
| | | | \_________ protocol (SLIP, CSLIP,
| | | | KISS)
| | | \___________________ 注解栏
| | \________________________________ 对方的 IP address
| | 或 host.domain.name
| \___________________________________ unused (compat. with passwd)
\________________________________________ login name (as returned by
getpwuid(getuid()))
/etc/net/diphosts 中的一个例子:
Sfredm::145.71.34.1:SLIP uwalt:SLIP,296
以上是说以 296 MTU 建立 slip 的连线。
Sfredm::145.71.34.1:SLIP uwalt:CSLIP,1006
以上指定 以 1006 MTU 建立 cslip 的连线。
当一个 user logs in 的时候, 他们会觉得像是平常的 login 及
password 的提示, 不过他们要输入他们的 slip-login userid 及密码
,如果通过检查, user 不会看到特别的讯息, 他们要在自己的一端切换
成 slip 的模式, 之后, 就连线成功啦, 系统会在 diphosts 档案中设
定。
11.3. 使用 Automounter Daemon - AMD.
这个部份由 Mitch DSouza 来供应, 我已经用最少的修改包含进来,感
谢 Mitch.
11.3.1. 什么是 automounter, 为何我要使用这种东西咧 ?
automounter 提供一个方便的随需要 (ie. 当有要求时 ) 才 mount FS
的工具。这将会同时减少 server 端及 client 端的负载, 且提供一个
更具据弹性的处理, 甚至在没有 NFS mount 上来的时候。
{?} 它也提供一个过多的机制(redundency mechanism) 凭什么一个 mount
point 会自动地切换到 第二个 server 要是 主要的 server 无法读取
时。
{ It also offers a redundancy mechanism whereby a mount
point will automatically switch to a secondary server
should a primary one be unavailable.
}
一个更有用的 mount 叫做 union mount 赋予 automounter 合并多个
目录到单一的目录中的能力, 这份文件必须完全读透以便完全使用延伸
的功能。
有几点要跟您好好地建议建议的: (没有特别的顺序)
o amd maps 与 Sun maps 并不相容, 也不与 HP maps ad infintum.
不过这点在此素这锅样煮的: amd 可以免费获得, 而且与所有以上
提到的系统相容, 这让你可以 share maps 如果 amd 在网路上到处
安装的话, Mitch 把他拿来跟 Linux/Dec/NeXt/Sun 机器混和使用
。
o Sun automount maps 可以使用在 contrib directory 中的
automount2amd.pl perl script 转成 amd 形式的 maps 。
o 在执行 amd 之前要先跑 portmapper。
o UFS mounts 不会 timeout.
o UFS mounts, 仅能使用于 Linux, 已经可以延伸处理所有的 natice
FS ( 如: minix, ext, ext2, xiafs...) 内定是 minix. 没有文件
说明的特色可加像以下的选项:
..., opts:=type=msdos,conv=auto
o 不要 mount 已经存在的目录除非你使用一个直接 automount 选项,
不然, 他会把你的 disk mount 在 /home 下, 当有些 user
diectory是 /home/fred 时。
o 总是开启 full logging,( 加 `-x all' 参数到 amd) 如果你有任
何困扰查察下列命令是什么:
% amq -ms
reports, 当他发生问题时它将会只出问题。
o GNU getopt() 有时对自己很聪明, 可在 非选项前加 '--', 例如:
# /etc/amd -x all -l syslog -a /amd -- /net /etc/amd.net
11.3.2. 何处取得 AMD(AutoMounter Daemon)
amd 可在下列节点取得:
sunsite.unc.edu
/pub/Linux/system/Misc/mount/amd920824upl67.tar.gz
这包含可执行的 binaries, 完整的 sources 及 texinfo 格式的文件。
11.3.3. 一个设定 AMD 的例子
你不可以从 /etc/fstab 档案来设定 AMD, 你将已经使用了来包含资讯
关于档案系统, 而使用 command line 启动方式。
使用 /etc/fstab 来 mount 两个 nfs FS, 你可能会使用两个类似以下
两个 entries:
server-1:/export/disk /nfs/server-1 nfs defaults
server-2:/export/disk /nfs/server-2 nfs defaults
i.e. 你会把 server-1 and server-2 的目录 mount 到你的机器上的
/nfs/server-1 及 /nfs/server-2 目录。
在把它标为注解之后, 或从 /etc/fstab 中删除以上的两行那你只能用
以下语法来达到相同的工作:
/etc/amd -x all -l syslog -a /amd -- /nfs /etc/amd.server
| | | | | | | | | | | | |
| | | | | | | | | | | | |
`------' `----' `-------' `-----' -' `--' `-------------'
| | | | | | |
(1) (2) (3) (4) (5) (6) (7)
参数说明:
1. The full amd binary path (obviously optional) 端看你的
$PATH 环境变数如何设定, 所以只有 `amd' 可以在此被指定。
2. `-x all' 会开启 full loggon. 请读读其他 login level 的文件。
3. `-l syslog' 会透过 syslogd 来记录讯息, 也可把它输出到一个档
案, dump 出来, 或 pass 过去, 到没被使用到的 tty console.这
个 syslog 可以改为一个档名, i.e. `-l foo' 将会把讯息转到一
个叫做 foo 的档案。
4. `-a /amd' 使用 /amd 目录作为暂时的 automount point这个目录
会自动地被 amd 开出, 也应该会在开始 amd 之前砍掉。 (amd 放
在 rc 中 )
5. `--' 表示告诉 getopt() 停止处理 (parse) 其他的 command line
参数, 这对直接在 command line 下 `type:=' 参数特别有用。 不
然 getopt() 会不正确地将他解码。
6. `/nfs' 是真的 nfs mount point. 这也会自动开出此目录, 且不应
该在其下再包含有子目录, 除非使用 `type:=direct' 参数。
7. amd map (也就是 一个档案) 叫做 `amd.server' 包含以下这些行:
# /etc/amd.server
/defaults opts:=rw;type:=nfs
server-1 rhost:=server-1;rfs:=/export/disk
server-2 rhost:=server-2;rfs:=/export/disk
一旦启动而且成功地跑起来, 你可以用下列命令查询 mount 的状况:
% amq -ms
如果你用:
% ls /nfs
应该看不到任何档案。 不过以下的命令:
% ls /nfs/server-1
将会自动地 mount `server-1' 那台 host 。挖咧靠邀! amd 跑起来了
! (voila! amd is running.)在内定的 timeout 到期后, 这会自动地
unmount 下来。 你的 /etc/password 档 ( 译注一 ) 可能包含下列的
项目:
...
linus:EncPass:10:0:God:/nfs/server-1/home/linus:/bin/sh
mitch:EncPass:20:10:Mitch DSouza:/nfs/server-1/home/mitch:/bin/tcsh
matt:EncPass:20:10:Matt Welsh:/nfs/server-1/home/matt:/bin/csh
意思就是说当 Linus, Matt, or Mitch login 进来时, home
directory将会跑到特定的 remote 目录中, 而在 user logout 的时候
会自动地 unmount 下来。
译注一: 应该是 /etc/passwd 吧, 或许有些系统不一样 ?
11.4. 把 Linux 当作一个 router
把 linux 档做 router 是没问题的啦! 你跑个像 gated 的 routing
daemon 就可以啦, 如果你只有简单的 routing 要求只要用 hard
coded routes 就可以啦。 如果你使用的是较新的版本 (1.1.*), 那你
应该要确定在 make kernel 的时候, 你有回 'y':
IP forwarding/gatewaying (CONFIG_IP_FORWARD) [y] y
Olaf Kirch's Network Administrators Guide 讨论网路设计及
routing项目, 你可以读看看, 有更多的资料, 参考书目在文件的
"Releated Documentation" 那一节。
12. 实验中及发展中的 modules
现在有许多人为 linux 网路程式码在发展新的特色及 modules 。之中
有些还很先进, 这些也是我想要包含到这节的, 直到变成标准版程式码
。他们将会被往前搬移。
12.1. AX.25 - 业馀无线电玩家的通讯协定
AX.25 protocol 是用在全球业馀无线电玩家。 它同时提供 connected
及 connectionless 的运作模式, 并且可使用来做点对点的连线, 或用
来运送 TCP/IP 的封包。
这跟 X.25 level 2 在结构上很类似。更可延伸到业馀无线电环境, 使
它更有用。
Alan Cox 也发展了一些以 AX.25 软体为基础的 kernel, 支援 linux,
这些也可在 ALPHA form 取得, Alan's code 支援 KISS based TNC's
(Terminal Node Controllers), 及 the Z8530 SCC driver.
User programs 包含一个 P.M.S. (Personal Message System), 一个
信号灯机构 (facility), 一个 line mode connect program, 及
`listen'如何去撷取所有在 RAW 界面层的 AX.25 封包例子
确定要去读 /usr/local/ax25/README 这个档, 内容包含更多、更完整
的资讯。
12.1.1. 何处取得 AX.25 软体。
ftp 至:
sunacm.swan.ac.uk
/pub/misc/Linux/Radio/*
你会发现有许多的目录, 每个包含不同版本的程式码, 因为它与
kernel code 相互的关系很密切, 所以你要选择一个与你的 kernel 较
适合的版本,互相的对应大概是这样:
AX25007 Prehistoric
AX25010 Obsolete
AX25012 for release 1.0.* kernels and higher
AX25016 for release 1.1.5 kernels
AX25017 for release 1.1.6 kernels
AX25018
AX25021
AX25022 for release 1.1.28 kernels
每个目录中你会发现只少两个档案, 一个叫做 krnl022.tgz 之类的,另
一个叫做 user022.tgz 。 这些是 kernel 软体, 及相对应的 user
program.
12.1.2. 安装 AX.25 软体
这讨软体包含两大部分, kernel drivers, 及 user programs.
12.1.2.1. The kernel drivers.
安装 kernel drivers, 请打:
# cd /usr/src
# gzip -dc krnl022.tgz | tar xvf -
有需要也可 uncomment( 定义上去 ) /usr/src/linux/config.in
CONFIG_AX25 这个 define 。
然后:
# cd /usr/src/linux
# make config
# make dep;make
备注: 如果你应该包含 AX.25 support, 在 make config 被问到的时候,
记得回 `yes', 如果你要 AX.25 code 支援 KISS TNC, 也要回 'yes'
12.1.2.2. The user programs.
安装 user programs 请下:
# cd /
# gzip -dc user022.tgz | tar xvvof -
然后:
# cd /usr/local/ax25/src
# make install
12.1.3. 设定及使用 AX.25 软体
设定 AX.25 port 跟设定 slip device 很像。 AX.25 软体已被设计,
用来在 kiss mode 下与 TNC 一起运作, 你需要事先设定 TNC 并连线
。
使用 axattach 就像在使用 slattach, 例如:
# /usr/local/ax25/bin/axattach -s 4800 /dev/cua1 VK2KTJ &
上面这一行会把你的 /dev/cua1 serial device 设定成 4800 bps 的
kiss interface, 使用 hardware address VK2KTJ.
你可以使用 ifconfig 来设定 ip address and netmask 就像对
ethernet device 一样:
# /sbin/ifconfig sl0 44.136.8.5
# /sbin/ifconfig sl0 netmask 255.255.255.0
# /sbin/ifconfig sl0 broadcast 44.136.8.255
# /sbin/ifconfig sl0 arp mtu 257 up
以下列命令来测试:
/usr/local/ax25/bin/call VK2DAY via VK2RVT
call program 是个 linemode terminal program 用来产生 ax.25
call.以空白开头来表示命令列 ` ', `.' 来结束连线:
你也需要设定一些项目, 例如: 使用的视窗。 这只需要修改一个档案,
编辑 /usr/local/ax25/etc/ports 档, 这是一个 ascii 档, 每个
AX.25 port 一行。 档案中必须要有这几行, 与你设定的 AX.25
interface 一样的顺序。
格式为:
callsign baudrate window frequency
在这个地方并没用到许多资讯, 它将会在以后的发展中被用到。
我没机会亲自来 try 这个程式, 请参考在 /usr/local/ax25/man 的
man page 及在 /usr/local/ax25 中的 README 档, 查询更多的资讯。
12.2. Z8530 SCC driver.
Zilog Z8530 SCC 提供 Synchronous/Asynchronous, HDLC, NRZI编码
及其他功能。 有许多的卡也使用 Z850 当作设计的基础。这个 driver
已由 Joerg Reuter, <dl1bke@melaten.ihf.rwth-aachen.de>,可在下
列节点取得:
ftp.ucsd.edu
/hamradio/packet/tcpip/incoming/sccdrv-1.4a.dl1bke.tar.gz
详情请看 README。
12.3. Ottawa PI/PI2 card driver.
Ottawa PI card 是一个在 IBM PC 机器上, 以 Z8530 SCC 为基础的卡
。 通常用在全球业馀无线电的工作者 (Amateur Radio operators
worldwide).在它被无线电业馀者广泛的使用的同时, 他也能提供别的
领域的服务这些领域需要 Z8530 的特性。
它支援一个高速的半双工 (half duplex) port (single DMA
channel),及一个慢速的全双工 (full duplex) port ( 小于 19.2kbps
interrupt driven) 。 PI2 是个较新版本的卡支援母版内建 radio
modem, 并改善硬体设计。
这张卡的 driver 已由 David Perry <dp@hydra.carleton.edu> 撰写
完成。可在以下节点取得:
hydra.carleton.ca
/pub/hamradio/packet/tcpip/linux/pi2-0.5ALPHA.tgz
详情请读 README 档。
12.4. NIS - Sun Network Information System.
事实上有两个版本的 NIS 已经分散出来。首先有个使用标准的 libc的
雏型版本, 不过 libc 要求在使用前先透过 ypbind 做一些对 servers
的 binding 工作。 更乾净的版本趋向于 NIS+ 的撰写方式,叫做 NYS,
由 Peter Eriksson, <pen@lysator.liu.se> 撰写, 可在以下节点取得
:
ftp.funet.fi
/pub/OS/Linux/BETA/NYS/nys-0.26.tar.gz
NIS 型态的 server 可在以下节取得点:
ftp.funet.fi
/pub/OS/Linux/BETA/NYS/ypserv-0.5.tar.gz
确定那里没有更新的版本, 因为这个资讯现在可能已经有点儿旧了。
这两个都功能强大, 而且与 Sun NIS information servers 也相安无
事, 如: passwd/hosts/group 等等。 也不要求对任意 server 的
binding 。 事实上它们允许以指定提供 services 的 server, 并可以
选择 yp/dns/file 选项来做指定 name/passwd/etc 的 resolution工
作。
这些都很容易设定起来 (set up), 而且强烈建议需要整合进大网路的
client 机器。 明显地, 你的网路 daemons 及 clients 需要重新
compile 来与 shared library libnsl.so 以便使用 YP 功能。这些都
是很稀松平常的事, 所有网路 NYS package 的 clients & daemon都
compile 过了。
如果你有更详细的 NIS 资讯, 请寄给我(给原作者, 不是译者哦)。
12.5. snmp agent.
linux 有个实验的 snmp agent, 由 Erik Schoenfelder,
<schoenfr@ibr.cs.tu-bs.de> 做系统转移。
可在以细节点取得:
ftp.ibr.cs.tu-bs.de
/pub/local/cmu-snmp2.1.2l2.tar.gz
请先读 cmu-snmp2.1.2l2.README, 因为它包含了你需要的资讯, 可以
帮助你了解这个 packge 。
这个 package 提供一个近似完全的 MIB-II variable set. 在现在的
状况下, 你只能读这些变数, 不能设定它们。
nstat.tar.gz 包含一个 /proc/net/snmp 输出的 formatter, 叫做
nstat 。
你需要跑新的 kernel 并对 kernel 做 patch, 详情请看明日各大报!
啊! 不! 不! 请看 README 档。
12.6. Experimental ARCNet driver
许多人在寻找 ARCNet 网路卡的 driver 。 ARCNet 只提供约 2Mbps
的传输率, 但可提供比 10base2(thinnet) LAN 更长的连线距离。 而
ARCNet cards 也较便宜, 也因为这样许多公司用 ARCNet 取代别的网
路卡。
Avery Pennarun <apenwarr@tourism.807-city.on.ca> 已经撰写了一
个 linux 的 ARCNet driver, 但是还在做 ALPHA 测试, 当然这中间还
会有许多 error 也可能会造成 kernel 挂住...
source code 及 kernel patch 可在以下节点取得:
sunsite.unc.edu
/pub/Linux/system/Network/drivers/arcnet-0.12.tar.gz
备注: 为了简化 patching 的工作, 用 kernel version 1.1.51 因为
driver 就是针对这个版本的来做 patch
的, 不过也可在 1.1.45+ 来跑。
有一些已知的虫虫, 你可以读 arcnet.c 档获得细节的说明。 Avery他
现在需要人来帮他抓臭虫, 或还没发现的问题, 并 guage 在其他环境
下跑的情形。 Avery 将会很高兴接受任何透过网路的报告, 或 e-mail
到:
<apenwarr@tourism.807-city.on.ca> 或 <Avery.Pennarun@NorLinK.Com>
Avery 在 News 方面有问题, 所以透过任何 newsrroups 可能无法让他
收到... Avery 不只想要知道你是否有问题, 也想知道你是否有试成功
。
12.7. 实验中的 Token Ring driver
实验中的 Token Ring driver 由 Peter De Schrijver
<stud11@cc4.kuleuven.ac.be>所发展, 最新的版本可在以下节点取得:
sunsite.unc.edu
/pub/Linux/Incoming/linux-1.1.44-TR.tar.gz
12.8. V.35 界面板(interface board)
V.35 是一个 C.C.I.T.T. 的标准界面, 用来提供高速平衡的串列界面,
可高达 2 Mbps 。 使用 differential pair balanced transmission
允许 V.35 界面支援较长的线, 与 V.24/RS232C 相类似, 但提供更高
的传输率。
Pete Kruckenberg <kruckenb@sal.cs.utah.edu> 开了一家公司供应
ISA bus 机器的 V.35 界面硬体, 这家公司亦为这个卡开发 Linux
driver, 也进入了 Beta 测试。 这个允许你直接用 leased line 连到
Linux machine, 速度可达 48/56kbps synchronous 的同步的传输.这
张卡支援多种 protocols 并允许速度达到 12 Mbps 。
更多的资讯可在以下节点取得:
ftp.std.com
pub/sdl/n2
不然你可以 mail 给 Dale Dhillon <sdl@world.std.com>
12.9. Slip 套餐软体
Matthew Dillon, dillon@apollo.west.oic.com 已经将程式组合成一
套处理 SLIP 连线 (incoming & outgoing) 的 package, 一些这个
S/W的特色会自动拨号, 自动重新拨号, 也会在单一的 serial port 上
做 shifting.
Matt 已经用 kernel 1.1.x 测试过程式码了, 但是他说程式码应该也
要在 1.0.x 的 kernel 上跑没问题才可以。
请到以下节点抓 S/W:
ftp://ftp.west.oic.com
/pub/linux/dillon_src/dslip203.tgz
ftp://sunsite.unc.edu
/pub/Linux/system/Network/serial/dslip203.tgz
12.10. tcpdump 工具程式
Adam Caldwell <acaldwel@103mort2.cs.ohiou.edu> 已经将 tcpdump
转至 linux. tcpdump 允许你追踪网路活动, 拦截流经你的机器的网路
封包。这对侦测网路问题很有用。
执行档或原始程式码都可取得, 3.0 版已经在 kernel 0.99.15, 1.0.8
及 1.1.28 测试过。
程式可在下列节点取得:
ftp://103mort2.cs.ohiou.edu
/linux/tcpdump-3.0-linux-src.tar.gz
ftp://sunsite.unc.edu
/pub/Linux/system/Network/tcpdump-3.0-linux-src.tar.gz
13. 一些 FAQ 及简要的答案
以下是一些常问的问题及答案
13.1. 一般问题
我只有一条对网路上一个机器的 dialin terminal access, 我可以
使用当作网路连线 ?"
当然可以, 看看 TERM, TERM 允许你透过正常的 terminal
session连上网路。 它需要修改一些网路应用软体。但是最普通
的 binaries及 sources 已经可以取得。看看 TERM-HOWTO:
http://sunsite.unc.edu/mdw/HOWTO/Term-HOWTO.html
我想架设自己的独立网路, 我的 addresses 要怎么设定 ?
RFC1597 已经指定一些 IP addresses 给私人的网路。你应该使
用这些位址以免产生一些不必要的困扰, 如果你决定要连上
Internet. 以下 addresses 保留做特殊用途:
10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255
备注:保留的网路位址 addresses 是 classes A, B and C, 所以你
自己的网路并不会受到设计或 size 的限制。既然你不打算连
上 Internet, 那你根本不需要担心设定与其他 Internet上的
节点相同的 IP address 会发生什么事情。 只要你使用的 IP
address 是你自己网路上唯一的位址就可以了。
如果 sunacm.swan.ac.uk 没开, 我如何取得这些指定的档案 ?
`sunacm' 被 mirrored 在:
ftp.Uni-Mainz.DE
/pub/Linux/packages/Net2Debugged
我如何知道我正在跑的 kernel/net code 的版本 ?
network code 与 kernel 现在已经同步使用相同的版次, try:
uname -a
或:
cat /proc/version
13.2. 错误讯息
一直出现 `eth0: transmit timed out' 耶 !!! 这是什么意思 ?
通常是说你的 Ethernet cable 没插好啦! 或者网路卡的参数
(I/O address, IRQ, 等等 ) 没有设对。检查开机时出现的讯息
,确定一下你的 Ethernet address 能够被辨认出来。 如果没问
题, 再检查有没有与其他的界面卡冲到。 如: soundblaster 的
IRQ 与 I/O control port 。
当我使用网路时, 遇到 `check Ethernet cable'
你的 Ethernet card 可能设定不正确。
再次检查 /usr/src/linux/drivers/net/CONFIG 中的设定。 如
果没问题,问题可能出在网路线, 检查是否有断线。
13.3. Routing 的问题
为何在我使用 route 命令时, 会出现 `obselete route request' ?
你使用了比你的 kernel 更旧的 route 程式了。 你应该把
route upgrade 到更新的版本。 请参考这份文件的 "The
network configuration tool suite" 那一节。他会告诉你何处
取得 tool set 。
为何会出现 `network unreachable' 的讯息 ?
这个讯息是说你的机器或其他的机器, 不知道如何去 route 这
个你想要连或 ping 的 host如果对所有的 host 都是这样的话,
有可能你并没有内定的 route资料, 重新读 `routing' 那一节
。
我可以 ping 我的 server/gateway, 但是无法 ping 或连到其他的远
端 host。
可能是因为 routing 的问题, 重新读 `routing' 那一节。如果
看起来都正常, 就检查你要连的机器是否能 route 到你的机器
。如果你是 dialin user, 这就是一个普通的问题了, 确定你的
server 有同时跑 routing program 像是 gated 或 routed,或
者那是 `prox arping', 如果不是的话, 你将可以接到对方传来
的封包。但是却不知道如何回传封包给你。
13.4. 使用网路档案系统(NFS, Network File System):
如何使用现有的 Novell fileserver 跟我的 Linux host 相连 ?
如果你有 Novell NFS Daemon code 那就容易多了, 只要让 NFS
mount 到你想要使用的 Novell volume 。 如果你没有这个
daemon code, 而执意要做这个东西的话, 而你也有 sparc PC
这种机器恣意让你挥霍, 那你就太幸运了。 你可以在 sparc PC
跑一个叫 Stan's Own Server 的程式。 首先, 把 PC 设定为
novell 的 workstation 将 nfs mount maps 到你要的目录中,
然后跑 SOS, 并 export 这些 maps 。 SOS 可在
spdcc.com:pub/sos/sossexe.zoo 取得。
当跑在网路上 NFS 时, 档案烂掉(corrupted)了 ?
某些厂商 ( 主要是 Sun) 承载 (shipped) 许多机器来跑 NFS
而且并不做 UDP checksums 。 在 ethernet 表现极好, 在其他
环境下就等于在自杀。 UDP checksums 在大部分的 file
server 可以启动 (enabled), Linux 内定从 pl13 onwards 启
动, 但双边都要启动。
为何所有 NFS 档案都是 read only ?
Linux NFS server 内定是 read only 。 RTFM the `exports'
and nfsd man pages. 如果是非 Linux servers 的话你可能也
需要修改 /etc/exports 。
--
钢 铁 战 士
※ 来源: 中国科大BBS站 [bbs.ustc.edu.cn]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:619.346毫秒