004 路由

路由介绍

linux主机当路由器的三个条件

  1. 必须开启路由转发功能

    echo 1 > /proc/sys/net/ipv4/ip_forward
    #想要永久生效应该写入配置文件中去
    echo net.ipv4.ip_forward>/etc/sysctl.d/ip_forward.conf
    
    #检查
    cat /proc/sys/net/ipv4/ip_forward
    
  2. 对方必须把自己当成网关

  3. 该linux主机必须有对应的路由转发条目

路由的三种分类

  • 1、主机路由:子网掩码为32位,直接把范围缩小到最小,就一个地址

    route add -host 172.16.13.11/32 dev eth0
    
  • 2、网络路由:子网掩码不足32位,所包含的地址是一个范围,子网掩码越大容纳的范围越小

    route add -net 172.16.11.0/24 dev eth0
    
  • 3、默认路由:目标地址为0.0.0.0/0,所包含的范围是最大的

    route add default dev eth0
    
  • 4、指定网关,让网关做后续转发,不指定就在局域网内发送

    route add -host 172.16.13.11/32 gw 192.168.15.2 dev eth0
    route add -net 172.16.11.0/24 gw 192.168.15.2 dev eth0
    route add default gw 192.168.15.2 dev eth0
    

    路由的优先级:

    越精确优先级越高,子网掩码越大越精确
    
    主机路由>网络路由>默认路由
    

实验

实验目标

根据图片拓扑结构,依次在虚拟机1中ping通

2.2.2.2
2.2.2.3
3.3.3.3
3.3.3.4
4.4.4.3

环境准备

#创建虚拟交换机
打开虚拟网络编辑器,添加4个仅主机模式

#创建4个虚拟机,虚拟机1添加一个仅主机网卡,其余两个

#配置好网络
#个人编写的小脚本,更改起来快一点

#!bin/bash
#baimo
#配置虚拟机网卡与关闭服务
cat >/etc/sysconfig/network-scripts/ifcfg-eth0<<EOF
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR=$1
NETMASK=255.255.255.0
 
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
NM_CONTROLLED="no"
EOF

cat >/etc/sysconfig/network-scripts/ifcfg-eth1<<EOF
TYPE="Ethernet"
BOOTPROTO="static"
IPADDR=$2
NETMASK=255.255.255.0
 
NAME="eth1"
DEVICE="eth1"
ONBOOT="yes"
NM_CONTROLLED="no"
EOF

systemctl restart network

setenforce=0

iptables -F

ping 2.2.2.2

