以下将针对各个主题加以说明:
* Linux 当 Router 的先决条件.
* 如何规划 Subnet 的 IP address.
* 如何设定 Router 的网路位址.
* 如何设定 Router 的 Kernel Routing table.
* 如何设定 Subnet 中机器的网路位址与 Kernel Routing table.
* 设定 Proxy ARP 来连通 Subnet.
----------------------------------------------------------------------------
Linux 当 Router 的先决条件
要以 Linux 当 Router,
 确认你的 Linux Kernel 中有支援 IP Forwarding
确认你的 Linux Kernel 中有支援 IP Forwarding
的功能,也就是在 make Kernel 时,要选择 IP Forwarding 的选项.
在图中,Router 分别以两块网路卡连接 Class B net 与 Subnet, 让
让
Linux 在开机的时候就要抓到这两块网路卡,成了一先决的条件.其方法是在
/etc/lilo.conf 中加入
append="ether=irq_0,io_port_0,eth0 ether=irq_1,io_port_1,eth1"
後,再值行 lilo -C lilo.conf,之後再重新开机,应该就可以抓到两块网路卡了.
要检查是否有抓到两块网路卡的话,可以看 /proc/net/dev 档中是否有 eth0 和
eth1 两个网路介面,或是值行 ifconfig,看是否有 eth0 和 eth1 两个网路介面,
若是没有的话,有可能是你的 Kernel 没有支援那种网路卡,那就 再重新
再重新
make Kernel,将那种网路卡的选项包含进来.
----------------------------------------------------------------------------
如何规划 Subnet 的 IP address
图中 Router 的两个网路介面分别连接两个 net,且各有其 IP address,
eth0=140.115.50.67 为连接 Class B net 的 IP address
eth1=140.115.50.161 为连接 Subnet 的 IP address
现在我们就要来看看如何规划 Subnet.
 我们要先决定 Subnet 中有几台机器,也就是要划分几个 IP address 於 Subnet
我们要先决定 Subnet 中有几台机器,也就是要划分几个 IP address 於 Subnet
中,我以 Subnet 中有 32 台机器为例加以说明.因此 Subnet 之 IP 范围为
140.115.50.160 ~ 140.115.50.191,WHY??
140.115.50.160 ===> 140.115.50.101 00000
^^^^^^^^^^^^^^ ^^^^^
network address host address
140.115.50.191 ===> 140.115.50.101 11111
^^^^^^^^^^^^^^ ^^^^^
network address host address
其 netmask 皆为
255.255.255.224 ===> 255.255.255.111 00000
^^^^^^^^^^^^^^^ ^^^^^
其 broadcast 皆为
140.115.50.191 ===> 140.115.50.101 11111
^^^^^^^^^^^^^^ ^^^^^
host address 有 5 个 bit,因此可以决定 2^5 = 32 台机器,当然同理你也可以用
140.115.50.96 ~ 140.115.50.127 为你的 Subnet address,只要不和别人相冲就好了.
 我们可以将 Subnet 的网路设定做一个整理:
