📄 0230router.htm
字号:
network eth0 <span class=term_say><==针对这个介面来进行监听的动作</span>
network 192.168.10.0/24 <span class=term_say><==针对这个网域来进行监听的动作!</span>
network eth1 <span class=term_say><==针对这个介面来进行监听的动作</span>
version 2 <span class=term_say><==启动的是 RIPv2 的服务</span>
log stdout <span class=term_say><==直接在萤幕输出标准输出的资料</span></span>
[root@linux ~]# <span class=term_command>/etc/init.d/ripd start</span>
[root@linux ~]# <span class=term_command>netstat -tulnp</span>
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 <span class=term_write>0.0.0.0:2602</span> 0.0.0.0:* LISTEN 21373/ripd
</pre></td></tr></table>
基本上,这样就设定完成一部路由器的 RIP 动态路由协定了!在上头 ripd.conf 的设定当中,
他会主动以 eth0 及 192.168.0.0/24 这个网域的功能来进行搜索,如此一来,未来你进行任何路由规则的变动,
或者是整个网域的主机 IP 进行更动,你将不需要重新到每部 Router 上更动!
因为这些路由器会自动的更新他们自己的规则喔!嘿嘿!接下来,同样的动作请你到
<a href="#fig_2">图二</a>左边那部 Linux Router 上面设定一下!
因为整个设定的流程都一样,所以这里鸟哥就省略啦!<br /><br />
</div>
<hr /><li><span class=text_import1>检查 RIP 协定的沟通结果</span><br />
<div class=block2>
在两部 Linux Router 都设定妥当之后,你可以登入 zebra 去看这两部主机的路由更新结果喔!
举例来说,鸟哥登入<a href="#fig_2">图二</a>右边那部 Linux Router 后,并且登入 zebra ,
观察路由会是这样的情况∶<br />
<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>telnet localhost 2601</span>
User Access Verification
Password: <span class=term_say><==不要忘记了密码啊!</span>
linux.router1> <span class=term_command>show ip route</span>
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
B - BGP, > - selected route, * - FIB route
K>* 0.0.0.0/0 via 192.168.0.254, eth0
C>* 127.0.0.0/8 is directly connected, lo
C>* 192.168.0.0/24 is directly connected, eth0
<span class=term_write>R>* 192.168.5.0/24 [120/2] via 192.168.0.200, eth0, 00:06:48</span>
C>* 192.168.10.0/24 is directly connected, eth1
</pre></td></tr></table>
如果你有看到上述的字体,嘿嘿!那就是成功啦!那个最左边的 R 代表的是透过 RIP 通讯协定所设定的路由规则啦!
如此一来,咱们的路由器设定就搞定棉~<br /><br />
</div>
透过这个 zebra 以及 RIPv2 的路由协定的辅助,我们可以轻松的就将路由规则分享到附近区网的其他路由器上头,
比起单纯使用 route 去修改 Linux 的核心路由表,这个动作当然要快速很多!
不过,如果是很小型的网路环境,那么不要使用这个 zebra 啊!因为有点多此一举的感觉。
如果您的企业环境真的有够大,那么玩一玩这个 zebra 配合一些动态路由协定,嘿嘿!也是可行的啦!
</div>
</div>
<hr /><a NAME="arp_proxy"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class="text_h1">ARP Proxy 让路由器两端在同一网域</span><br />
<div class=block1>
如果你一开始设计的网路环境就是同一个 C class 的网域,例如 192.168.10.0/24 ,
后来因为某些因素必须要将某些主机搬到比较内部的环境中,例如<a href="#fig_1">图一</a>的 PC2 ~ PC4 。
然后又因为某些因素,所以你不能变更 PC2 ~ PC4 的 IP ,也就是说,有点像底下这样的图示∶<br /><br />
<center>
<img src="0230router/arp_proxy.png"
title="路由器两边是同一网域的特殊状况" alt="路由器两边是同一网域的特殊状况"><br />
图三、路由器两边是同一网域的特殊状况</center><br />
初次见面~看到眼睛快要掉下来哩!怎么会两边的主机都在同一个网域内?而且还被规定不能够更改原先的 IP 设定,
.....真是一个头两个大啊~如此一来,在 Linux Router 两边要如何制作路由啊?好问题!真是好问题~
因为 OSI 第三层网路层的路由是一条一条去设定比对的,所以如果两块网卡上面都是同一个网域的 IP 时,
就会发生错误。那如何处理啊?<br /><br />
既然 OSI 第三层无法解决,那么可否以第二层的资料连接层来处理?看倌应该还记得 OSI 第二层最重要的就是那个 ARP 协定,
他可以用来进行 IP 与 MAC 的对应。那么由图三我们知道 PC1 要与 PC2 等主机沟通时,都需要透过 Linux Router ,
那有没有办法透过 ARP 告知整个网域内的电脑,要传送到 PC2~PC4 的封包都需要经过 Linux Router 呢?
呵呵!好想法。你可以这样想∶<br /><br />
<center>
<img src="0230router/arp_proxy_2.png"
title="路由器两边是同一网域的特殊状况" alt="路由器两边是同一网域的特殊状况"><br />
图四、路由器两边是同一网域的特殊状况</center><br />
也就是说∶<br />
<ol><span class=text_import2>
<li>当 Linux Router 的 eth1 那个网域主机想要连接到 PC2~PC4 的主机时,由 Linux Router 负责接收;
<li>当 Linux Router 要传送资料到 PC2~PC4 时,务必要由 eth0 来传送;
<li>当 Linux Router 要传送的资料为 192.168.10.0/24 ,但并非 PC2~PC4 时,需由 eth1 传送;
<li>当 Linux Router 的 eth0 那个网域主机想要连接到 PC1 时,由 Lniux Router 负责接收。</span></ol>
要达到 (1) 与 (4) 的要求并不难,我们可以透过 ARP Proxy 这玩意儿,啥是 ARP Proxy 呢?就是在 Linux Router
上面预先规定『<span class=text_import2>将 192.168.10.20, 192.168.10.30, 192.168.10.40 这三个 IP
的 MAC 都对应到 Linux Router 上!</span>』由于是区域网路内,因此都是透过广播的方式达到 ARP 协定所需要的
IP 与 MAC 的对应,所以啦,每一部在 eth1 那端的主机都会『误判』那三个 IP 是 Linux Router 所拥有,
这样就能够让封包传给 Linux Router 啦!<br /><br />
再接下来,咱们的 Linux Router 必须要额外指定路由,设定∶<br />
<ul><span class=text_import2>
<li>若目标是 PC2 ~ PC4 时,该路由必须要由 eth0 发送出去才行,
<li>若目标不为 PC2 ~ PC4 ,且目标在 192.168.10.0/24 的网域时,需由 eth0 发送出去才行。</span></ul>
也就是说,你必须要指定路由规则当中,那个 PC2~PC4 具有优先选择权,然后其他的同网域封包才由 eth1 来传送。
这样就能够达成我们所想要的结局啦!^_^!看样子似乎很难,其实设定方面还挺简单的,你可以透过 arp
以及 route 这两个指令来达成喔!<br />
<table class="term"><tr><td class="term"><pre>
<span class=term_hd>1. 先设定 ARP Proxy ,告知 eth1 所在网域 IP 与 MAC 的对应</span>
[root@linux ~]# <span class=term_command>arp -i eth1 -s 192.168.10.20 00:11:12:13:14:15 pub</span>
[root@linux ~]# <span class=term_command>arp -i eth1 -s 192.168.10.30 00:11:12:13:14:15 pub</span>
[root@linux ~]# <span class=term_command>arp -i eth1 -s 192.168.10.40 00:11:12:13:14:15 pub</span>
<span class=term_say># 看图四的说明,我这里假设 eth1 的 MAC 是 00:11:12:13:14:15 啦!</span>
[root@linux ~]# <span class=term_command>arp -i eth0 -s 192.168.10.50 00:01:02:03:04:05 pub</span>
<span class=term_say># 看图四的说明,我这里假设 eth0 的 MAC 是 00:01:02:03:04:05 啦!</span>
[root@linux ~]# <span class=term_command>arp -n</span>
Address HWtype HWaddress Flags Mask Iface
192.168.10.20 * * MP eth1
192.168.10.30 * * MP eth1
192.168.10.40 * * MP eth1
192.168.10.50 * * MP eth0
<span class=term_say># 瞧!有三个 IP 都变成属于俺的 eth1 的啦!然后一个属于 eth0</span>
<span class=term_hd>2. 开始处理路由,需要清除掉 eth0 的路由,并且增加 PC2~PC4 的单机路由</span>
[root@linux ~]# <span class=term_command>route del -net 192.168.10.0 netmask 255.255.255.0 eth0</span>
[root@linux ~]# <span class=term_command>route add -host 192.168.10.20 eth0</span>
[root@linux ~]# <span class=term_command>route add -host 192.168.10.30 eth0</span>
[root@linux ~]# <span class=term_command>route add -host 192.168.10.40 eth0</span>
<span class=term_say># 这样就设定妥当啦!将你的路由规划好棉!</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.20 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
192.168.10.30 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
192.168.10.40 0.0.0.0 255.255.255.255 UH 0 0 0 eth0
<span class=term_write>192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1</span>
<span class=term_say># 看到上面这一行,虽然我的两块网卡都是在 192.168.10.0/24 ,
# 不过真正针对整个网域传送的,仅有 eth1 那一块的意思!</span>
</pre></td></tr></table>
瞧!这样一来,你的 PC1 就可以 ping 到 PC2~PC4 的主机了!资料的传输上面也没有问题。
这个作法是相当有帮助的呐!对于预设架构不想更动的环境来说。 ^_^!
不过,由这个案例你也可以清楚的知道,<span class=text_import2>能不能连线其实与路由的关系才大哩!
而路由是双向的,你必须要考量到这个封包如何回来的问题喔!</span>
</div>
<hr /><a NAME="review"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class="text_h1">重点回顾</span><br />
<div class=block1>
<ul><span class=text_import2>
<li>网路卡的代号为 eth0, eth1, eth2...,而第一张网路卡的第一个虚拟介面为 eth0:0 ...</li>
<li>网路卡的参数可使用 ifconfig 直接设定,亦可使用设定档如 /etc/sysconfig/network-scripts/ifcfg-ethn 来设定;</li>
<li>路由是双向的,所以由网路封包发送处发送到目标的路由规划,必须要考虑回程时是否具有相对的路由,
否则该封包可能会『遗失』;</li>
<li>每部主机都有自己的路由表,此路由表 (routing table) 是作为封包传送时的路径依据;</li>
<li>每部可对外 Internet 传送封包的主机,其路由资讯中应有一个预设路由 (default gateway);</li>
<li>要让 Linux 作为 Router 最重要的是启动核心的 IP Forward 功能;</li>
<li>重复路由可能会让你的网路封包传递到错误的方向;</li>
<li>动态路由通常是用在两个 Router 之间沟通彼此的路由规则用的,常见的 Linux 上的动态路由套件为 zebra ;</li>
<li>arp proxy 可以透过 arp 与 route 的功能,让路由器两端都在同一个网段内;</li>
<li>一般来说,路由器上都会有两个以上的网路介面</li>
<li>事实上,Router 除了作为路由转换之外,在 Router 上面架设防火墙,亦可在企业内部再分隔出多个需要安全
(Security) 的单位资料的区隔!</li>
</span></ul>
</div>
<hr /><a NAME="ex"></a><img src="images/penguin-m.gif" alt="大标题的图示" height="34" width="25" align="middle" /><span class="text_h1">课后练习</span><br />
<div class=block1>
<ul>
<li>请问您如何将您的 eth0 这个介面修改成为 192.168.100.2 在网域 192.168.100.0/25
之内的网路参数内容?</li>
<div class=block2><font color=white size=-1>
因为 192.168.100.0/25 的 netmask 为 255.255.255.128 ,所以可以这样做∶<br />
ifconfig eth0 192.168.100.2 netmask 255.255.255.128 up<br />
这样即可!如果尚须其他的参数,则需要以档案形式来下达,如 vi /etc/sysconfig/network-scripts/ifcfg-eth0,并修改为∶<br />
DEVICE=eth0<br />
ONBOOT=yes<br />
BOOTPROTO=static<br />
IPADDR=192.168.100.2<br />
NETMASK=255.255.255.128<br />
NETWORK=192.168.100.0<br />
BROADCAST=192.168.100.127
</font></div>
<li>请手动设定 eth0:1 这个虚拟介面,使成为网路参数∶ 192.168.200.2, 网域在 192.168.200.0/24。</li>
<div class=block2><font color=white size=-1>
ifconfig eth0:1 192.168.200.2 up
</font></div>
<li>如何观察路由表?</li>
<div class=block2><font color=white size=-1>
route -n 即可查阅!注意到 0.0.0.0 那个目标(default gateway)。
</font></div>
<li>如何启动 Linux 的 IP Forward 功能?</li>
<div class=block2><font color=white size=-1>
直接以『echo "1" > /proc/sys/net/ipv4/ip_forward 』即可!
</font></div>
<li>假设您是一个学校单位的资讯管理员,学校内有 200 部电脑,奉上面大头的旨意,必须要将
200 部电脑分为 4 个 Subnet ,请问您应该如何布线(请画出示意图)?而这 4 个
Subnet 的网路参数如何选择(请自行选择)?而是否需要 Router ?如
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -