以Linux做路由器的问题
以Linux做路由器的问题,以Linux做路由器的问题
**********************************************************************
本文欢迎非营利性质的转载,以便能让更多人受惠!
但若欲引用於商业用途需先知会原作者.
**********************************************************************
利用 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 指令查看