虚拟机模拟路由器

背景介绍

我现在有2台虚拟机,希望其中一台作为网关(路由器),另一台虚拟机作为局域网机器,这台局域网机器的所有上网流量全部经过网关机器,这样就可以在网关上抓取流量,便可以实现模拟旁路监听流量的实验了。

我的环境

virtualbox,下载地址:https://www.virtualbox.org/

虚拟机1系统: kali

虚拟机1网卡2个:nat网卡和仅主机网卡,nat网卡用于上网的,仅主机网卡是局域网网卡

虚拟机2系统: ubuntu18.04

虚拟机2网卡1个:仅主机网卡,仅主机网卡为局域网卡,能和虚拟机1的仅主机网卡通信(前提是需要配置IP)

虚拟机1充当网关(路由器),虚拟机2充当局域网机器

详细步骤

虚拟机1的操作

网卡的准备工作:我的虚拟机1是kali,在virtualbox中启用这2张网卡

网卡1如下图:

%title插图%num

网卡2如下图:

%title插图%num

启动虚拟机

无需其它配置,启动虚拟机即可,启动后网卡如下图:

%title插图%num

虚拟机1上安装dnsmasq

apt install dnsmasq

如果虚拟机刚装好后没有执行过apt update

则需要先执行:

apt update

再执行:apt install dnsmasq

最后启动dnsmasq

systemctl start dnsmasq

虚拟机1上启用内核ipv4转发

echo "1" > /proc/sys/net/ipv4/ip_forward
vim  /etc/sysctl.conf

在sysctl.conf中将net.ipv4.ip_forward = 0改为net.ipv4.ip_forward = 1,接着去掉#号的注释,然后保存退出,最后执行sysctl -p查看是否生效了

sysctl -p

能看到net.ipv4.ip_forward = 1即表示生效了

虚拟机1上启用iptables的nat转发

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

虚拟机2的操作

虚拟机2是当作局域网机器,它需要把虚拟机1当作网关(路由器),2个虚拟机之间依靠各自的仅主机网卡进行通信,但需要配置一下IP地址、网关、掩码和dns这些选项,这些仅需要在虚拟机2上配置,因为虚拟机1的网卡已经自动分配了IP

编辑/etc/netplan/00-installer-config.yaml文件,内容改成如下:

vim /etc/netplan/00-installer-config.yaml
%title插图%num

保存退出后执行netplan apply让配置生效

netplan apply

由于是ubuntu18.04,所以配置网卡是netplan,18.04之前是/etc/network/interfaces文件进行配置

编辑/etc/resolv.conf文件也设置dns为虚拟机1

vim /etc/resolv.conf

改成如下图:

%title插图%num

保存退出即可

最后在虚拟机2上产生的任何网络行为,我们都可以在网关上(虚拟机1)抓到流量,如下图:

虚拟机2上访问百度:

%title插图%num
网关上的tcpdump抓获了流量:
%title插图%num

感谢

本文章的实验研究需要感谢架构师钟登峰的支持,其中的ipv4内核转发和iptables转发很关键,本来我实现的是流量经过了网关了,但是回不来(没有回包),操作ipv4内核转发和iptables转发之后则正常了。

发表回复