我们可以将 Subnet 的网路设定做一个整理:
IP address = 140.115.50.160 ~ 140.115.50.191
netmask = 255.255.255.224
broadcast = 140.115.50.191
network address = 140.115.50.160
----------------------------------------------------------------------------
如何设定 Router 的网路位址
决定好 Subnet 的 IP address 後,接下来就是 Config eth0 和 eth1 这两个
网路介面,於 /etc/rc.d/rc,inet1 中加入
ifconfig eth0 140.115.50.67 netmask 255.255.0.0 broadcast 140.115.255.255
ifconfig eth1 140.115.50.161 netmask 255.255.255.224 broadcast 140.115.50.191
後,再执行 rc.inet1 或重新开机.可以利用 ifconfig 指令来检查设定是否正确,
以下就是 Router 值行 ifconfig 的输出:
lo Link encap:Local Loopback
inet addr:127.0.0.1 Bcast:127.255.255.255 Mask:255.0.0.0
UP BROADCAST LOOPBACK RUNNING MTU:2000 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0
TX packets:24 errors:0 dropped:0 overruns:0
eth0 Link encap:10Mbps Ethernet HWaddr 04:00:23:53:90:21
inet addr:140.115.50.67 Bcast:140.115.255.255 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:107061 errors:0 dropped:0 overruns:0
TX packets:22060 errors:0 dropped:0 overruns:0
Interrupt:5 Base address:0x290 Memory:d0000-d4000
eth1 Link encap:10Mbps Ethernet HWaddr 12:30:51:47:23:85
inet addr:140.115.50.161 Bcast:140.115.50.191 Mask:255.255.255.224
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:107061 errors:0 dropped:0 overruns:0
TX packets:22060 errors:0 dropped:0 overruns:0
Interrupt:6 Base address:0x350 Memory:d8000-db000
----------------------------------------------------------------------------
如何设定 Router 的 Kernel Routing table
网路位址设定好後,接下来就是要设定 Kernel Routing table,当 Router 收到一个
Packet 时,会依照 Packet 中的目的位址去 Kernel Routing table 比对,而决定该往
那一个网路介面送, Kernel Routing table设错了,Packet 就无法由正确的网路介
Kernel Routing table设错了,Packet 就无法由正确的网路介
面送到目的地.
Kernel Routing table 的设定亦加入於 /etc/rc.d/rc.inet1
route add -net 140.115.0.0 netmask 255.255.0.0 eth0
route add -net 140.115.50.160 netmask 255.255.255.224 eth1
route add default gw 140.115.1.254 metric 1
^^^^^^^^^^^^^^^^^^^^^^^^^
此为通往校外的 Gateway
後,再执行 rc.inet1 或重新开机,可以利用 route 指令来检查设定是否正确,以下就是Router 值行 route 的输出:
Destination Gateway Genmask Flags MSS Window Use Iface
140.115.50.160 * 255.255.255.224 U 1436 0 234 eth1
140.115.0.0 * 255.255.0.0 U 1436 0 29125 eth0
127.0.0.0 * 255.0.0.0 U 1936 0 34 lo
default 140.115.1.254 * UG 1436 0 79 eth0
----------------------------------------------------------------------------
如何设定 Subnet 中机器的网路位址与 Kernel Routing table
Subnet 中的机器其设定方法较 Router 简单.其只有一张网路卡,即 eth0, 在
在
机器 ds170 的 /etc/rc.d/rc.inet1 中加入
ifconfig eth0 140.115.50.170 netmask 255.255.255.224 broadcast 140.115.50.191
route add -net 140.115.50.160 netmask 255.255.255.224 eth0
route add default gw 140.115.50.161 metric 1
^^^^^^^^^^^^^^^^^^^^^^^^^^
此我们将 Gateway 设为 Router 的 eth1 IP address
----------------------------------------------------------------------------
设定 Proxy ARP 来连通 Subnet
以上设定完成後,你就可以由 Router 连上 ds170,亦可以由 ds170 联上 Router, 但是
若要由 ds170 直接连到外面 Class B net 上之机器,如 dslab,则无法直接连通,
ds170 直接将 package(注意是资料不是ARP) 送到 router(可由 static routing
table 中决定),router 再帮你在 class B network 中送 ARP, dslab 会听到此
dslab 会听到此
ARP ,但当 dslab 要将 ARP 送回来时,由於 router 或 gateway 会将 broadcast 和
multicast 的 package 挡下来,而不会forwarding, 说 dslab 回应的 ARP 无法让
说 dslab 回应的 ARP 无法让
ds170 所收到 ,於是我们需在 Router上设定 Proxy ARP,其功能就是代 subnet 中的机
器回应 class B 中机器所 broadcast 的 ARP,让 class B 中要送往 subnet 的
package 先送到 router, 之後 router 再帮其送往 subnet 中的机器.
 应该在 Router 的 /etc/rc.d/rc.inet1 中加入
应该在 Router 的 /etc/rc.d/rc.inet1 中加入
arp -s 140.115.50.170 04:00:23:53:90:21 pub
^^^^^^^^^^^^^^^^^
此为 Router eth0 介面的 hardware address