文本版|topic 高级搜索
   名人堂 帮助 论坛制度 意见反馈 | 首页 博客 周新贴 招聘 专题 新闻
RSS 底部
 
社区导航: 专家门诊   网络技术   操作系统   数据库   程序设计   系统应用   考试认证   CIO及信息化   站长交流   综合交流   下载基地  51CTO产品服务 设为首页 | 收藏本站
51CTO技术论坛» Linux & Advanced Application » 如何用Linux安装TCP/IP路由器       [ 打印]  [ 订阅]  [ 收藏]  [ 推荐给朋友]   [ 本帖文本页]

论坛跳转:
     
标题: 如何用Linux安装TCP/IP路由器  ( 查看:198  回复:0 )   
  本主题由 阿楚 于 2008-2-24 08:07 移动  
 
tyyyt
新新人类  点击可查看详细



帖子 28
精华 0
无忧币 59
积分 84
阅读权限 20
注册日期 2008-2-17
最后登录 2008-4-29 离线

[查看资料]  [发短消息]  [Blog
       
发表于:2008-2-23 17:59   标题:如何用Linux安装TCP/IP路由器
上一帖 |
如何用Linux安装TCP/IP路由器


   以下将针对各个主题加以说明:  

* 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  
的功能,也就是在 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 中有 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 的网路设定做一个整理:  

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 encapocal 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 的设定亦加入於 /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 会听到此  
ARP ,但当 dslab 要将 ARP 送回来时,由於 router 或 gateway 会将 broadcast 和  
multicast 的 package 挡下来,而不会forwarding,所以说 dslab 回应的 ARP 无法让  
ds170 所收到 ,於是我们需在 Router上设定 Proxy ARP,其功能就是代 subnet 中的机  
器回应 class B 中机器所 broadcast 的 ARP,让 class B 中要送往 subnet 的  
package 先送到 router, 之後 router 再帮其送往 subnet 中的机器.  

所以应该在 Router 的 /etc/rc.d/rc.inet1 中加入  

arp -s 140.115.50.170 04:00:23:53:90:21 pub  
^^^^^^^^^^^^^^^^^  
此为 Router eth0 介面的 hardware address



网络工程师到底该不该去考CCIE认证?
2008-2-23 17:591楼
[ 顶部 ]
     
论坛跳转:  

| | |

标记已读 · 删除论坛Cookies · 文本版 · WAP
 
| 诚征版主 | 版主堂 | 意见建议 | 大史记 | 论坛地图
Copyright©2005-2008 51CTO.COM  Powered by Discuz!
本论坛言论纯属发布者个人意见,不代表51CTO网站立场!如有疑义,请与管理员联系。
京ICP备05051492号