linux模拟路由器实验

简介:

实验目标:

将3台主机设置成路由器

实现两台终端能够相互通信

网络结构如下:

QQ截图20170819192200.png

准备工作:

1、批量复制虚拟机文件,创建多个系统,提前把mac地址修改

2、关闭防火墙

service iptables   stop  //centos6版本

systemctl  stop firewalld.service   //centos7版本

3、关闭selinux

setenforce 0  //关闭

getenforce  //查看

4、在三台“路由器”上启用路由转发功能

echo 1 > /proc/sys/net/ipv4/ip_forward

echo 1 > /proc/sys/net/ipv4/ip_forward


操作过程:

第1步:配置网卡地址,测试直连

配置ip地址

    ifconfig 接口 ip地址/掩码

    或者

    ip addr add ip地址/掩码  dev 接口

检查ip配置

    ip add

    或者

    ifconfig

1
2
3
4
5
6
7
8
9
10
11
12
13
PC-A:
ifconfig  eth2 10.10.1.1 /24
R_x:
ifconfig  eth1 10.10.1.254 /24    //PC-A 的网关
ifconfig  eth2 10.10.12.1 /24     // 与R_y直连
R_y:
ifconfig  eth0 10.10.12.2 /24     // 与R_x直连
ifconfig  eth2 10.10.23.1 /24     // 与R_z直连
R_z:
ifconfig  eth0 10.10.23.2 /24     // 与R_y直连
ifconfig  eth1 10.10.2.254 /24    //PC-B 的网关
PC-B:
ifconfig  eth1 10.10.1.1 /24


测试直连地址使用工具:ping

如果直连不通,后续就无法操作,一定要保证ip配置正确

网卡的配置文件存放在下述目录中:

/etc/sysconfig/network-scripts/

如果想要永久生效可以修改目录中对应的网卡文件


第2步:添加路由,测试

配置路由

    ip route add 目的网段/掩码 via  下一跳ip地址

    或者

    route add -net 目的网段/掩码 dev 本机出接口

    意思就是要想到达某一网络,就要从本机指定接口出去,或者指定的邻接路由器接口ip地址,而这就是下一跳

查看路由信息

    route -n

    或者

    ip route

1
2
3
4
5
6
7
8
9
10
11
12
13
14
PC-A:
ip route default via 10.10.1.254     // 主机A不管去哪里的网络,都会把数据包交给网关10.10.1.254也就是R_x
R_x:
ip route add 10.10.2.0 /24  via 10.10.12.2    
ip route add 10.10.23.0 /24  via 10.10.12.2     // 要想到达目标网络,本段必须有去的路由,但是并不关心回的路由,因为那是由对端设备负责的
R_y:
ip route add 10.10.1.0 /24  via 10.10.12.1
ip route add 10.10.2.0 /24  via 10.10.23.2
R_z:
ip route add 10.10.1.0 /24  via 10.10.23.1
ip route add 10.10.12.0 /24  via 10.10.23.1
PC-B:
ip route default via 10.10.2.254
// 每条路由是只负责去的路径,由对方负责回来的路径。对本段而言回的路由就是对端去的路由

查看各个设备的路由表

1
2
3
4
[root@PC_A ~] #ip route 
192.168.1.0 /24  dev eth1  proto kernel  scope link  src 192.168.1.100  metric 1 
10.10.1.0 /24  dev eth2  proto kernel  scope link  src 10.10.1.1 
default via 10.10.1.254 dev eth2         // 主机A有一条默认路由,去往目标的数据包全部交给eth2接口
1
2
3
4
5
[root@R_x ~] #ip route 
10.10.23.0 /24  via 10.10.12.2 dev eth2 
10.10.2.0 /24  via 10.10.12.2 dev eth2          // 路由器R_x到达目的网络的路径是10.10.12.2,也就是R_y
10.10.1.0 /24  dev eth1  proto kernel  scope link  src 10.10.1.254 
10.10.12.0 /24  dev eth2  proto kernel  scope link  src 10.10.12.1    // 以上两条路由是直连网络
1
2
3
4
5
[root@R_y ~] #ip route 
10.10.23.0 /24  dev eth2  proto kernel  scope link  src 10.10.23.1 
10.10.2.0 /24  via 10.10.23.2 dev eth2 
10.10.1.0 /24  via 10.10.12.1 dev eth0        // 由于R_y是3台路由器的中间一台,所以需要配置到两端的路由,因此下一跳也不一样
10.10.12.0 /24  dev eth0  proto kernel  scope link  src 10.10.12.2
1
2
3
4
5
[root@R_z ~] #ip route 
10.10.23.0 /24  dev eth0  proto kernel  scope link  src 10.10.23.2 
10.10.2.0 /24  dev eth1  proto kernel  scope link  src 10.10.2.254 
10.10.1.0 /24  via 10.10.23.1 dev eth0 
10.10.12.0 /24  via 10.10.23.1 dev eth0      // 至此经过的路由器有三个了,到达目的网络网关
1
2
3
4
5
[root@PC-B ~] #ip route
default via 10.10.2.254 dev eth1        // 到达目的主机B
10.10.2.0 /24  dev eth1  proto kernel  scope link  src 10.10.2.1 
192.168.2.0 /24  dev eth0  proto kernel  scope link  src 192.168.2.100 
192.168.122.0 /24  dev virbr0  proto kernel  scope link  src 192.168.122.1

