静态路由规则配置

1.静态路由配置

本质上通过配置虚拟机实现不同网段之间进行通信

第一步:准备3台虚拟机

  • 第一台网卡配置NAT模式;第二台配置两个网卡,分别为配置NAT模式 + LAN区段;第三台配置LAN区段

第二步:配置网卡相关信息

  • 先查看宿主机(物理机)VMnet8网卡的IP子网掩码

  • 配置网卡相关信息【具体的根据自己的来调整】

    • 第一台

      vim etc/sysconfig/network-scripts/ifcfg-ens33
      

      # 修改主机名
      hostnamectl set-hostname network01
      
      # 重启网卡
      systemctl restart network
      
      # 退出重新登录查看网卡的相关信息
      exit
      登录
      ip a
      
    • 第二台

      除了ip地址换一下,但一定要在同一网段,修改最后一位即可,我上面那个是192.168.129.160,这一台改为192.168.129.161即可!

      子网掩码不变

      除此之外,还需要做一件事

      cd /sysconfig/network-scripts
      cp ifcfg-ens33 ifcfg-ens36
      

      修改ip地址,只要是内网地址就都可以,别上去一个公网ip,我的如下,ip改为172.16.1.12

      # 修改主机名
      hostnamectl set-hostname network02
      
      # 重启网卡
      systemctl restart network
      
      # 退出重新登录查看网卡的相关信息
      exit
      登录
      ip a
      就能看到有两块网卡的具体信息了
      
    • 第3台

      其他不变,唯一的就是ip地址,这次要和第2台主机的第二块网卡要处于一个网段,我改成172.16.1.14

      vim etc/sysconfig/network-scripts/ifcfg-ens33
      

      # 修改主机名
      hostnamectl set-hostname network03
      
      # 重启网卡
      systemctl restart network
      
      # 退出重新登录查看网卡的相关信息
      exit
      登录
      ip a
      就能看到有这块网卡的具体信息了
      

第三步:测试

# 主机2 ping 主机1
ping 192.168.129.160

# 主机2 ping 主机3
ping 172.16.1.14

# 主机1 ping 主机3
ping 172.16.1.14

会发现,只有主机1 ping 主机3报错Network is unreachable,网络不可达
说明我们的主机是不能跨ip地址段进行互相访问的,我们设置一个路由规则就可以了。

第四步:设置静态路由规则

刚才我们使用主机1ping主机3看到报错,网络不可达,就是因为ping3主机的ip地址时,主机1发现你要找的ip地址不在我这个网段【192.168.129.0网段】,就会自动查找路由表的记录,看不到主机3所在网段的路由,所以报错,找不到。

给主机1配置静态路由:

# 添加一条静态路由,访问172.16.1.0这个网段,那么先跳到192.168.129.161这个网关上,通过它去访问,gw即设置网关,设置了路由的下一次跳转位置
route add -net 172.16.1.0/24 gw 192.168.129.161

# ping主机2的第二块网卡的ip地址,也就是172那个网段的
ping 172.16.1.12

# 但是通过01ping主机3的话,还是ping不通,但显示的不是网络不可达了:而是卡住了,如何测试数据包是否到了主机3
tcpdump -i ens33 -nn

# 可以看到主机3也卡住不动,说明数据包没到主机3,数据包丢了,主机2并没有做转发,需要配置一下转发才行

给主机2打开转发功能:

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
cat /etc/sysctl.conf
sysctl -p # 让配置生效

然后,先在主机2上抓个包,同时在用主机1ping主机3

# 主机2
tcpdump -i ens33 -nn

# 主机3
tcpdump -i ens33 -nn

# 主机1 ping 主机3
ping 172.16.1.14

# 这个时候,数据包到了主机2,主机2给做了转发到了 172.16.1.14,但是主机1ping并没有收到回应的数据包,这是因为主机3不知道该怎么回给主机1,看主机3的路由表就知道了:

给主机3也加上一条静态路由规则

route add -net 192.168.129.0/24 gw 172.16.1.12

再用主机1ping主机3就可以ping通了。

这就是通过虚拟机来模拟了静态路由规则的设定方式。

2.数据包发送原理

mac地址只是为了相同网段的主机通信,ip地址是定位主机的。

那如何证明呢?

基于上面静态路由配置的设备来操作

第一步:抓包

# 主机1 ping 主机3
ping 172.16.1.14

# 主机2的两块网卡先后抓包
tcpdump -i ens33 -nn -w 1.cap -c 5
tcpdump -i ens36 -nn -w 2.cap -c 5

# 主机3抓包
tcpdump -i ens33 -nn -w 3.cap -c 5

第二步:上传到本地

# 分别从主机2和主机3传递到主机1下的tmp目录
# 对于主机2
scp 1.cap 2.cap root@192.168.129.160:/tmp

# 对于主机3
scp 3.cap root@192.168.129.160:/tmp

# 主机1通过xftp上传到本地

第三步:进行分析

对MAC地址进行分析后,能够看出IP地址从头到尾没发生变化,但是MAC地址发生了发生了变化!

3.使用iptables实现nat上网

上面的示例中,我们的主机2其实现在只是做了一个数据包转发功能,但是并不能上网

让主机上网

  • 查看网关

  • 添加一条路由规则,指向NAT模式的网关时

    # 0.0.0.0/0表示所有网段所有ip地址
    route add -net 0.0.0.0/0 gw 192.168.129.2  
    

可以ping通公网ip了,但是ping不通域名

那是因为DNS没有配置,可以配置个DNS

vim /etc/resolv.conf

nameserver 223.5.5.5
nameserver 8.8.8.8

ping www.baidu.com

可以看到就能ping的通了!!!

配置NAT让其他主机上网

如果想让想让主机3上网,需要两步:

  • 主机2上配置规则
  • 主机3的网关ip指向主机2

此时我用主机3ping网络发现无法上网

那就配置iptable的NAT规则,使 172.16.1.0/24 网段的地址来了之后,允许其通过主机的外网接口访问外部网络【主机2已经通了】。

对于主机2:

iptables -t nat -F  # 清空一下之前的规则
iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -j MASQUERADE # 配置NAT路由器
-t nat 指定nat表
-A POSTROUTING链 数据包离开的时候,做修改
-s 源ip或者源ip段
-j MASQUERADE 指定动作为,模拟路由器的外网ip

对于主机3:

# 清空一下之前的路由规则
systemctl restart network

# 给主机3添加静态路由
route add -net 0.0.0.0/0 gw 172.16.1.12

# 添加DNS规则
vim /etc/resolv.conf
nameserver 223.5.5.5
nameserver 8.8.8.8

ping www.baidu.com

可以看到,现在主机3也可以上网了!

posted @ 2024-11-06 23:48  清风拂山岗(小高同学)  阅读(112)  评论(0编辑  收藏  举报