路由

Linux系统下的路由表是由小到大排列的,即C类地址-->B类地址-->A类地址-->0.0.0.0(默认路由)。

Linux系统中使用route命令查看路由表

[root@www ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.30.0 0.0.0.0 255.255.255.0 U eth0
169.254.0.0 0.0.0.0 255.255.0.0 U eth0
0.0.0.0 192.168.30.2 0.0.0.0 UG eth0

依据网络接口产生的IP而存在的路由,即主机上有几个网络接口,就会有对应的路由。如上结果显示,主机有一个网络接口eth0,所以对应的路由192.168.30.2。

手动或默认路由(Default Route)

如果当前主机需要与另一个网络接口进行通信时,此时就要添加一条路由

[root@www ~]# ifconfig eth1 192.168.130.110  //添加一块网卡设备,然后设置IP为192.168.130.110
[root@www ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.130.0 0.0.0.0 255.255.255.0 U eth1
192.168.30.0 0.0.0.0 255.255.255.0 U eth0
169.254.0.0 0.0.0.0 255.255.0.0 U eth0
0.0.0.0 192.168.30.2 0.0.0.0 UG eth0
[root@www ~]# route add -net 192.168.130.0 \
> netmask 255.255.255.0 gw 192.168.130.254
[root@www ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.130.0 192.168.130.254 255.255.255.0 UG eth1
192.168.130.0 0.0.0.0 255.255.255.0 U eth1
192.168.30.0 0.0.0.0 255.255.255.0 U eth0
169.254.0.0 0.0.0.0 255.255.0.0 U eth0
0.0.0.0 192.168.30.2 0.0.0.0 UG eth0 [root@www ~]# route add -net 192.168.130.0 netmask 255.255.255.0 dev eth0
[root@www ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.130.0 0.0.0.0 255.255.255.0 U eth0
192.168.130.0 0.0.0.0 255.255.255.0 U eth1
192.168.30.0 0.0.0.0 255.255.255.0 U eth0
169.254.0.0 0.0.0.0 255.255.0.0 U eth0
0.0.0.0 192.168.30.2 0.0.0.0 UG eth0
[root@www ~]# ping -c 192.168.130.110
PING 192.168.130.110 (192.168.130.110) () bytes of data.
bytes from 192.168.130.110: icmp_seq= ttl= time=0.061 ms
bytes from 192.168.130.110: icmp_seq= ttl= time=0.027 ms --- 192.168.130.110 ping statistics ---
packets transmitted, received, % packet loss, time 999ms
rtt min/avg/max/mdev = 0.027/0.044/0.061/0.017 ms

动态路由:自己Google一下吧!

Quagga:

官方网址:https://www.quagga.net/
   Quagga是一个路由软件套件,为Unix平台提供OSPFv2,OSPFv3,RIP v1和v2,RIPng和BGP-4的实现,特别是FreeBSD,Linux,Solaris和NetBSD。 Quagga是由Kunihiro Ishiguro开发的GNU Zebra的分支。Quagga体系结构由一个核心守护程序zebra组成,它作为底层Unix内核的抽象层,并通过Unix或TCP流向Quagga客户端呈现Zserv API。正是这些Zserv客户端通常实现路由协议并将路由更新传递给zebra守护程序。现有的Zserv实现是:

IPv4 IPv6
zebra - kernel interface, static routes, zserv server
ripd ripngd - RIPv1/RIPv2 for IPv4 and RIPng for IPv6
ospfd ospf6d - OSPFv2 and OSPFv3
bgpd - BGPv4+ (including address family support for multicast and IPv6)
isisd - IS-IS with support for IPv4 and IPv6

Quagga守护进程每个都可以通过网络可访问的CLI(称为'vty')进行配置。 CLI遵循类似于其他路由软件的样式。 Quagga还有一个名为'vtysh'的附加工具,它作为所有守护进程的单一内聚前端,允许人们在一个地方管理各种Quagga守护进程的几乎所有方面。

Zebra

官方网址:https://zabra.com/#family-safety-solutionhttps://zabra.com/#family-safety-solution

一个网卡绑定多个IP:IP Alias的测试用途

测试用:

[root@www ~]# ifconfig [device] [IP] netmask [netmask ip] [up|down]
[root@www ~]# ifconfig eth0: 192.168.0.12 netmask 255.255.255.0 up

在一个实体网络中含有多个IP网络

比如有时候单位或学校的主机不允许修改IP,此时就可以使用IP Alias来设置一个可用的IP。

既有设备无法提供更多实体网卡时

注意:所有的IP Alias都依据实体网卡,所以,当要启动eth0:0时,eth0必须先启动,而当eth0被关闭后,所有eth0:n的模拟网卡也将被关闭。

小技巧:如果想将IP Alias设置为开机启动,按照如下做法

[root@www ~]# cd /etc/sysconfig/network-scripts/
[root@www network-scripts]# cp ifcfg-eth0 ifcfg-eth0:
[root@www network-scripts]# vim ifcfg-eth0:
DEVICE=eth0:
TYPE=Ethernet
UUID=df2276d3-82d4-4e2b--b587ae061759
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.0.12
NETMASK=255.255.255.0
HWADDR=:0C::6B:6E:1B
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0:0"
USERCTL=n

路由重复问题

问题:可不可以使用两张网卡,两个相同网络的IP来增加主机的网络流量?

eth0:192.168.30.130

eth1:192.168.30.30

如果以上是这样设置,那么理论上路由应该是:

[root@www ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.130.0 0.0.0.0 255.255.255.0 U eth1
192.168.130.0 0.0.0.0 255.255.255.0 U eth0

就是说当主机发送数据包到192.168.130.0/24的网络时,都只会通过第一条规则,也是通过eth1来传出去;在响应数据包方面,不管是由eth0还是由还是由eth1进来的网络数据包,都会通过eth1来转发。

这样带来的问题,尤其是一些防火墙的规则方面,因此,根本无法实现负载均衡,也不会增加网络流量的效果。甚至,还可能发生数据包传递错误的情况,所以,同一主机上面的设置相同的网络IP时,需要特别留意路由规则,一般来说,不应该设置同一网段的不同IP在同一台主机上面。

路由器配置

Linux内核提供的路由转发配置文件在/proc/sys/net/ipv4/ip_forward

将其值设置为1,表示开启,0表示关闭,使用命令sysctl -p让设置立刻生效。

静态路由

待   写

动态路由

常见的动态路由协议RIPv1、RIPv2、OSPF、BGP等。

CentOS镜像提供了一个动态路由软件Quagga,首先安装

[root@xueji ~]# yum install -y quagga
[root@xueji ~]# ls -l /etc/quagga/ #quagga提供的各项动态路由协议都放置在该目录下,接下来以比较简单的RIPv2协议为例来处理胴体啊路由。
总用量
-rw-r--r--. root root 3月 bgpd.conf.sample
-rw-r--r--. root root 3月 bgpd.conf.sample2
-rw-r--r--. root root 3月 ospf6d.conf.sample
-rw-r--r--. root root 3月 ospfd.conf.sample
-rw-r--r--. root root 3月 ripd.conf.sample
-rw-r--r--. root root 3月 ripngd.conf.sample
-rw-r-----. quagga quaggavt 9月 : vtysh.conf
-rw-r--r--. quagga quaggavt 3月 vtysh.conf.sample
-rw-r-----. quagga quagga 9月 : zebra.conf
-rw-r--r--. root root 3月 zebra.conf.sample

值得注意的是:无路启动什么动态路由协议,都必须先启动zebra,因为:

1.zebra这个daemon的功能是更新内核的路由规则。

2.RIP这个daemon则是用于向附近的其他Router沟通协调路由规则的传送与否。

动态路由练习原理图示:

实验会用到四台主机:Router 1和Router 2,PC Router 1和PC Router 2,将这四台主机IP按图所示设置。

在Router 1和2上设置zebra

#设置zebra并启动zebra服务
[root@xueji ~]# cp /etc/quagga/zebra.conf{,.bak}
[root@xueji ~]# vim /etc/quagga/zebra.conf
hostname xueji- //默认读取的是当前主机名,该选项可以随意设置
password linux123 //设置一个密码
enable password linux123 //使设置的密码生效
log file /var/log/quagga/zebra.log //将所有的zebra产生的信息存到日志文件中
#启动zebra服务
[root@xueji ~]# /etc/init.d/zebra start
启动zebra: [确定]
[root@xueji ~]# netstat -lntup | grep zebra
tcp 127.0.0.1: 0.0.0.0:* LISTEN /zebra

由于zebra这个服务的任务主要是修改Linux系统内核内的路由,所以它仅监听本机接口,并不会监听外部的接口,另外,在zebra.conf这个文件中,我们上面所设置的密码是用于登录zebra使用的。查看2601端口是否启动

[root@xueji ~]# telnet localhost
Trying ::...
telnet: connect to address ::: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'. Hello, this is Quagga (version 0.99.).
Copyright - Kunihiro Ishiguro, et al. User Access Verification Password: //输入刚才设置的密码linux123
xueji-> //输入问号“?”或者help
echo Echo a message back to the vty
enable Turn on privileged mode command
exit Exit current mode and down to previous mode
help Description of the interactive help system
list Print command list
quit Exit current mode and down to previous mode
show Show running system information
terminal Set terminal line parameters
who Display who is on vty
xueji-> list
enable
exit
help
list
quit
show debugging zebra
show history
show interface [IFNAME]
show ip forwarding
show ip prefix-list
......省略......
xueji-> show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
I - ISIS, B - BGP, > - selected route, * - FIB route K>* 0.0.0.0/ via 192.168.30.2, eth0
C>* 127.0.0.0/ is directly connected, lo
K>* 169.254.0.0/ is directly connected, eth0
C>* 192.168.30.0/ is directly connected, eth0
xueji-> exit
Connection closed by foreign host.
含义说明:
K>代表以类似route命令加入内核的路由规则,包括route-ethN所产生的规则
C>代表由网络接口所设置的IP而产生的相关路由规则
S>以zebra功能所设置的静态路由信息
R>通过RIP协议增加的路由规则

如果想要增加10.0.0.0/24给eth0,除了route命令之外,也可以更改zebra.conf文件

[root@xueji ~]# vim /etc/quagga/zebra.conf
[root@xueji ~]# cat /etc/quagga/zebra.conf
.......末尾添加.....
ip route 10.0.0.0/ eth0
[root@xueji ~]# /etc/init.d/zebra restart
[root@xueji ~]# telnet localhost
Trying ::...
telnet: connect to address ::: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'. Hello, this is Quagga (version 0.99.).
Copyright - Kunihiro Ishiguro, et al. User Access Verification Password:
xueji-> show ip route
Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF,
I - ISIS, B - BGP, > - selected route, * - FIB route K>* 0.0.0.0/ via 192.168.30.2, eth0
S>* 10.0.0.0/ [/] is directly connected, eth0
C>* 127.0.0.0/ is directly connected, lo
K>* 169.254.0.0/ is directly connected, eth0
C>* 192.168.30.0/ is directly connected, eth0
多出来的一条路由规则显示S,表示静态路由。

Router 2跟Router 1设置原理一样,只是主机名与密码修改下即可。

接着,在两台Router上设置Ripd服务

[root@xueji ~]# cp /etc/quagga/ripd.conf.sample /etc/quagga/ripd.conf
[root@xueji ~]# vim !$
vim /etc/quagga/ripd.conf
........省略......
hostname xueji-
password linux123
!
debug rip events
debug rip packet
!
......省略......
router rip
version
network 192.168.30.0/
network 192.168.12.0/
interface eth0
no ip rip authentication mode
....省略.....
[root@xueji ~]# /etc/init.d/ripd start
启动ripd: [确定]
[root@xueji ~]# chkconfig ripd on
[root@xueji ~]# netstat -lntup | grep ripd
tcp 127.0.0.1: 0.0.0.0:* LISTEN /ripd
udp 0.0.0.0: 0.0.0.0:* /ripd
#注意,新版本的quagga启动的2602尽在127.0.0.1主机中,是通过520来传递信息

检查RIP协议的沟通结果

(这里没有实现,有待解决!不清楚NiaoGe是虚拟环境的网络设置)

最后一种特殊状况--路由两边界面是同一个IP网段:ARP Proxy

Linux--NiaoGe-Service-08(路由)的更多相关文章

  1. Linux x86_64 APIC中断路由机制分析

    不同CPU体系间的中断控制器工作原理有较大差异,本文是<Linux mips64r2 PCI中断路由机制分析>的姊妹篇,主要分析Broadwell-DE X86_64 APIC中断路由原理 ...

  2. 在 CentOS7 上将自定义的 jar 包注册为 linux 服务 service

    在 CentOS7 上将自定义的 jar 包注册为 linux 服务 service 1.在 /etc/rc.d/init.d/ 目录下创建一个名字和服务名完全相同的 shell 脚本文件 joyup ...

  3. Linux mips64r2 PCI中断路由机制分析

    Linux mips64r2 PCI中断路由机制分析 本文主要分析mips64r2 PCI设备中断路由原理和irq号分配实现方法,并尝试回答如下问题: PCI设备驱动中断注册(request_irq) ...

  4. 将Apache加入到linux系统service

    将Apache加入到linux系统service 将apache加入到linux系统服务,用service命令来控制apache的启动和停止. 本文由乌合之众瞎写http://www.cnblogs. ...

  5. 时隔两年最近再次折腾opensuse 的一些笔记 - opensuse linux java service shell

    时隔两年最近再次折腾opensuse 的一些笔记 - opensuse linux java service shell opensuse 一些常用命令:    service xxx start/s ...

  6. 彻底理解Cisco/Linux/Windows的IP路由

    -1.只要理解实质,名称并不重要! 很多使用Linux的网络高手在面对Cisco管理员的诸如管理距离,路由度量等词汇时,还没有PK就自觉败下阵来了.我觉得这实在太可惜了,大家本是一家,为何这么为难对方 ...

  7. Linux: service network/Network/NetworkManager

    Linux:service network/Network/NetworkManager start 这三种有什么不同? 1.network service的制御网络接口配置信息改动后,网络服务必须从 ...

  8. Linux中service命令和/etc/init.d/的关系

    Linux中service命令和/etc/init.d/的关系   service xxx启动 /etc/init.d/ 目录下的xxx脚本 如一个脚本名为 mysvc保存在/etc/init.d/下 ...

  9. Linux命令service - 系统服务管理(转)

    用途说明 service命令用于对系统服务进行管理,比如启动(start).停止(stop).重启(restart).查看状态(status)等.相关的命令还包括chkconfig.ntsysv等,c ...

  10. Azure的CentOS上安装LIS (Linux Integration Service)

    Azure上虚拟化技术都是采用的Hyper-v,每台Linux虚拟机都安装了LIS(Linux Integration Service).LIS的功能是为VM提供各种虚拟设备的驱动.所以LIS直接影响 ...

随机推荐

  1. 第三篇:python基础之数据类型与变量

    阅读目录 一.变量 二.数据类型 2.1 什么是数据类型及数据类型分类 2.2 标准数据类型: 2.2.1 数字 2.2.1.1 整型: 2.2.1.2 长整型long: 2.2.1.3 布尔bool ...

  2. 属性(@property)的修饰词有哪些,各自是什么作用,在哪种情况下用?

       之前面试了几家公司,都会问到这个基础的问题,以前,没有怎么注意,所以答的很混乱,所以查了查网上的资料,特意整理了一份.   常见修饰词有:assign.weak.strong.retain.co ...

  3. POJ1201 Intervals (差分约束)

    You are given n closed, integer intervals [ai, bi] and n integers c1, ..., cn. Write a program that: ...

  4. [YNOI 2016] 掉进兔子洞

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=4939 [算法] 不难发现 , ansi = (r1 - l1 + 1) + (r2 ...

  5. Java类加载器回顾

    Java类加载采用了全盘委托机制,默认加载类时子类先会委托给父类加载,但父类加载不到时,子类才会自己尝试加载类.这种机制可以有效防止一个类被加载多次,同时也一定程度上防止重写JDK自身的类[Java自 ...

  6. 2.row_number() over (partition by col1 order by col2)的用法

    row_number() over (partition by col1 order by col2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编 ...

  7. zz 堆空间与栈空间

    http://blog.sina.com.cn/s/blog_7321be1101013aua.htmlhttp://soft.chinabyte.com/os/51/12324551.shtmlht ...

  8. python 之 staticmethod,classmethod,property的区别

    绑定方法和非绑定方法: 普通def定义的都是绑定给对象的方法,对象调用时会自动传入对象本事,而类调用时需手动传入对象. 加上@classmethod装饰器就是绑定给类的方法,会自动传类本身 加上@st ...

  9. HDU - 1495 非常可乐 bfs互倒三杯水

    非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  10. E20181001-ts

    decorate vt. 装饰; 点缀; 粉刷; 授予(某人)勋章  vi. 装饰; 布置;