Linux 学习之服务器篇 路由概念与路由器协议
jinhucheung opened this issue · comments
1. 路由
路由是规划我们数据包在网络上的传输路径以及方式
1.1 路由表产生的类型
我们每台主机都有自己的路由表,我们可以使用route
来查看,那设置路由表有以下方式:
- 直接设置网络接口的路由配置文件
/etc/network/interfaces(Ubuntu)
或/etc/sysconfig/network-scripts/route-eth0(CentOS)
- 手动或预设路由
- 通过
route
来设置 - 预设路由指的是网段的网关IP
- 动态路由的学习
- 通过让路由器间自主学习动态更新路由表
1.2 网卡虚拟网络接口:IP Alias的测试用途
让一个网卡虚拟出多个网络接口,其形式如eth0:0
,这可以供我们设置IP参数,方便我们测试
但要注意的是实体网卡需要启动,虚拟出来网络接口才能使用
同样的,我们也可以通过建议其配置文件来开机启动该网络接口,比如/etc/sysconfig/network-scripts/ifcfg-eth0:0
1.3 重复路由的问题
这里有个问题,就是如果我用两张网卡都设置成同一个目标网域的路由,比如像下面
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没作用
2. 路由器架设
我们知道,同一个网段内主机可以通过广播来传递数据包,而不同网段内数据包的传递就需要通过路由器来转交了
2.1 什么是路由器与IP分享器
1) 什么是路由器?
上面我们了解到,路由器主要是转递数据包
,它通过分享数据包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路由器的路由表了,同样分为两种方式
- 静态路由
通过直接设置路由配置文件或使用route来修改路由表,缺点就是对应大型网络的架设较困难,而且不易变更 - 动态路由
通过使用Quagga
或zebra
来侦测网域的变化,让路由器自主更改路由表
2) 什么是IP分享器?
其实IP分享器本身就是一个路由器,在数据包转递
这个功能上加入了IP转译
,这也就是NAT服务器
IP转译
通过修改数据包IP表头的来源或目标IP,可以让内部的私有IP转译成公共IP,连接上Internet
所以说NAT服务器可以沟通内部网段与公共网域
3) 何时需要路由器
通常需要架设路由器,都是拥有数百台主机的大型企业内部,通常会这么考虑
- 布线与效能考量
- 路由器可以分隔网段,所以数据传播更有效(不可能,让随便一台主机发个包就广播给数百台主机的吧)
- 部门独立与保护资料的考量
- 路由器因为可以分隔网段,所以也可以在路由器里加设防火墙,隔断一些数据包
2.2 静态路由架设
前面我们提到,静态路由就是我们手工设置路由表,这有以下步骤:
- 规划网段以及路由
- 规划好网段以及相应路由/主机等
- 注意:网络传输是双向的,所以路由传递数据包也要双向
- 比如,
192.168.1.0
这个网段的数据包,route B会传给route A - 而
192.168.100.0
由route A 也传给route B - 总之多考虑下
- 设置各主机/路由的IP参数以及路由表
- IP参数直接修改网络接口配置文件
- 路由表也修改配置文件
- 主机们就将默认网关设到其直接到达的路由器上
- 路由器要设置2个以上的网络接口
- 路由器启动
数据包转递
功能
- 修改
/etc/sysctl.conf
配置文件,具体查看上2.1部分 sysctl -p
重新加载内核参数
- 重启网络服务,并进行测试连通性
service network restart
重启网络服务- 通过
ping
来测试各主机的连通
具体例子,请查看鸟哥私房菜的静态路由部分
2.3 动态路由架设:quagga(zebar+ripd)
静态路由设置上较麻烦,而且需要重新规划时十分痛苦,聪明的人类想到让路由器自己学习路由表的方法(算法),然后就有了动态路由
动态路由架设过程:
1)路由器们要安装quagga软件包
quagga
提供了很多动态路由协议,比如RIPv2/OSPF/BGP
等,这些协议放置在/etc/quagga/
下zebra
quagga提供的软件,其为daemon,用于更新主机的路由表(插入/删除路由规则)ripd
quagga提供的软件,其为daemon,用于向附近的路由器交流路由规则与传送
2)设置所有主机/路由器的网络参数
这个没得说的,注意路由器要启动数据包转递
3)路由器们设置zebra
修改路由器上的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连接上服务即可进行
3)路由器们设置ripd
首先还是要修改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
2.4 路由器连接同个网段:ARP Proxy
如果我们要强行对同一个网段的主机进行划分出子网(在不改动IP参数等前提下),我们应该怎么做?
我们知道路由器是可以沟通不同网段上的主机,如果让它来分隔同个网段的主机要怎么做?
这就是ARP Proxy
,我对其的理解是:
- 让路由器的网卡MAC伪装成某些主机的MAC,让路由器强行接收发给主机们的数据包(比如路由器上有条规则:
对与192.168.1.1
主机的数据包都发到我eth0上吧,我会处理的) - 然后再通过路由器的
数据包转递
给主机
我们可以通过arp
与route
实现,具体请看鸟哥关于ARP Proxy部分