出现的192.168.x.x网络可以忽略


测试:

配置没问题的话,到这一步PC-A就能够ping通PC-B

1
2
3
4
5
6
7
8
9
10
[root@PC_A ~] #ping -c 5 10.10.2.1
PING 10.10.2.1 (10.10.2.1) 56(84) bytes of data.
64 bytes from 10.10.2.1: icmp_seq=1 ttl=61  time =0.752 ms     //ttl 之所以是61,是经过3个路由器R_x、R_y、R_z,ttl值原是64,经过1个路由器减一
64 bytes from 10.10.2.1: icmp_seq=2 ttl=61  time =0.983 ms
64 bytes from 10.10.2.1: icmp_seq=3 ttl=61  time =1.74 ms
64 bytes from 10.10.2.1: icmp_seq=4 ttl=61  time =2.12 ms
64 bytes from 10.10.2.1: icmp_seq=5 ttl=61  time =1.34 ms
--- 10.10.2.1  ping  statistics ---
5 packets transmitted, 5 received, 0% packet loss,  time  4007ms
rtt min /avg/max/mdev  = 0.752 /1 .389 /2 .123 /0 .498 ms


1
2
3
4
5
6
7
8
下面是在PC-A上 traceroute 到PC-B的路径
[root@PC_A ~] #traceroute 10.10.2.1
traceroute  to 10.10.2.1 (10.10.2.1), 30 hops max, 60 byte packets
  1  10.10.1.254 (10.10.1.254)  0.195 ms  0.066 ms  0.051 ms   // 先到网关R_x
  2  10.10.12.2 (10.10.12.2)  0.816 ms  0.795 ms  0.764 ms   // 再到R_y
  3  10.10.23.2 (10.10.23.2)  0.730 ms  0.701 ms  0.670 ms   // 然后到达R_z
  4  10.10.2.1 (10.10.2.1)  0.920 ms  0.893 ms  0.862 ms   // 最后到达PC-B
// 能到PC-B说明已经通了,如果在PC-B上 traceroute 得到的结果正好与此相反

拓展:

在R_x和R_z两台路由器上,由于他们的下一跳ip地址都是指向邻接路由器,所以可以考虑把他们的两条合并成一条默认路由。从而减少路由条目



本文转自  a_pan  51CTO博客,原文链接:http://blog.51cto.com/panpangao/1957681


相关文章
|
11月前
|
网络协议 应用服务中间件 Linux
Linux网络综合基础实验
Linux网络综合基础实验
102 0
|
3月前
|
Ubuntu Linux
内核实验(四):Qemu调试Linux内核,实现NFS挂载
本文介绍了在Qemu虚拟机中配置NFS挂载的过程,包括服务端的NFS服务器安装、配置和启动,客户端的DHCP脚本添加和开机脚本修改,以及在Qemu中挂载NFS、测试连通性和解决挂载失败的方法。
191 0
内核实验(四):Qemu调试Linux内核,实现NFS挂载
|
3月前
|
NoSQL Linux Android开发
内核实验(三):编写简单Linux内核模块,使用Qemu加载ko做测试
本文介绍了如何在QEMU中挂载虚拟分区、创建和编译简单的Linux内核模块,并在QEMU虚拟机中加载和测试这些内核模块,包括创建虚拟分区、编写内核模块代码、编译、部署以及在QEMU中的加载和测试过程。
204 0
内核实验(三):编写简单Linux内核模块,使用Qemu加载ko做测试
|
3月前
|
Linux 网络安全 开发工具
内核实验(二):自定义一个迷你Linux ARM系统,基于Kernel v5.15.102, Busybox,Qemu
本文介绍了如何基于Linux Kernel 5.15.102版本和BusyBox创建一个自定义的迷你Linux ARM系统,并使用QEMU进行启动和调试,包括内核和BusyBox的编译配置、根文件系统的制作以及运行QEMU时的命令和参数设置。
289 0
内核实验(二):自定义一个迷你Linux ARM系统,基于Kernel v5.15.102, Busybox,Qemu
|
3月前
|
NoSQL Linux 编译器
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
如何配置环境并使用QEMU虚拟机结合GDB进行Linux内核代码的断点调试,包括安装QEMU、交叉编译工具链,编译内核以及通过GDB远程连接进行调试的详细步骤。
142 0
内核实验(一):使用QEMU+GDB断点调试Linux内核代码
|
2月前
|
Linux
linux内核 —— 读写信号量实验
linux内核 —— 读写信号量实验
|
4月前
|
Linux 网络安全 网络架构
将Linux做成路由器
将Linux做成路由器
59 8
|
3月前
|
存储 Linux 网络安全
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Linux/Linux Container)
【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service Linux/Linux Container)
|
4月前
|
小程序 Linux
【编程小实验】利用Linux fork()与文件I/O:父进程与子进程协同实现高效cp命令(前半文件与后半文件并行复制)
这个小程序是在文件IO的基础上去结合父子进程的一个使用,利用父子进程相互独立的特点实现对数据不同的操作
105 2
|
5月前
|
Linux
Linux VXLAN小实验
该文介绍了如何在两台运行CentOS 7的Linux主机(T620和T630)之间建立VXLAN隧道。通过配置VXLAN ID、远程和本地IP,以及设置隧道接口和路由,实现10.0.10.12和10.0.10.13之间的通信。文中提供了详细的配置命令,并展示了成功ping通和抓包的验证结果。