虚拟机网络配置

在使用虚拟机时,因为经常网络不通导致各种操作不方便,本文对qemu-kvm下的虚拟机网络配置进行了整理

一、环境说明

       本文只介绍nat模式(nat模式好处是虚拟机可以与物理机不在同一个网段,不点用工作网络的IP地址),假设物理机使用网络:192.168.18.0/24, 虚拟机使用网络:192.168.6.0/24。

     目标:物理机A是linux操作系统,安装虚拟机,物理机B是windows操作系统(个人工作机器),需要和虚拟机之间要实现互访,同时虚拟机可以访问internet网络。物理机A的IP地址:192.168.18.24, 物理机B的IP地址:192.168.18.110,虚拟机配置的IP地址为:192.168.6.16

二、配置虚拟机网卡

 1、给虚拟机分配网卡

        在物理A(虚拟机宿主机)执行以下命令,生成一个虚拟网卡:

#ip tuntap add tap-qemu mode tap

#ip addr add 192.168.6.1/24 dev tap-qemu
#ip link set tap-qemu up

      执行完以上命令后,通过ifconfig命令可以看到系统中增加了一个名为 tap-qemu 的网卡,如下图所示:

tap-qemu: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.6.1  netmask 255.255.255.0  broadcast 0.0.0.0
        inet6 fe80::80f9:25ff:fe25:8344  prefixlen 64  scopeid 0x20<link>
        ether 82:f9:25:25:83:44  txqueuelen 1000  (以太网)
        RX packets 49685  bytes 5135568 (5.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 95881  bytes 118790764 (118.7 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2、开启数据包转发功能

       临时开启:

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

永久开启,开机自动加载配置:

#echo net.ipv4.ip_forward=1 >>/etc/sysctl.conf

#sysctl -p

     命令:sysctl -p 使用配置立即生效

3、启动虚拟机

       在启动虚拟机时,需要增加以下参数,为虚拟机指定使用的虚拟网卡:

-nic tap,ifname=tap-qemu,script=no

4、配置虚拟机IP地址

      虚拟机IP地配置网上相关文档很多,本文不再说明。下面是虚拟机网格配置信息:

IP:192.168.6.16

mask:255.255.255.0

网关:192.168.6.1

dns: 114.114.114.114

         8.8.8.8

      说明:IP地址必须与宿主机分配的IP地址是在一个网段(需要与物理机A分配给虚拟网卡tap-qemu的地址在同一个网段),网关必须为物理机A分配给虚拟网卡tap-qemu的地址。

       通过以上步骤,可以实现宿主机与虚拟机之间的网络互通,即在宿主机(物理机A)可以ping通192.168.6.16地址,在虚拟机上可以ping通192.168.18.24。

三、让虚拟机器以访问互联网

       通过第二步配置,虚拟机如果无法访关互联网,则需要在宿主机上增加路由转发功能,将虚拟机的请求转发到外网,可以先用iptables命令查看宿机(物理机A)的路由转发信息, 没有相关源地址为192.168.6.0/24网段的转发规则:

# iptables -t nat -nL --line-numbers
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination

     在宿主机(物理机A)用以下命令增加一条转发规则,将收到的192.168.6.0/24网段数据转发到192.168.18.24上,再通过18网段转出外网,命令如下:

iptables -t nat -A POSTROUTING -s 192.168.6.0/24 -j SNAT --to-source 192.168.18.24

     执行完上述命令后, 再查看转发规则如下:

iptables -t nat -nL --line-numbers
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    SNAT       all  --  192.168.6.0/24       0.0.0.0/0            to:192.168.18.24

     这时在虚拟机上就可以正常上网了。

四、让物理机B与虚拟机可以互通

      通过第三步,虚拟机可以PING通通物理B,但物理机B一般还无法访问虚拟机。

1、物理机B增加转发路由       

       在物理机B增加一条路由信息,将192.168.6.0/24的网络数据转发到192.168.18.24机器上。首先用route命令查看机器的路由信息如下:

>route print -4

IPv4 路由表
================================================================
活动路由:
网络目标                 网络掩码                  网关                接口                      跃点数
0.0.0.0                     0.0.0.0                  192.168.18.1    192.168.18.110      25
127.0.0.0                 255.0.0.0              在链路上           127.0.0.1               331
127.0.0.1                 255.255.255.255  在链路上           127.0.0.1               331
 127.255.255.255    255.255.255.255  在链路上           127.0.0.1               331
 192.168.6.0            255.255.255.0      192.168.18.24   192.168.18.110     26
 192.168.18.0          255.255.255.0      在链路上            192.168.18.110     281
 192.168.18.110      255.255.255.255  在链路上            192.168.18.110     281
 192.168.18.255      255.255.255.255  在链路上            192.168.18.110     281
 255.255.255.255    255.255.255.255  在链路上            127.0.0.1               331
 255.255.255.255  255.255.255.255   在链路上             192.168.18.110     281

       执行以下命令,增加一条转发路由:

route ADD 192.168.6.0 MASK 255.255.255.0  192.168.18.24

       再次查看路由,成功增加了一条路由如下:

>route print -4

IPv4 路由表
================================================================
活动路由:
网络目标                 网络掩码                  网关                接口                      跃点数
0.0.0.0                     0.0.0.0                  192.168.18.1    192.168.18.110      25
127.0.0.0                 255.0.0.0              在链路上           127.0.0.1               331
127.0.0.1                 255.255.255.255  在链路上           127.0.0.1               331
127.255.255.255    255.255.255.255   在链路上           127.0.0.1               331
192.168.6.0            255.255.255.0      192.168.18.24   192.168.18.110      26
192.168.6.0            255.255.255.0       192.168.18.24   192.168.18.110     26 

192.168.18.0          255.255.255.0       在链路上            192.168.18.110     281
192.168.18.110      255.255.255.255   在链路上            192.168.18.110     281
192.168.18.255      255.255.255.255   在链路上            192.168.18.110     281
 255.255.255.255    255.255.255.255  在链路上            127.0.0.1               331
 255.255.255.255  255.255.255.255    在链路上             192.168.18.110     281

2、物理机A增加nat路由

       在物理机A上执行以下命令,增加一条转发路由

iptables -t nat -A POSTROUTING -s 192.168.18.110 -d 192.168.6.0/24 -j SNAT --to-source 192.168.18.1

iptables -t nat -A POSTROUTING -s 192.168.18.0/24 -d 192.168.6.0/24 -j SNAT --to 192.168.6.1

        第一条命令只有192.168.18.110主机可以访问虚拟机,第二条命令使192.168.18.0/24网段的机器都可以访问虚拟机。下面是执行一条命令后的结果:

# iptables -t nat -nL --line-numbers
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination         
1    SNAT       all  --  192.168.18.110       0.0.0.0/0            to:192.168.6.1
2    SNAT       all  --  192.168.18.110       192.168.6.0/24       to:192.168.18.1

     这时在物理机B上就可以ping通虚拟机地址了。 

五、注意事项

1、如果机器无法ping通有可能是防火墙设置原因,所以需要注意查看防火墙状态。

2、在window上可以通过 tracert 命令,linux可以通过traceroute命令,诊断哪一段路由出了问题,有利于查找问题。下图是在物理机B上执行tracert命令结果:

>tracert 192.168.6.16

通过最多 30 个跃点跟踪
到 DESKTOP-I12IKM3 [192.168.6.16] 的路由:

  1    <1 毫秒   <1 毫秒   <1 毫秒 192.168.18.24
  2     1 ms    <1 毫秒   <1 毫秒 DESKTOP-I12IKM3 [192.168.6.16]

跟踪完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值