一、软件环境

Vmware 15

主机A:kali linux

路由器1:ubuntu18.04

路由器2:centos7

主机B:centos7

二、网络的拓扑图

 

从上面的网络拓扑图可以看出,我们总共需要4个虚拟机,和3个子网。网卡(网络适配器)的个数是1+2+2+1=6个。

三、使用vmware创建子网和虚拟网卡,并将网卡和子网进行绑定。

①创建子网

默认添加的是host-only模式的子网。

我们依次添加3个子网,结果如下图所示。

从上图可以看出,VMnet11,VMnet12,VMnet13这3个子网对应的子网地址是:192.168.239.0/24,192.168.232.0/24,192.168.195.0/24。

②为各个虚拟机创建网卡(网络适配器)

创建网卡的方式是:右击某个虚拟机条目->点击设置->添加硬件->网络适配器…

路由器1和路由器2均需要2个网卡接口。路由器1的两个网卡分别连接VMnet11和VMnet12,路由器2的两个网卡分别连接VMnet12和VMnet13。每连接一个子网,都需要一个网卡,只有连接了子网,才能被分配ip地址。又因为主机A连接了一个子网(VMnet11),所以主机A只需要一个网卡。因为主机B也连接了一个子网(VMnet13),所以主机B也只需要一个网卡。

③将网卡绑定到子网

这里对路由器1进行举例。

四、给各个虚拟机配置ip地址。

①首先对ip地址进行规划。

 

 

主机A[kali linux]

路由器1 [ubuntu18.04]

路由器2 [centos7]

主机B[centos 7]

eth0

192.168.239.2

ens33

192.168.239.1

ens38

192.168.232.2

eth0

192.168.232.3

eth1

192.168.195.1

eth0

192.168.195.2

②主机A和主机B的ip地址,子网掩码,网关的分配

为主机A分配ip地址,这里直接通过界面进行修改即可。由于ip地址192.168.239.2是子网VMnet11中的一个ip,所以主机A重启之后,就完成了ip地址的设置。

主机B的ip,子网掩码和网关的配置如下图:

和主机A的ip,子网掩码,网关的设置是相同的。这里的网关对应的就是和主机相连的路由器的其中一个接口(网络适配器)的ip地址。通过网关的设置,能够实现主机和路由器的连通。当主机想要访问其他网段的主机,例如主机A访问主机B的时候,也是通过路由器的转发功能来实现的。

③打开路由器的路由转发功能。

打开路由器1(ubuntu)的路由转发功能:

使用root权限打开/etc/sysctl.conf配置文件,找到#net.ipv4.ip_forward=1,将前面的#去除(取消注释就行了),然后可能需要重启。

打开路由器2(centos)的路由转发功能:

同样地,和ubuntu中的配置完全相同,也是编辑/etc/sysctl.conf配置文件的net.ipv4.ip_forward参数,设置为1即可。

④为路由器1(ubuntu)配置ip和静态路由。

当ubutu系统的版本小于18.04时,配置文件在/etc/network/interface中。参考https://www.networkinghowtos.com/howto/adding-persistent-static-routes-on-ubuntu/

当ubuntu系统的版本大于等于18.04时,配置文件在/etc/netplan/目录下的配置文件中,参考https://www.networkinghowtos.com/howto/adding-persistent-static-routes-on-ubuntu-18-04-and-higher-using-netplan/

本路由器1(ubuntu的版本为18.04)对应的配置文件为/etc/netplan/01-network-manager-all.yaml

需要注意的是,该文件对于缩进特别敏感,必须是2个空格的缩进。这里还需要注意的是,路由器1总共有2个网卡,名为ens33和ens38,为什么该配置文件中只配置了ens38对应的ip地址和静态路由?答:因为ens33对应的ip地址可以在界面中配置,如下图:

那么问题又来了,为什么这两个网卡可以以不同的方式进行配置?答:试想,当路由器1需要访问主机A时,可以从ens33接口转发出去,不涉及跨网段(在子网VMnet11内部的通信),当路由器1需要访问路由器2时,可以从ens38接口转发出去,也不涉及跨网段(在子网VMnet12内部的通信),但是,当路由器1需要访问子网VMnet13中的ip时(如路由器1访问主机B时),就涉及到了跨网段,当路由器跨任何一个网段的时候,都需要一个静态路由,又因为路由器1和子网VMnet11和VMnet12都相邻(不跨网段),但是只和VMnet13不相邻(跨网段),所以只需要配置一个静态路由即可。从网络的拓扑结构可知,当路由器1需要访问子网VMnet13中的ip时,需要从路由器1的ens38接口转发出去,所以就需要为ens38接口配置静态路由,且只配置一个静态路由即可,而且该静态路由的下一跳对应的是路由器2的eth0接口(该接口的ip从前面的蓝图中可以看出为:192.168.232.3)。

④为路由器2(centos7)配置ip和静态路由

与ubuntu不同的是,在centos7中配置ip和配置静态路由对应的是不同的配置文件,要分开写,而且每个网卡的ip和每个网卡的静态路由页也对应着不同的配置文件。

总的来说,ip的配置文件为/etc/sysconfig/network-scripts/文件夹下的ifcfg-name,其中name对应的是网卡(接口)的名字,静态路由的配置文件为/etc/sysconfig/network-scripts/文件夹下的route-name(name同样为接口的名字)文件(该文件不存在的话就手动创建)。和上面路由器1的分析类似,当路由器2需要访问子网VMnet11中的ip时,才涉及到跨网段(从路由器2的eth0接口转发出去,对应的下一跳是路由器1的ens38接口(ip为192.168.232.2)),所以只需要为路由器2的eth0接口在配置文件中配置ip和静态路由,路由器2的eth1接口只需要配置ip即可(可以在图形界面中完成)。

所以,ifcfg-eth0文件的内容如下:

route-eth0文件的内容如下:

在配置完成之后,可以运行如下两条命令使之生效。

nmcli connection reload

nmcli connection up eth0

然后可以运行route –n命令查看静态路由配置是否成功。

eth1接口的配置可以在图形界面中完成,如下图:

五、结尾

当使用主机A和主机B进行互ping的时候,最好是主机A ping主机B的同时,也让主机B ping主机A,因为通信链路的建立不是瞬间就完成的,或许还需要路由器对主机进行ping操作,数秒之后既能ping通(这也是路由器对路由表进行学习的过程)。

Logo

更多推荐