虚拟化应用场景中虚拟路由的实现方法

虚拟化应用场景中虚拟路由的实现方法

时间:2021-03-05 作者:安帝科技

随着虚拟化技术的应用,很多虚拟网络展示、CTF平台、实训教学等平台的网络拓扑均使用虚拟化技术去实现,今天给大家简单介绍一下在虚拟化应用场景中,虚拟路由的实现方法。
本次以VMware为例,配置虚拟静态路由,其他虚拟化环境方法类似。
试验环境:共4台虚拟机,其中两台模拟路由器使用,两台作为主机端使用,拓扑如下图所示:

 图1·试验环境拓扑图

如图所示,R1、R2为模拟的路由器,A、B为两台主机,两台路由器的配置也做了简要说明。从图中可以看出,我们需要3个网段,具体设置如下:
Centos7-A:eth0:VMnet17
R1 eth0:VMnet17 eth1:VMnet18
R2 eth0:VMnet19 eth1:VMnet18
Centos7-B:eth0:VMnet19

配置主机网络

按照拓扑为主机A、B添加对应的IP地址和网关,首先我们配置A的网络。直接修改配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0,添加我们规划的IP、子网掩码和网关。

 图2·配置文件

配置完毕后,重启一下网络服务。

图3·主机配置

接下来可以通过”route -n”看一下配置是否生效。

图4·主机路由表信息

显然配置没有问题,主机B同样也用上述方式进行配置,此处不再赘述。

配置路由器的网络

接下来对路由的IP和路由表进行配置,首先配置R1。根据拓扑,分别配置eth0和eth1的地址,配置方法与配置主机相同,配置完成后,R1网络配置如下:

图5·R1网卡配置


图6·R1网卡配置


图7·R1网络配置

配置静态路由

接下来就是配置路由表了,首先了解一下route命令的使用。route工具主要功能是管理Linux系统内核中的路由表。它最大的用途就是用来设定静态的路由表项,通常是在系统用ifconfig配置网络接口(例如网卡等)后,用它来设定主机或者一网段的IP地址应该通过什么接口发送等。Route工具有复杂的调用参数。调用格式如下:

图8·Route命令详解

主要参数说明如下:
v 使用冗余输出模式;
A family 指定特定的地址族(如”inet”、”inet6″);
n 使用数字显示的地址(例如,202.38.75.75)而不是去解释域名;
e 使用与netstat相同的输出格式;
e 参数会产生很长的输出,包括内核路由表的几乎所有信息;
net 目标(target)是一个网段;
host 目标(target)是一个单独的主机;
F 显示内核FIB路由表。结果可能被-e 和-ee参数改变;
C 显示内核中路由缓存信息;
del 删除一个路由表项;
add 增加一个路由表项;
target 配置的目的网段或者主机。可以是IP,或者是网络或主机名;
netmask Nm 用来指明要添加的路由表项的网络掩码;
gw Gw 任何通往目的(target )的IP分组都要通过这个网关;
metric M 设置路由表中该项的尺度域(metric field)为M;
mss M 设置TCP的最大分片长度(MSS)M bytes。系统缺省值是536;
window W 设置TCP发送窗口的尺寸为W bytes;
irtt I 设置TCP的初始化回路时间(irtt)I毫秒(1-12000)。缺省情况下按照RFC 1122 规定是300ms;
reject 安装一个阻塞型的路由,这样可能会有路由查找失败;
mod, dyn, reinstate 添加或者修改一个动态路由表项。主要用来测试和诊断;
dev If 强行使用某个特定的输出接口(If),而不用系统去寻找接口。
言归正传,先查看R1现有路由表信息。

图9·R1路由表

从图中可以看出是没有问题的,现在只需要添加通往主机B(172.16.0.0)网段的路由即可,通过命令route add -net 172.16.0.0 gw 10.10.10.2 dev eth1来进行添加即可。

图10·R1路由表

R2配置方法与R1相同,配置R2的接口IP,并添加去往主机A(192.168.1.0)网段的的路由信息后,结果如下:

图11·R2网络配置


图12·R2路由表

测试

至此,主机和路由均配置完毕,我们可以先尝试分别在R1、R2去ping相邻的两个虚机地址。

图13·R1相邻地址


图14·R2相邻地址

那现在试验是否完成了呢?然而并没有,原因是把R1当做路由器,但其实还是一个主机,它接收到来自R2的包发现不是自己的就扔掉了,而不会转给主机A,所以,需要分别在R1和R2上打开转发功能:

echo 1 > /proc/sys/net/ipv4/ip_forward
  同时关闭R1、R2的防火墙。

systemctl disable firewalld
  设置开机不开启防火墙。

systemctl stop firewalld
  关闭防火墙。

现在,主机A已经可以正常访问主机B了。

到目前为止,在路由上静态路由和开启路由转发的配置都是临时的,当设备重启后配置将全部丢失,那么还需要添加永久路由和永久开启路由转。

添加永久路由

以R1为例,永久静态路由需要写到 /etc/sysconfig/network-scripts/route-interfacename 文件中,如下:

[root@R1# vim /etc/sysconfig/network-scripts/route-eth1172.16.0.0/24 via 10.10.10.2 dev eth1

开启永久转发

echo “net.ipv4.ip_forward = 1” >> /etc/sysctl.conf

vim /etc/sysctl.conf 下加入此行 net.ipv4.ip_forward = 1
执行上述其一的操作后,执行sysctl -p使之生效。
检查:

sysctl -a |grep “ip_forward” ——->net.ipv4.ip_forward = 1net.ipv4.ip_forward_use_pmtu = 0
至此,虚拟路由的试验就完全结束了。

小结

路由器的基本功能就是为IP分组寻找到达目的地址的路径。本文此次介绍的是人工手动静态配置路由规则,也就是人为的设定寻路方式,静态路由虽然有速度快、效率高、易配置等优点,比较适合于小型的、没有大变化的网络,然而缺点也显而易见,配置和维护耗费时间、配置容易出错,尤其对于大型网络,需要管理员维护变化的路由信息,不能随着网络的增长而扩展,维护会越来越麻烦,并且需要完全了解整个网络的情况才能进行操作,所以当网络的拓扑结构和链路状态发生变化时,路由器中的静态路由信息需要大范围地调整,这一工作的难度和复杂程度非常高;当网络发生变化或网络发生故障时,不能重选路由,很可能使路由失败。
但是因特网是个庞大的系统,上面跑的网络结构复杂,而且拓扑结构也在随时改变,这样在某些复杂的范围里静态配置就不一定能获得最佳的寻路路径了。而且一旦网络结构发生改变,手动的静态配置也往往无法及时跟着改变。在这个背景下,产生了动态路由配置的概念,也就是动态路由器,下期安帝科技向你讲述如何实现常见的RIP和OSPF两种动态路由。