虚拟机模拟路由器
背景介绍
我现在有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如下图:
网卡2如下图:
启动虚拟机
无需其它配置,启动虚拟机即可,启动后网卡如下图:
虚拟机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
保存退出后执行netplan apply让配置生效
netplan apply
由于是ubuntu18.04,所以配置网卡是netplan,18.04之前是/etc/network/interfaces文件进行配置
编辑/etc/resolv.conf文件也设置dns为虚拟机1
vim /etc/resolv.conf
改成如下图:
保存退出即可
最后在虚拟机2上产生的任何网络行为,我们都可以在网关上(虚拟机1)抓到流量,如下图:
虚拟机2上访问百度:
感谢
本文章的实验研究需要感谢架构师钟登峰的支持,其中的ipv4内核转发和iptables转发很关键,本来我实现的是流量经过了网关了,但是回不来(没有回包),操作ipv4内核转发和iptables转发之后则正常了。