#查看路由条目
[root@test1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
1.1.1.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0

#添加2.2.2.0/24条目并查看
[root@test1 ~]# route add -net 2.2.2.0/24 dev eth0
[root@test1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
1.1.1.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
2.2.2.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0

#测试
[root@test1 ~]# ping 2.2.2.2
PING 2.2.2.2 (2.2.2.2) 56(84) bytes of data.
64 bytes from 2.2.2.2: icmp_seq=1 ttl=64 time=0.885 ms
64 bytes from 2.2.2.2: icmp_seq=2 ttl=64 time=0.726 ms
64 bytes from 2.2.2.2: icmp_seq=3 ttl=64 time=0.610 ms
64 bytes from 2.2.2.2: icmp_seq=4 ttl=64 time=0.735 ms

ping 2.2.2.3

#查看虚拟机1与虚拟机2
route -n

#2.2.2.3需要将1.1.1.2当做网关再次转发,这是过去的路
#虚拟机1
[root@test1 ~]# route add -net 2.2.2.0/24 gw 1.1.1.2 eth0
[root@test1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
1.1.1.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
2.2.2.0         1.1.1.2         255.255.255.0   UG    0      0        0 eth0
2.2.2.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0

#开启路由功能并检测
#虚拟机2
[root@test1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@test1 ~]# cat /proc/sys/net/ipv4/ip_forward
1

#ping是一个发包和收包的相互过程,接下来是回去的路,也要将2.2.2.2当作网关转发
#虚拟机3
[root@test1 ~]# route add -net 1.1.1.0/24 gw 2.2.2.2 eth0
[root@test1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
1.1.1.0         2.2.2.2         255.255.255.0   UG    0      0        0 eth0
2.2.2.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
3.3.3.0         0.0.0.0         255.255.255.0   U     0      0        0 eth1

#测试
[root@test1 ~]# ping 2.2.2.3
PING 2.2.2.3 (2.2.2.3) 56(84) bytes of data.
64 bytes from 2.2.2.3: icmp_seq=1 ttl=63 time=2.81 ms
64 bytes from 2.2.2.3: icmp_seq=2 ttl=63 time=1.14 ms
64 bytes from 2.2.2.3: icmp_seq=3 ttl=63 time=1.13 ms
64 bytes from 2.2.2.3: icmp_seq=4 ttl=63 time=1.15 ms

ping 3.3.3.3

#各虚拟机查看
route -n

#虚拟机1增加3.3.3.0条目并指定网关发送
[root@test1 ~]# route add -net 3.3.3.0/24 gw 1.1.1.2 eth0
[root@test1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
1.1.1.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
2.2.2.0         1.1.1.2         255.255.255.0   UG    0      0        0 eth0
2.2.2.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
3.3.3.0         1.1.1.2         255.255.255.0   UG    0      0        0 eth0

#虚拟机2增加3.3.3.0条目发送
[root@test1 ~]# route add -net 3.3.3.0/24 dev eth1
[root@test1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
1.1.1.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
2.2.2.0         0.0.0.0         255.255.255.0   U     0      0        0 eth1
3.3.3.0         0.0.0.0         255.255.255.0   U     0      0        0 eth1

#虚拟机3增加一条回给1.1.1.0/24的条目,由eth0回去
#因为ping2.2.2.3的时候已经做过了,这里免

#测试
[root@test1 ~]# ping 3.3.3.3
PING 3.3.3.3 (3.3.3.3) 56(84) bytes of data.
64 bytes from 3.3.3.3: icmp_seq=1 ttl=63 time=1.91 ms
64 bytes from 3.3.3.3: icmp_seq=2 ttl=63 time=1.99 ms
64 bytes from 3.3.3.3: icmp_seq=3 ttl=63 time=1.45 ms
64 bytes from 3.3.3.3: icmp_seq=4 ttl=63 time=1.16 ms

ping 3.3.3.4

#查看各机的路由条目
route -n

#虚拟机1增加给3.3.3.0的条目
#由于ping3.3.3.3的时候增加了,这里免

#虚拟机2增加3.3.3.0/24条目,并指定网关2.2.2.3去转发
[root@test1 ~]# route add -net 3.3.3.0/24 gw 2.2.2.3 eth1
[root@test1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
1.1.1.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
2.2.2.0         0.0.0.0         255.255.255.0   U     0      0        0 eth1
3.3.3.0         2.2.2.3         255.255.255.0   UG    0      0        0 eth1
3.3.3.0         0.0.0.0         255.255.255.0   U     0      0        0 eth1

#开启虚拟机3的路由功能并检查
[root@test1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@test1 ~]# cat /proc/sys/net/ipv4/ip_forward
1

#测试
[root@test1 ~]# ping 3.3.3.4
PING 3.3.3.4 (3.3.3.4) 56(84) bytes of data.
64 bytes from 3.3.3.4: icmp_seq=1 ttl=64 time=1.00 ms
64 bytes from 3.3.3.4: icmp_seq=2 ttl=64 time=0.415 ms
64 bytes from 3.3.3.4: icmp_seq=3 ttl=64 time=0.510 ms
64 bytes from 3.3.3.4: icmp_seq=4 ttl=64 time=0.593 ms

ping 4.4.4.3

#查看各虚拟机
route -n

#虚拟机1增加4.4.4.0/24并指定1.1.1.2网关转发
[root@test1 ~]# route add -net 4.4.4.0/24 gw 1.1.1.2 eth0
[root@test1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
1.1.1.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
2.2.2.0         1.1.1.2         255.255.255.0   UG    0      0        0 eth0
2.2.2.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
3.3.3.0         1.1.1.2         255.255.255.0   UG    0      0        0 eth0
4.4.4.0         1.1.1.2         255.255.255.0   UG    0      0        0 eth0

#虚拟机2增加4.4.4.0/24并指定2.2.2.3网关转发
[root@test1 ~]# route add -net 4.4.4.0/24 gw 2.2.2.3 eth1
[root@test1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
1.1.1.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
2.2.2.0         0.0.0.0         255.255.255.0   U     0      0        0 eth1
3.3.3.0         2.2.2.3         255.255.255.0   UG    0      0        0 eth1
3.3.3.0         0.0.0.0         255.255.255.0   U     0      0        0 eth1
4.4.4.0         2.2.2.3         255.255.255.0   UG    0      0        0 eth1

#虚拟机3开启路由功能,由于ping3.3.3.4的时候开过,这里省略
#虚拟机3增加到4.4.4.0/24的条款
[root@test1 ~]# route add -net 4.4.4.0/24 eth1
[root@test1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
1.1.1.0         2.2.2.2         255.255.255.0   UG    0      0        0 eth0
2.2.2.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
3.3.3.0         0.0.0.0         255.255.255.0   U     0      0        0 eth1
4.4.4.0         0.0.0.0         255.255.255.0   U     0      0        0 eth1

#虚拟机4增加回1.1.1.0/24的条款,并指定3.3.3.3网关转发
[root@test1 ~]# route add -net 1.1.1.0/24 gw 3.3.3.3 eth0
[root@test1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
1.1.1.0         3.3.3.3         255.255.255.0   UG    0      0        0 eth0
3.3.3.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
4.4.4.0         0.0.0.0         255.255.255.0   U     0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1

#虚拟机3回去也要指定去1.1.1.0的由2.2.2.2网关转发,由于上面做过,这里省略

#测试
[root@test1 ~]# ping 4.4.4.3
PING 4.4.4.3 (4.4.4.3) 56(84) bytes of data.
64 bytes from 4.4.4.3: icmp_seq=1 ttl=62 time=3.08 ms
64 bytes from 4.4.4.3: icmp_seq=2 ttl=62 time=1.60 ms
64 bytes from 4.4.4.3: icmp_seq=3 ttl=62 time=1.60 ms
64 bytes from 4.4.4.3: icmp_seq=4 ttl=62 time=1.70 ms

路由优化

查看虚拟机1

[root@test1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
1.1.1.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
2.2.2.0         1.1.1.2         255.255.255.0   UG    0      0        0 eth0
2.2.2.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
3.3.3.0         1.1.1.2         255.255.255.0   UG    0      0        0 eth0
4.4.4.0         1.1.1.2         255.255.255.0   UG    0      0        0 eth0

这里可以看出很多都是由1.1.1.2转发的,所以可以合并成0.0.0.0给1.1.1.2转发,将其他条目删除从而优化

#删除
[root@test1 ~]# route del -net 2.2.2.0/24 gw 1.1.1.2 eth0
[root@test1 ~]# route del -net 3.3.3.0/24 gw 1.1.1.2 eth0
[root@test1 ~]# route del -net 4.4.4.0/24 gw 1.1.1.2 eth0

#添加0.0.0.0
[root@test1 ~]# route add default gw 1.1.1.2 dev eth0

#查看
[root@test1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         1.1.1.2         0.0.0.0         UG    0      0        0 eth0
1.1.1.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
2.2.2.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0

查看虚拟机2

[root@test1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
1.1.1.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
2.2.2.0         0.0.0.0         255.255.255.0   U     0      0        0 eth1
3.3.3.0         2.2.2.3         255.255.255.0   UG    0      0        0 eth1
3.3.3.0         0.0.0.0         255.255.255.0   U     0      0        0 eth1
4.4.4.0         2.2.2.3         255.255.255.0   UG    0      0        0 eth1
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U     1003   0        0 eth1

合并3和4,右0.0.0.0通过2.2.2.3去转发

#删除
[root@test1 ~]# route del -net 3.3.3.0/24 gw 2.2.2.3
[root@test1 ~]# route del -net 4.4.4.0/24 gw 2.2.2.3

#添加
[root@test1 ~]# route add default gw 2.2.2.3 eth1

#查看
[root@test1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         2.2.2.3         0.0.0.0         UG    0      0        0 eth1
1.1.1.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
2.2.2.0         0.0.0.0         255.255.255.0   U     0      0        0 eth1
3.3.3.0         0.0.0.0         255.255.255.0   U     0      0        0 eth1

查看虚拟机3

[root@test1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
1.1.1.0         2.2.2.2         255.255.255.0   UG    0      0        0 eth0
2.2.2.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
3.3.3.0         0.0.0.0         255.255.255.0   U     0      0        0 eth1
4.4.4.0         0.0.0.0         255.255.255.0   U     0      0        0 eth1

#没啥可以优化的,嘻嘻嘻

查看虚拟机4

[root@test1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
1.1.1.0         3.3.3.3         255.255.255.0   UG    0      0        0 eth0
3.3.3.0         0.0.0.0         255.255.255.0   U     0      0        0 eth0
4.4.4.0         0.0.0.0         255.255.255.0   U     0      0        0 eth1

#也没啥可以优化的,嘻嘻嘻
#测试一下ping4.4.4.3
[root@test1 ~]# ping 4.4.4.3
PING 4.4.4.3 (4.4.4.3) 56(84) bytes of data.
64 bytes from 4.4.4.3: icmp_seq=1 ttl=62 time=1.76 ms
64 bytes from 4.4.4.3: icmp_seq=2 ttl=62 time=1.70 ms
64 bytes from 4.4.4.3: icmp_seq=3 ttl=62 time=1.47 ms
64 bytes from 4.4.4.3: icmp_seq=4 ttl=62 time=1.68 ms

#下面是之前ping的用时
[root@test1 ~]# ping 4.4.4.3
PING 4.4.4.3 (4.4.4.3) 56(84) bytes of data.
64 bytes from 4.4.4.3: icmp_seq=1 ttl=62 time=3.08 ms
64 bytes from 4.4.4.3: icmp_seq=2 ttl=62 time=1.60 ms
64 bytes from 4.4.4.3: icmp_seq=3 ttl=62 time=1.60 ms
64 bytes from 4.4.4.3: icmp_seq=4 ttl=62 time=1.70 ms

#其实没啥卵用,效率层面并没有提高多少,更何况谁不用专业的路由去,闲的蛋疼去用虚拟机,只是条目看着清楚美观了一点而已。
posted @ 2021-04-07 21:07  BaiM0  阅读(214)  评论(0编辑  收藏  举报