📄 0230router.htm
字号:
<div class=block2>
既然主机想要将资料传送到不同的网域时得透过路由器的帮忙,所以啦,路由器的主要功能就是∶
『<span class=text_import2>转递网路封包</span>』棉!
也就是说,路由器会分析来源端封包的 IP 表头,找出目标的 IP 后,透过路由器本身的路由表
(routing table) 将这个封包向下一个目标 (next hop) 传送。这就是路由器的功能。<br /><br />
那么路由器的功能可以如何达成呢?目前有两种方法可以达成∶<br />
<ul><span class=text_import2>
<li>硬体功能∶例如 Cisco, IBM, 3Com 等公司都有生产硬体路由器,这些路由器内有嵌入式的作业系统,
可以负责不同网域间的封包转译与转递等功能;<br /></li>
<li>软体功能∶例如 Linux 这个作业系统的核心就有提供封包转递的能力。</li>
</span></ul>
高阶的路由器可以连结不同的硬体设备,并且可以转译很多不同的封包格式,通常....价格也不便宜啊!
在这个章节里面,我们并没有要探讨这么高阶的咚咚,仅讨论在乙太网路里头最简单的路由器功能∶
连接两个不同的网域。嘿嘿!这个功能 Linux 就可以达成了!
就如同路由表是由 Linux 的核心功能所提供的,这个转递封包的能力也是 Linux 核心所提供,
那如何启动这个封包转递呢?很简单啊,只要这样做即可∶<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>echo "1" > /proc/sys/net/ipv4/ip_forward</span>
</pre></td></tr></table>
上面这个动作就在打开 Linux 核心的封包转递能力。你可以将上述的指令写入 /etc/rc.d/rc.local 当中,
以使 Linux 可以在开机的时候就启动封包转递的功能,
也可以透过修改 /etc/sysctl.conf 来达成开机启动封包转递∶<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/sysctl.conf</span>
<span class=term_say># 将底下这个设定值修改正确即可!</span>
<span class=term_write>net.ipv4.ip_forward = 1</span>
[root@linux ~]# <span class=term_command>sysctl -p</span> <span class=term_say><==立刻让该设定生效</span>
</pre></td></tr></table>
sysctl 这个指令是在核心工作时用来直接修改核心参数的一个指令,更多的功能可以参考 man sysctl 查询。
不要怀疑!只要这个动作,你的 Linux 就具有最简单的路由器功能了。
而由于 Linux 路由器的路由表设定方法的不同,通常路由器规划其路由的方式就有两种∶<br />
<ul>
<li>静态路由∶直接以类似 route 这个指令来直接设定路由表到核心功能当中,设定值只要与网域环境相符即可。
不过,当你的网域有变化时,路由器就得要重新设定;<br /><br /></li>
<li>动态路由∶透过类似 zebra 软体的功能,这些软体可以安装在 Linux 路由器上,
而这些软体可以动态的侦测网域的变化,而直接修改 Linux 核心的路由表资讯,
你无须手动以 route 来修改你的路由表资讯喔!</ul>
了解了路由器之后,接下来你可能需要了解到什么是 NAT (Network Address Translation, 网路位址转译) 主机,
NAT 是啥?其实 IP 分享器就是最简单的 NAT 主机啦!嘿嘿,了解了吗?没错, NAT 可以达成 IP 分享的功能,
而 NAT 本身就是一个路由器,但 NAT 比路由器多了一个『 IP 转换』的功能。怎么说呢?<br />
<ul>
<li>一般来说,路由器会有两个网路介面,透过路由器本身的 IP 转递功能让两个网域可以互相沟通网路封包。
那如果两个介面一边是公共 IP (public IP) 但一边是私有 IP (private IP) 呢?
由于私有 IP 不能直接与公共 IP 沟通其路由资讯,此时就得要额外的『 IP 转译』功能了;<br /><br />
<li>Linux 的 NAT 主机可以透过修改封包的 IP 表头资料之来源或目标 IP ,让来自私有 IP
的封包可以转成 NAT 主机的公共 IP ,就可以连上 Internet !</ul>
所以说, 当路由器两端的网域分别是 Public 与 Private IP 时,才需要 NAT 的功能!
NAT 功能我们会在防火墙时谈及,这个章节仅谈论一下路由器而已啊! ^_^<br /><br />
</div>
<hr /><a NAME="route_when"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">何时需要路由器?</span><br />
<div class=block2>
一般来说,电脑数量小于数十部的小型企业是无须路由器的,只需要利用 hub/switch 串接各部电脑,
然后透过单一线路连接到 Internet 上即可。不过,如果是超过数百部电脑的大型企业环境,
由于他们的环境通常需要考虑如下的状况,因此才需要路由器的架设∶<br />
<ul>
<li><span class=text_import1>实体线路之布线及效能的考量</span>∶<br />
在一栋大楼的不同楼层要串接所有的电脑可能有点难度,那可以透过每个楼层架设一部路由器,
并将每个楼层路由器相连接,就能够简单的管理各楼层的网路;
此外,如果各楼层不想架设路由器,而是直接以网路线串接各楼层的 hub/switch 时,
那由于同一网域的资料是透过广播来传递的,那当整个大楼的某一部电脑在广播时,
所有的电脑将会予以回应,哇!会造成大楼内网路效能的问题;所以架设路由器将实体线路分隔,
就有助于这方面的网路效能;<br /><br />
<li><span class=text_import1>部门独立与保护资料的考量</span>∶<br />
在阅读过<a href="0110network_basic.php">网路基础</a>章节后,您就会晓得,
只要实体线路是连接在一起的,那么<span class=text_import2>当资料透过广播时,你就可以透过类似
<a href="0140networkcommand.php#tcpdump">tcpdump</a> 的指令来监听封包资料,
并且予以窃取</span>~所以,如果你的部门之间的资料可能需要独立,
或者是某些重要的资料必须要在公司内部也予以保护时,可以将那些重要的电脑放到一个独立的实体网域,
并额外加设防火墙、路由器等连接上公司内部的网域。<br />
</ul>
路由器就只是一个设备,要如何使用端看您的网路环境的规划!上面仅是举出一些应用案例。
底下我们先就架设一个静态路由的路由器来玩一玩吧!<br /><br />
</div>
<hr /><a NAME="route_static"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">静态路由之路由器</span><br />
<div class=block2>
假设在贵公司的网路环境当中,除了一般职员的工作用电脑是直接连接到对外的路由器来连结 Internet,
在内部其实还有一个部门需要较安全的独立环境,因此这部份的网路规划可能是这样的情况∶<br /><br />
<a name=fig_1></a><center>
<img src="0230router/static_router.png"
title="静态路由之路由器架构示意图" alt="静态路由之路由器架构示意图"><br />
图一、静态路由之路由器架构示意图</center><br />
以上图的架构来说,这家公司主要有两个 C class 的网域,分别是 192.168.0.0/24 及 192.168.10.0/24 ,
其中 192.168.0.0/24 是用来做为一般员工连接网际网路用的,至于 192.168.10.0/24
则是给特殊的部门用的。PC1 代表的是一般员工的电脑, PC2 及 PC3, PC4 则是特殊部门的工作用电脑,
Linux Router 则是这个特殊部门用来连接到公司内部网域的路由器。在这样的架构下,
该特殊部门的封包就能够具有基础的保护了。<br /><br />
由图一你也不难发现,只要是具有路由器功能的设备 (Router A, Linux Router) 都会具有两个以上的介面,
分别用来沟通不同的网域,同时该路由器也都会具有一个预设路由啊! ^_^!
另外,你还可以加上一些防火墙的软体在 Linux Router 上,
以保护 PC2~PC4 的内部电脑呢!<br /><br />
在 Router A 的部分,由于他具有 Public 与 Private IP ,所以这部 Router 必须要具有 NAT 的功能,
这个未来我们再介绍。今日的重点就在于 Linux Router 那个玩意儿!在该主机下,
最好配备两张网卡,一张给 192.168.0.100,另一张给 192.168.10.254 这个 IP。
这部 Linux Router 的设定简单的要命喔!你可以这样做的∶<br /><br />
<hr /><li><span class=text_import1>Linux Router</span><br />
<div class=block2>
在这部主机内需要有两张网卡,鸟哥在这里将他定义为∶<br />
<ul><li>eth0: 192.168.10.254<li>eth1: 192.168.0.100</ul>
那如何设定呢?这样做就对了∶<br />
<table class="term"><tr><td class="term"><pre>
<span class=term_hd>1. 先处理 eth0 </span>
[root@linux ~]# <span class=term_command>vi /etc/sysconfig/network-scripts/ifcfg-eth0</span>
<span class=term_write>DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.10.255
IPADDR=192.168.10.254
NETMASK=255.255.255.0
NETWORK=192.168.10.0
ONBOOT=yes</span>
<span class=term_hd>2. 再先处理 eth1 </span>
[root@linux ~]# <span class=term_command>vi /etc/sysconfig/network-scripts/ifcfg-eth1</span>
<span class=term_write>DEVICE=eth1
BOOTPROTO=static
BROADCAST=192.168.0.255
IPADDR=192.168.0.100
NETMASK=255.255.255.0
NETWORK=192.168.0.0
GATEWAY=192.168.0.254 <span class=term_say><==这个设定值很重要喔!</span>
ONBOOT=yes</span>
<span class=term_hd>3. 启动 IP 转递</span>
[root@linux ~]# <span class=term_command>echo "1" > /proc/sys/net/ipv4/ip_forward</span>
<span class=term_say># 上述指令如果没有问题,将他加入 /etc/rc.d/rc.local 当中去!</span>
<span class=term_hd>4. 重新启动网路,并且观察路由</span>
[root@linux ~]# <span class=term_command>/etc/init.d/network restart</span>
[root@linux ~]# <span class=term_command>route -n</span>
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 192.168.0.254 0.0.0.0 UG 0 0 0 eth1
</pre></td></tr></table>
有够简单吧!这样你的 Linux Router 就 OK 了呐!接下来则是 PC2 来作为范例。<br /><br />
</div>
<hr /><li><span class=text_import1>受保护的网域,以 PC2 为例∶</span><br />
<div class=block2>
不论你的 PC2 是哪一种作业系统,你的环境都应该是这样的∶<br />
<ul><li>IP: 192.168.10.20<li>netmask: 255.255.255.0<li>network: 192.168.10.0
<li>broadcast: 192.168.10.255<li>gateway: 192.168.10.254</ul>
以 Linux 作业系统为例,并且 PC2 仅有 eth0 一张网卡时,他的设定是这样的∶<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/sysconfig/network-scripts/ifcfg-eth0</span>
<span class=term_write>DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.10.255
IPADDR=192.168.10.20
NETMASK=255.255.255.0
NETWORK=192.168.10.0
GATEWAY=192.168.10.254 <span class=term_say><==这个设定最重要啦!</span>
ONBOOT=yes</span>
[root@linux ~]# <span class=term_command>/etc/init.d/network restart</span>
[root@linux ~]# <span class=term_command>route -n</span>
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 192.168.10.254 0.0.0.0 UG 0 0 0 eth0
</pre></td></tr></table>
</div>
<hr /><li><span class=text_import1>Router A 的新增路由规则∶</span><br />
<div class=block2>
在这样的架构下,您的 PC2 已经可以连接上 Internet 了!只不过,当封包由 Internet 传回来时,
<span class=text_import2>由于 Router A 并没有连接到 192.168.10.0/24
网域的路由规则,所以该封包『会遗失』喔</span>!那就麻烦了~
所以,你的 Router A 必须要额外增加一条规则,这条规则是『将目标为 192.168.10.0/24
的封包传送给 192.168.0.100 去处理』,假设 Router A 为 Linux 系统时,那他应该要这样∶<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>route add -net 192.168.10.0 netmask 255.255.255.0 \</span>
> <span class=term_command>gw 192.168.0.100</span>
[root@linux ~]# <span class=term_command>route -n</span>
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.10.0 192.168.0.100 255.255.255.0 UG 0 0 0 eth0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -