在日常网络中,总有有这么一种情况,在只有很少的路由器、交换机链接起来的网络会产生很多不同的网段,但是各个接口又不是都指向同一个,至少在一个线路而已,类似于各个公司部门的网段不同,但连在一起,因此产生了各个主机的网段不同。为了解决这种问题,可以对某些连在中间的主机模拟成路由器,来实现不同网段ip主机通信。
模拟测试:
这里模拟3个主机设备来进程跨网点组网
准备工作:
1、使用vm虚拟机模拟3个主机的linux系统环境,这里我准备了3个主机,这里标记3个主机分别为lab1、lab2、lab4
2、规划好一些私有网络、ip来使用
3、3个主机的网卡连接模式必须相同,这里因为物理主机只有2块网卡,且只有2个网关,因此要使用多网关这里我设置3个虚拟LAN区域:xx、yy、zz
4、规划网络ip
5、测试主机的网卡设备是否能正常使用
LAN区域网段介绍:
xx网段:10.0.0.0/8 网段
yy网段:172.0.0.0/16 网段
zz网段:192.168.0.0/24 网段
主机网卡网段分配:
LAN 主机 使用网卡 IP地址
xx : lab1 eth0 10.0.0.10
lab2 eth1 10.0.0.20
yy : lab2 eth2 172.0.0.10
lab4 eth0 172.0.0.20
zz : lab4 eth1 192.168.0.10
试验阶段:
查看各个网卡ip
Lab1 eth0
Lab2 eth1
Lab2 eth2
Lab4 eth0
Lab4 eth1
规法网关路由:
因为只有3个LAN区域,所以网段为固定,这里可以直接给lab1 设置一条默认路由
设置lab1主机的eth0网卡:
1、测试同一网络:
lab1 访问 lab2 在xx网络的接口 10.0.0.10 --> 10.0.0.20
2、设置lab1网关
1、使用ip命令添加默认网关:
ip roue add default via 10.0.0.20 dev eth0
解析:其中default表示默认,也就是0.0.0.0网络,via表示下一条的地址,dev指明为哪个网卡设备配置,因为lab1在xx网络,只有一个eth0网卡,而lab2其中的eth1网卡也在xx网络并在同一网段,因此,两种直接可以ping通,但是想要访问lab2其中的eth2网卡,也就是yy网络,就需要将数据给lab2的eth1网卡,然后由lab2来转发数据。
2、查看lab1主机的route表
ip route show
解析:这里最后一行显示了刚才添加的默认路由条目
3、下面测试lab1的eth0接口能不能通过lab2的eth1去访问eth2(172.0.0.10)
解析:能ping通表示已经可以访问了
设置lab2主机的网卡:
1、测试网络
#下面重启lab2网络进程测试
说明:这里启动失败,是因为此网络服务的进程与NetworkManager服务进程发送冲突,这里我们查看NetworkManager是否正在运行:
#下面查看lab2NM服务进程
service NetworkManager status
#这样已经发现NM服务真的已经启动了,下面关闭此服务:
service NetworkManager stop
#lab2再次开启network 服务
解析:这里显示eth1和eth2重新获取了ip地址,当然还是刚才的配置下面测试ping
#ping名称测试通信(lab2测试)
1、Lab2 去访问 lab1 的eth0网卡
2、Lab2去访问lab4 的eth0网卡
3 、Lab2去访问lab4 的eth1网卡
解析:这里为什么ping不同,因为lab2没有设置通往192.168.0.0的网络,也就是zz网络,而能访问lab4的eth0,是因为lalb2的eth1和其在同一个网络(yy)网络172.0.0.0网段,所以这里要进行对lab2的eth2设置一个网关。
2、设置网关
#给lab2的eth2添加一个能访问192.168.0.0网段的route条目
ip route add 192.168.0.0/24 via 172.0.0.20 dev eth2
解析:这里同样和添加lab1的默认路由类似,而lab1需要将数据传给通网段的lab2的eth1接口,所以,lab2要想访问lab4 的192.168.0.0网段,就要将数据给与lab4网络接口相连的接口,也就是lab2 的eth2接口,而 172.0.0.20是 lab4的eth0接口,然后建立访问。
#查看lab2的路由表,确认添加成功
ip route show
说明:第二行以及显示了新增加的路由,下面测试访问lab4的eth1接口
3、再次访问测试
lab2测试
#lab2访问192.168.0.0网段
解析:同样也能ping通,那么我们下面想一下,lab1是不是可以访问lab2而去间接访问lab4呢,下面测试一下:
lab1测试
#lab1访问 lab4 eth0 172.0.0.20
解析:看来不能通过此来访问,这里网关虽然设置好,但是linux内核内部默认是不会讲lab1的数据包通过lab2的eth2接口转发给lab4的。
4、设置开启转发功能
1、查看和开启lab2的ip转发功能
cat /proc/sys/net/ipv4/ip_forward #为0关闭,为1开启
解析: /proc为系统内核模块的系统进程产生的文件,是无法直接修改的,因此可以使用重定向,注意,这里只接收一个参数。
解析:想一想lab2接收lab1传来的数据,想经过 eth1,然后转发到eth2,但是lab4并不识别,因此需要再开启lab4的转发来接收数据
设置lab4的网卡:
1、设置lab4路由和转发
#开启lab4的转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
#lab1 再次访问 lab4 的 172.0.0.20
发现仍然失败,这是因为lab4并没有同向10.0.0.0网段的路由表,下面对lab4添加xx网段的路由
#给lab4添加访问10.0.0.0 网段的路由条目
ip route add 10.0.0.0/8 via 172.0.0.10 dev eth0
#再次使用lab1 访问 lab4 的172.0.0.20
#再次使用lab1 访问 lab4 的192.0.0.10
解析:也是能访问的,因为根据路由条目linux内核的转发功能以及可以随意转发数据了
2、测试lab4访问lab1
#那么同时lab4也能访问10.0.0.0网段的地址了
进行优化
当我们添加路由都是临时生效,重启主机或网络服务都会失效,因此可以将路由配置写入配置文件
lab1设置:
1、设置路由配置
cd /etc/sysconfig/network-scripts/ #切换到网络脚步目录 vim route-eth0 #创建并编辑文件
2、再次启动服务,测试是否读取配置文件的数据来设置
解析:这里显示0.0.0.0表示所有网段,这里了表示读取配置以及成功。
lab2设置:
1、设置路由配置
2、设置ip转发永久生效
当然还有修改的linux系统内核参数,这里要到/etc/sysctl.conf文件去修改
#将 ip_forward = 这里的值设置为1表示开启,默认为0表示关闭
vim /etc/sysctl.conf
#再修改保存后,并不能直接生效,需要使用命令来重读系统参数配置文件
sysctl -p
lab4配置:
1、lab4路由配置
注意:设置后当然也去修改其系统下的/etc/sysctl.conf文件中的ip_forward的value,这里过程和lab2配置一样,可以参考lab2配置系统内核参数过程。
额外说明:这里我默认都关闭了防火墙功能,默认如果防火墙中有条目,如果再启动ip_forward 转发任然不能ping同,可以使用关闭服务或者清空防火墙,使用方法:
iptables -F #清空防火墙 service iptables stop #关闭防火墙服务