配置两台主机通过三个路由器通信

2017-12-17|Categories: Magedu-training, Network|

实验要求

网络拓扑结构如下图,要求从Host_A(192.168.19.6/24)可以ping通Host_B(192.168.20.7/24)。

备注:图片通过Cisco Packet Tracer绘制

配置过程

准备实验虚拟机

  • 准备5台虚拟机,分别命名。
  • 作为路由器的三台虚拟机必须有两块网卡。
  • 每台虚拟机的网卡都设置为「Host-only 仅主机模式」

给网卡配置固定IP地址

所有虚拟机网卡对应的IP地址如下:

虚拟机名称 操作系统 网卡名称 网卡IP地址
Host_A CentOS 6 eth0 192.168.19.6/24
Router1 CentOS 7 ens33 192.168.19.1/24
Router1 CentOS 7 ens37 172.168.1.1/16
Router2 CentOS 6 eth1 172.168.0.1/16
Router2 CentOS 6 eth2 10.0.0.6/8
Router3 CentOS 7 ens33 10.0.0.7/8
Router3 CentOS 7 ens37 192.168.20.17/24
Host_B CentOS 7 ens33 192.168.20.7/24

第一种方式,命令行快速指定:

# Host_A
ifconfig eth0 192.168.19.6/24

命令行指定的IP地址可能会自动改变,如果变化太频繁,可以使用第二种方式指定——修改网卡配置文件:

cd /etc/sysconfig/network-scripts

vim ifcfg-eth0
    DEVICE=eth0
    ONBOOT=yes
    NM_CONTROLLED=no
    BOOTPROTO=static
    IPADDR=192.168.19.6
    PREFIX=24
    NAME=eth0
    
# CentOS 6
service network restart

虚拟机开启IP转发

默认情况下,Linux虚拟机会丢弃目标地址不是自己的数据包,如果要把Linux虚拟机当做路由器使用,必须开启IP转发:

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

虚拟机关闭SELinux & iptables

为了减少重复工作量,编写以下脚本自动开启IP转发、关闭SELinux & iptables:

#!/bin/bash
#
#===== ===== ===== ===== ===== ===== ===== ===== ===== ===== ===== =====
# Filename:     ipforward_on_selinux_iptables_off_by_liyang.sh
# Revision:     1.0
# Date:         2017-12-13
# Description:
# Author:       Li Yang
# Website:      https://liyang85.com
#===== ===== ===== ===== ===== ===== ===== ===== ===== ===== ===== =====

uid=`id -u`

if [[ $uid -eq 0 ]]; then
    # Part 1: enable IP-forward
    echo 1 > /proc/sys/net/ipv4/ip_forward \
        && echo "IP-forward has been enabled."

    # Part 2: disable SELinux
    seCfg="/etc/selinux/config"
    tellSeS="SELinux has been disabled."
    if [[ `getenforce` == "Enforcing" ]]; then
        setenforce 0 \
            && sed -i.bak -r 's/(SELINUX=)enforcing/\1disabled/' $seCfg \
            && echo "${tellSeS}"
    fi

    # Part 3: disable iptables
    tellIptS='iptables/firewalld has been disabled.'
    os=`sed -nr 's/.* ([0-9]+)\..*/\1/p' /etc/centos-release`
    if [ ${os} -eq 7 ]; then
        iptables -F
        systemctl stop firewalld \
            && systemctl disable firewalld \
            && echo "${tellIptS}"
    fi
    if [ ${os} -eq 6 ]; then
        iptables -F \
            && service iptables save \
            && service iptables stop \
            && echo "${tellIptS}"
        chkconfig iptables off
    fi
else
    echo "Only root user can run this script."
fi

配置路由表

Host_A

route add default gw 192.168.19.1
  • 网关必须是本机网卡(接口)可以直接到达(访问)的路由器端口的IP地址。
  • route命令会自动判断到达网关需要使用的接口,因此不需要在命令中指定。

Router1

处于网络边界的路由器只需要配置默认网关:

route add default gw 172.168.0.1

Router2

Router2不是处于网络边界,所以必须配置到不同网段的路由:

# to Net_1
route add -net 192.168.19.0/24 gw 172.168.1.1

# to Net_4
route add -net 192.168.20.0/24 gw 10.0.0.7

Router3

和Router1相同,处于网络边界的路由器只需要配置默认网关:

route add default gw 10.0.0.6

Host_B

route add default gw 192.168.20.17

测试结果

配置完成后,测试结果如下:

  • 第一条命令ifconfig eth0 | grep --color=auto -m1 inet用于显示当前主机的IPv4地址,结果是192.168.19.6。(这块网卡在其它实验中设置了多个别名,因此用grep -m1筛选出第一个地址)
  • 第二条命令ping -nc3 192.168.20.7,输出结果显示可以ping通,ttl=61表示经过了3个路由器,符合网络配置。
  • 第三条命令traceroute -n 192.168.20.7显示了到达目标地址所经过的节点,符合网络配置。

从以上命令的执行结果可以确定,整个通信链路配置正确,多个网段可以正常通信。

Leave A Comment