利用 Linux 当 router 其实很简单.首先你在 compile kernel 时要选
IP forwarding. 用这个 kernel 开机,看看能不能抓到两块网路卡.如果
不行的话在 /etc/lilo.conf 上加上
append=""ether=irq,io-port,eth0 ether=irq,io-port,eth1""
再重跑 lilo. 或者如果你用 loadlin 的话,用
loadlin vmlinuz root=/dev/??? ro ether=irq,io,eth0 ether=irq,io,eth1
应该就可以了.注意看开机时有没有抓到? 或看 /proc/net/dev 有没有 eth0
和 eth1? 有的话就对了(如果没有就要 recompile kernel 了.请参考 ""为何
我的网路连不出去"" 一文).
接下来就是 config 这两个界面了.假设你的网路环境如下:
|
| +-----+
+---| DOS | 140.122.52.236
+---------+ eth0 +-----+ eth1 | +-----+
| gateway |------------------|Linux|----------+ 分出来的次子网
+---------+ +-----+ | +-----+
140.122.52.254 140.122.52.235 +---| Sun | 140.122.52.234
router | +-----+
|
可再接多台机器
eth0 界面是用来跟外面的网路相连的.你可以用一般的 netconfig 来设定它.
(若不会的话还是请参考精华区中的文章).
我们是利用 Linux 的 Proxy Arp 功能,当外界有封包要送到你的次子网路时,
Linux 会回应此封包.所以对外界来说你的次子网就是存在的了.因此很重要的一点
是,你的次子网必须要是从你原来的子网路上割出来的!!
以上面的情形为例,如果预估你的次子网约有五、六台左右的机器,你可以决定
要割出来的次子网的 IP 范围是从 140.122.52.232 -- 140.122.52.239 共 8 个位
址(一定是 2^n 啦! 不懂吗? 自己想...:) 算一算 netmask 应是 255.255.255.248,
broadcast 是 140.122.52.239. 於是 eth1 应该这样 config:
# ifconfig eth1 140.122.52.235 netmask 255.255.255.248 broadcast 140.122.52.23.
?鲟恶□□□# route add -net 140.122.52.232 netmask 255.255.255.248 gw
140.122.52.235 eth1
这样你所有从 140.122.52.232 到 140.122.52.239 的封包都会往 eth1 送.试试看能
不能从你的次子网 telnet 到 Linux 上? 若可以的话就成功了一大半....^_^
不知你是否注意到,我将 eth0 和 eth1 的 IP address 设为一样! 常有人认为,有
两块网路卡就要有两个 IP address. 但这是没有必要的! 你可以将两个设为相同!!
但是你若想试著直接 telnet 到外面去,就会发现不通! 这是因为尚未设定 arp
table 的关系.以上面为例,如果你想要 DOS 那台机器可以跨出次子网,就要在
Linux 上设 arp:
# arp -s 140.122.52.236 08:00:77:14:00:00 pub
^^^^^^^^^^^^^^^^^
↑
这是你 eth0 界面的 hardware address, 可用 ifconfig查到.
这时应该就可以直接从 DOS telnet 到外面网路上的机器了! 也可以从外面 telnet
上来...Oh! Sorry! DOS 是不能 telnet 上去的.... 若是 Linux 当然就没问题啦!!
你如果在外面用 traceroute 指令查看 route 的路径,会发现当 router 的那台 Linux
机器就在上面!
如果要把 Sun 也加上去,如法泡制就好了.... (我不知道能否用一个指令就把次
子网整个 route 出去.有人知道的话请告诉我!)
你可以把这些指令都放在/etc/rc.d/rc.inet1 中,这样开机时就可以设定好两
个界面了!
感谢 Linux! 让我们用最少的代价,获得最佳的功能!!
发信人: cc (猪仔), 信区: Linux
标 题: 用LINUX做ROUTER经验谈
我今早刚将我的LINUX配置成ROUTER,这篇文章就是通过我的子网PC发表的.
安装过程中遇到的问题不是很多,下面简单谈谈体会.
1. 我是按照精华区内SUNNY转贴的文章去做的.装ROUTER之前,建议先研究
一下这 篇文章.
2. 不要轻易重编译核心.其实当出现如网卡找不着等问题时,可以到网上
找一个核心,在将原来的核心备份后,将它替换调,能解决不少问题.
3.不过,重编译也不是很可怕的事情,今天早上,我重编译我的内核,只用了
一个小时左右(486/33M/8M/N个TELNET :-).我现在的内核支持3c509,
ne2000,ip-forwording,ide.有需要的给我发个mail.
欢迎和我讨论这方面的问题,我也有很多问题要请教诸位先驱.
----- York (夜郎) -----
一些小问题值得注意。这里列出一些,以供参考。
1。网卡的选择。
如果不打算做ROUTER的话,什么样的网卡都行。但若你准备用Linux做
ROUTER,最好别用两块同型号的网卡。我不能肯定用了就一定不行,但至少我碰到
过两块NE2000兼容网卡不能同时正常工作的情况。
> 是不是两块网卡重号引起的问题呢?中断的地址,I/O地址如果都没有冲突,
> 行不行呢?
为了防止你所说的这些原因,我把这两块网卡的IRQ,I/O都设得不一样,此外,
它们的Ethernet Address也不一样,结果还是不能正常工作.也就是说工作不
稳定,当传输量一大就死机了.另外也不大可能是其它机器的网卡与我的重号,
因为我的这块NE2000目前工作在外网上,一直很稳定.但一旦我把另外一块卡
换成NE2000之后(甚至只是插入机器,还没有与其它机器相连),外网的这块
NE2000就不能正常工作了.我找了好几天都查不出它们不能协调工作的原因,
尽管单独使用两块网卡都很好. :((
2。bootdisk和rootdisk的制作。
值得注意的是在做rootdisk时,RAWRITE输入的参数应是带.gz的压缩文件,
千万别自作聪明的先把它解压缩了!
> 为什么呢?一般作ROOT,BOOT不都要先解压缩吗,好象README中也提到了
开始我也是这么想的.但用解压缩后的color文件做成的rootdisk起动时,系统
会抱怨找不到gzip头.这大概是因为linux的核心是压缩的,每次起动需要自解
的缘故.
3。NFS安装。
要有条件的话最好采用NFS安装。可以先从网上把slackware都取过来,放
入你自己的或附近的一台主机里,把它share出去,再做NFS安装就方便了。
4。北大FTP里的A系列不全。
装完后缺许多系统文件,使的系统不能正常启动。还是西安交大FTP里的
slackware-3.0比较保险。北邮好象也有,但不知全不全。
5。编译kernel。
如果需要做ROUTER或你的网卡不支持,那必须做这一步。建议编译前多研
究精华区里有关make kernel的文章。编译时注意打开IP FORWARDING并选择你所用
的网卡。
6。调试ROUTER时最好用PC。
比如调试过程中ROUTER换了网卡,子网外的工作站就需要更改它的ARP信息,
如果对UNIX系统管理不熟就比较麻烦。象我,就只好用笨办法:reboot。
7。ROUTER的性能。
用Linux做ROUTER,会使子网的出口速度较没有ROUTER时慢一些,大概是原
来的70%。当然了,有了ROUTER,可以使你的子网免受外网故障的影响。有所失也必
有所得嘛!