Open jinhucheung opened 8 years ago
路由是规划我们数据包在网络上的传输路径以及方式
我们每台主机都有自己的路由表,我们可以使用route
来查看,那设置路由表有以下方式:
/etc/network/interfaces(Ubuntu)
或/etc/sysconfig/network-scripts/route-eth0(CentOS)
route
来设置让一个网卡虚拟出多个网络接口,其形式如eth0:0
,这可以供我们设置IP参数,方便我们测试
但要注意的是实体网卡需要启动,虚拟出来网络接口才能使用
同样的,我们也可以通过建议其配置文件来开机启动该网络接口,比如/etc/sysconfig/network-scripts/ifcfg-eth0:0
这里有个问题,就是如果我用两张网卡都设置成同一个目标网域的路由,比如像下面
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.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
会出现什么问题?
嘿嘿,我们知道数据包查看路由表是由上到下进行的,所以说数据包如果要传送到192.168.0.0/24这个网段的数据包,其实都是通过eth1,eth0没作用
我们知道,同一个网段内主机可以通过广播来传递数据包,而不同网段内数据包的传递就需要通过路由器来转交了
上面我们了解到,路由器主要是转递数据包
,它通过分享数据包IP表头,获取目标IP,通过其本身的路由表来转递,所以路由器要有两个网络接口以上.
要达成路由器功能,有以下两种方式:
硬件功能
比如TP-Link等厂商生产的硬件路由器,其内嵌嵌入式操作系统,负责不同网段间的数据包转递与IP转译软件功能
比如使用Linux的内核功能就能提供上面的功能了Linux要作为路由器,首先需要启动其数据包转递的功能(IP forward
),启动方式有以下两种
/proc/sys/net/ipv4/ip_forward
(1`为启动 0非)/etc/sysctl.conf
中net.ipv4.ip_forward=1
之后让其立即生效 sysctl -p
然后就是修改Linux路由器的路由表了,同样分为两种方式
Quagga
或zebra
来侦测网域的变化,让路由器自主更改路由表其实IP分享器本身就是一个路由器,在数据包转递
这个功能上加入了IP转译
,这也就是NAT服务器
IP转译
通过修改数据包IP表头的来源或目标IP,可以让内部的私有IP转译成公共IP,连接上Internet
所以说NAT服务器可以沟通内部网段与公共网域
通常需要架设路由器,都是拥有数百台主机的大型企业内部,通常会这么考虑
前面我们提到,静态路由就是我们手工设置路由表,这有以下步骤:
192.168.1.0
这个网段的数据包,route B会传给route A192.168.100.0
由route A 也传给route B数据包转递
功能
/etc/sysctl.conf
配置文件,具体查看上2.1部分sysctl -p
重新加载内核参数service network restart
重启网络服务ping
来测试各主机的连通具体例子,请查看鸟哥私房菜的静态路由部分
静态路由设置上较麻烦,而且需要重新规划时十分痛苦,聪明的人类想到让路由器自己学习路由表的方法(算法),然后就有了动态路由
动态路由架设过程:
quagga
提供了很多动态路由协议,比如RIPv2/OSPF/BGP
等,这些协议放置在/etc/quagga/
下zebra
quagga提供的软件,其为daemon,用于更新主机的路由表(插入/删除路由规则)ripd
quagga提供的软件,其为daemon,用于向附近的路由器交流路由规则与传送这个没得说的,注意路由器要启动数据包转递
修改路由器上的zebra配置文件/etc/quagga/zebra.conf
,比如下面
hostname www.centos.vbird <==给予这路由器一个主机名称,随便取!
password linuxz1 <==给予一个密码!
enable password linuxz1 <==将这个密码生效!
log file /var/log/quagga/zebra.log <==保存zebar的信息至日志文件
之后重启zebra以及设置开机启动zebra
最后就可以netstat -ntulp | grep zebra
查看zebra端口,通过telnet
连接测试
注意:zebra也可以设置/查看路由表,通过telnet连接上服务即可进行
首先还是要修改ripd配置文件/etc/quagga/ripd.conf
,如下
hostname www.centos.vbird <==这里设置router主机名
password linuxz1 <==设置好密码
debug rip events <==可以记录较多的错误信息
debug rip packet <==通过信息来解决问题
router rip <==启动router 的 rip 功能
version 2 <==启动RIPv2 的服务 (预设值)
network 192.168.1.0/24 <==路由器所管理的两个接口
network 192.168.100.0/24
interface eth0 <==针对对外接口设置略过身份验证的方式
no ip rip authentication mode <==不要验证身份!
log file /var/log/quagga/zebra.log <==记录日志信息
之后重启guagga以及设置开机启动guagga
最后就是查看路由表啦!!! route
或者连接上zebra
如果我们要强行对同一个网段的主机进行划分出子网(在不改动IP参数等前提下),我们应该怎么做? 我们知道路由器是可以沟通不同网段上的主机,如果让它来分隔同个网段的主机要怎么做?
这就是ARP Proxy
,我对其的理解是:
对与192.168.1.1
主机的数据包都发到我eth0上吧,我会处理的)数据包转递
给主机我们可以通过arp
与route
实现,具体请看鸟哥关于ARP Proxy部分
Index