静态路由规则配置
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也可以上网了!