响水凹

欢迎来到 Guang-Wen Duan (Dennis Duan) 的个人 Wiki

用户工具

站点工具


computer:env:net_simulation

用KVM虚拟机模拟网络环境

在KVM环境下,每个虚拟网络就好比是一台网络交换机(参见:CentOS 6下KVM环境的安装和配置),我们可以创建一些虚拟网络,并将虚拟机的一个或多个网络接口映射到相应的虚拟网络,就可以模拟一个网络环境。

本文就依据这个思路来模拟一个较为复杂的网络,用于开发测试。虚拟机操作系统使用slackware 14.0。

网络拓扑

模拟的网络拓扑结构:

图中的交换机就是虚拟网络,包括一个桥接(Bridged)模式的虚拟网络和九个Isolated模式的虚拟网络。

虚拟机slk-router是唯一与桥接网络相连的虚拟机,在整个网络中充当核心路由器的角色,是所有虚拟机与外界联系的唯一通道。

其余的虚拟机分成几组,分别模拟一个机构的网络环境,如slk-home-gate模拟home机构的网关和防火墙,slk-home-work(s)模拟该机构的内网机器,slk-home-server(s)模拟该机构的DMZ服务器,away结构和other机构依此类推。slk-outer-server(s)则模拟一些不隶属于任何机构的公共服务器。

home机构和away机构还可以模拟为一个大机构下的两个异地分支机构,从而可以在两者之间搭建VPN,再模拟出一个虚拟链路来。

下面就讲述具体的配置过程。

虚拟网络

桥接网络与物理网络相连,上游网关地址是192.168.176.1,DNS域名服务器是192.168.176.1,并开启了DHCP服务。

新建九个虚拟网络:

网络名称 IP地址 类型 DHCP服务
home_work 10.10.10.0/24 Isolated 禁用
home_server 10.10.20.0/24 Isolated 禁用
home_gate 172.16.0.0/24 Isolated 禁用
away_work 10.20.10.0/24 Isolated 禁用
away_server 10.20.20.0/24 Isolated 禁用
away_gate 172.17.0.0/24 Isolated 禁用
other_work 192.168.0.0/24 Isolated 禁用
other_server 192.168.1.0/24 Isolated 禁用
other_gate 172.18.0.0/24 Isolated 禁用

所有虚拟网络都禁用了系统提供的DHCP服务,如果需要,由虚拟机自己来实现。

配置完毕的图示:

虚拟机

所有虚拟机的操作系统安装时都选择安装所有软件包,免除在配置过程中再单独安装软件包的过程。

slk-router

网卡映射

slk-router虚拟机配置四块网卡,网卡与虚拟网络的映射关系如下:

  • eth0 → br0(桥接)
  • eth1 → home_gate
  • eth2 → away_gate
  • eth3 → other_gate

IP地址

eth0的IP地址通过DHCP从上游获得,其余三个接口的IP地址都是静态地址。

缺省路由和DNS服务器为上游网关192.168.176.1,也通过DHCP获取。

系统配置

作为路由器,自然要开启转发功能:

chmod +x /etc/rc.d/rc.ip_forward

开启NAT,对所有从桥接网络接口出去的数据包进行IP伪装:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

slk-*-gate

网卡映射

slk-*-gate虚拟机作为各个机构网络的网关,均配置三块网卡,分别与内网、外网、DMZ网络相连。以slk-home-gate为例,网卡与虚拟网络的映射关系如下:

  • eth0 → home_work
  • eth1 → home_gate
  • eth2 → home_server

IP地址

所有接口的IP地址都是静态地址。

缺省路由为slk-router的相应接口地址。

DNS服务器为物理网关192.168.176.1。

系统配置

作为网关,同样要开启转发功能:

chmod +x /etc/rc.d/rc.ip_forward

配置iptables脚本,详情参见iptables脚本,这里选择其中的网关模板,并根据需要进行相应修改。

配置sysctl参数,详情参见sysctl脚本

配置域名服务器,为内网提供DNS域名查询服务。这里仅配置一个简单的Forward服务器:

编辑/etc/named.conf,在options节添加:

        forward only;
        forwarders {
                192.168.176.1;
        };

启用BIND服务器:

chmod +x /etc/rc.d/rc.bind
/etc/rc.d/rc.bind start

当然,还可继续配置DHCP服务,为本网机器动态分配IP地址。

slk-*-work(s)

网卡映射

slk-*-work(s)虚拟机作为内网机器,只配置一块网卡,与本地网关相连。以slk-home-work(s)为例,网卡与虚拟网络的映射关系如下:

  • eth0 → home_work

IP地址

接口IP地址为静态地址,如果本地网关开启了DHCP服务,则可动态获得。

缺省路由和DNS服务器均为本地网关的相应接口地址。

系统配置

配置iptables脚本,详情参见iptables脚本,这里选择其中的客户机模板。

配置sysctl参数,详情参见sysctl脚本

slk-*-server(s)

网卡映射

slk-*-server(s)虚拟机作为服务器,只配置一块网卡,机构内的服务器与本地网关相连,公共服务器则接入other-gate网络。以slk-home-server(s)为例,网卡与虚拟网络的映射关系如下:

  • eth0 → home_server

IP地址

接口IP地址为静态地址。

机构内服务器的缺省路由和DNS服务器为本地网关的相应接口地址;公共服务器的缺省路由为slk-router的相应接口地址,DNS服务器为物理网关192.168.176.1。

系统配置

配置iptables脚本,详情参见iptables脚本,这里选择其中的服务器模板,并根据需要作相应修改。

配置sysctl参数,详情参见sysctl脚本

配置web服务,详情参见HTTP服务器的安装和配置

配置ftp服务,详情参见FTP服务器的安装和配置

更多网络服务可继续添加。

测试

配置完毕,就可以进行各种测试了,常用工具:ping、tcpdump、lynx、lftp、ssh、telnet、nc、nmap等。

通过不断调整iptables脚本,可以模拟各种网络行为,从中学习网络知识,同时也对脚本配置正确与否进行验证。当脚本运行与预期不符时,结合tcpdump在相关虚拟机的网络接口上观察,是一个很好的诊断方法。

computer/env/net_simulation.txt · 最后更改: 2014/11/01 02:02 由 127.0.0.1