热门标签 | HotTags
当前位置:  开发笔记 > 程序员 > 正文

KVM-QEMU虚拟机环境中配置TAP使虚拟机联网

在网上搜索基本有两种方法。一是直接利用QEMU提供的-netuser或-nettap。二是使用Bridge模式。后者较前者来说更方便虚拟机与主机系统互访(似乎),我没有试过,其实-nettap也可以实现的。QEMU本身的两种上网方式我更青睐TAP。关于-netuser的

    在网上搜索基本有两种方法。一是直接利用 QEMU 提供的 -net user 或 -net tap 。二是使用Bridge模式。后者较前者来说更方便虚拟机与主机系统互访(似乎),我没有试过,其实 -net tap 也可以实现的。

    QEMU 本身的两种上网方式我更青睐 TAP 。关于 -net user 的安全性高或不高我实在找不到资料,也许是我多虑了;TAP 虽然配置麻烦一些,但是能够直接应用我信任的 iptables 感觉心里踏实很多。而且它还可以实现虚拟机与主机互访,虽然我不会麻烦地去搞这个。

    言归正传。需要注意的有下面几点:

    一、 kvm 的参数

    以下几步都完成后,按这行命令启动虚拟机,会自动应用 /etc/kvm/kvm-ifup 脚本:

    kvm win.img -net nic,vlan=0 -net tap,vlan=0,ifname=tap0

    二、 相应的 iptables 规则,虽然不确定,我希望这些设置会比较安全。

    # FORWARD 默认规则为 抛弃

    iptables -P FORWARD DROP

    # nat POSTROUTING 默认规则为 抛弃

    iptables -t nat -P POSTROUTING DROP

    # tap0 向 ppp0 转发的包,即向外的包,全部接受

    iptables -A FORWARD -i tap0 -o ppp0 -j ACCEPT

    # 来自的 ppp0 的包,即向内的包,如果是已连接的或相关的,接受

    iptables -A FORWARD -i ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT

    # 其他的 TCP 包,拒绝

    iptables -A FORWARD -i ppp0 -p tcp -j REJECT --reject-with tcp-reset

    # UDP 包,拒绝

    iptables -A FORWARD -i ppp0 -p udp -j REJECT --reject-with icmp-port-unreachable

    # 用于内网的 IP 伪装,内网即虚拟机访问互联网时会被认为是主机在访问,而互联网来的包也会被自动转发给虚拟机

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

    三、 使能 IP 转发功能

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

    四、 如果 tun 是编译成内核模块的,先要加载

    /sbin/modprobe tun

    完整文件如下:

    为了方便,我把 iptables 的规则用 iptables-save 写入一个文件 enable-kvm ,然后写了一个启动用的脚本,完成启动及之前的准备和最后的恢复工作。

    启动脚本如下:

    #!/bin/sh

    ###

    # Need to be ROOT.

    # Prepare and Start kvm win guest system.

    # Wait and cleanup.

    ###

    test -f /usr/bin/kvm || exit 0

    # Load tun module, for TAP network interface

    /sbin/modprobe tun

    # Enable ip forward

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

    # Apply enable-kvm rules for iptables

    # Had to create rules in /etc/iptables

    # Had to create /etc/init.d/iptables first.

    # See /etc/init.d/iptables and /etc/iptables

    /etc/init.d/iptables enable-kvm

    # Start

    # With -m 1G, set virtual RAM size to 1G

    # With -localtime, set the real time clock to local time

    # With network, and create a new interface tap0

    # (must named after tap0, because of iptables rules up)

    /usr/bin/kvm win.img \

     -m 1G \

     -localtime \

     -net nic,vlan=0 -net tap,vlan=0,ifname=tap0

    # Restore previous rules

    /etc/init.d/iptables disable-kvm

    # Disable ip forward

    echo "0" > /proc/sys/net/ipv4/ip_forward

    # Unload tun module

    /sbin/modprobe -r tun

    exit 0

    另外,我把 /etc/kvm/kvm-ifup 稍微修改了一下,IP 固定为 192.168.0.1。

    虚拟机的配置: IP 设定为 192.168.0.2 ,网关为 192.168.0.1 ,子网掩码 255.255.255.0 ,DNS 看 /etc/resolv.conf ,添成一样的。

    /etc/kvm/kvm-ifup 如下:

    #!/bin/sh

    switch=$(ip route ls | awk '/^default / { for(i=0;i

    /sbin/ifconfig $1 192.168.0.1 up

    /usr/sbin/brctl addif ${switch} $1

    exit 0

    enable-kvm 是在原来的规则基础上再添加了上述几项,内容如下。 disable-kvm 则是去掉上述几项,恢复原来的规则。

    # Generated by iptables-save v1.4.1.1 on Thu Dec 25 10:15:44 2008

    *nat

    :PREROUTING ACCEPT [0:0]

    :POSTROUTING DROP [0:0]

    :OUTPUT ACCEPT [0:0]

    -A POSTROUTING -o ppp0 -j MASQUERADE

    COMMIT

    # Completed on Thu Dec 25 10:15:44 2008

    # Generated by iptables-save v1.4.1.1 on Thu Dec 25 10:15:44 2008

    *filter

    :INPUT DROP [0:0]

    :FORWARD DROP [0:0]

    :OUTPUT ACCEPT [0:0]

    -A INPUT -i ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT

    -A INPUT -i ppp0 -p tcp -j REJECT --reject-with tcp-reset

    -A INPUT -i ppp0 -p udp -j REJECT --reject-with icmp-port-unreachable

    -A INPUT -i lo -j ACCEPT

    -A FORWARD -i tap0 -o ppp0 -j ACCEPT

    -A FORWARD -i ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT

    -A FORWARD -i ppp0 -p tcp -j REJECT --reject-with tcp-reset

    -A FORWARD -i ppp0 -p udp -j REJECT --reject-with icmp-port-unreachable

    COMMIT

    # Completed on Thu Dec 25 10:15:44 2008

    /etc/init.d/iptables 是自己写的一个脚本用来自动启用 iptables 规则的。

    #!/bin/sh

    START=/etc/iptables/start.rule

    STOP=/etc/iptables/stop.rule

    KVM=/etc/iptables/enable-kvm.rule

    DISCOnNECT=/etc/iptables/disconnect.rule

    case "$1" in

    start)

     /sbin/iptables-restore

     ;;

    stop)

     /sbin/iptables-restore

     ;;

    restart)

     /sbin/iptables-restore

     ;;

    enable-kvm)

     /sbin/iptables-restore

     ;;

    disable-kvm)

     /sbin/iptables-restore

     ;;

    disconnect)

     /sbin/iptables-restore

     ;;

    *)

     echo "Usage: /etc/init.d/iptables {start|stop|restart|enable-kvm|disable-kvm|disconnect}"

     ;;

    esac

    exit 0

    罗罗嗦嗦全文完:)

    如果您有任何意见和建议,请让我知道。


推荐阅读
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 随着网络安全威胁的不断演变,电子邮件系统成为攻击者频繁利用的目标。本文详细探讨了电子邮件系统中的常见漏洞及其潜在风险,并提供了专业的防护建议。 ... [详细]
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 本文深入探讨了计算机网络的基础概念和关键协议,帮助初学者掌握网络编程的必备知识。从网络结构到分层模型,再到传输层协议和IP地址分类,文章全面覆盖了网络编程的核心内容。 ... [详细]
  • 深入解析TCP/IP五层协议
    本文详细介绍了TCP/IP五层协议模型,包括物理层、数据链路层、网络层、传输层和应用层。每层的功能及其相互关系将被逐一解释,帮助读者理解互联网通信的原理。此外,还特别讨论了UDP和TCP协议的特点以及三次握手、四次挥手的过程。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 本文深入探讨了MAC地址与IP地址绑定策略在网络安全中的应用及其潜在风险,同时提供了针对该策略的破解方法和相应的防御措施。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 本文详细介绍如何使用Samba软件配置CIFS文件共享服务,涵盖安装、配置、权限管理及多用户挂载等关键步骤。通过具体示例和命令行操作,帮助读者快速搭建并优化Samba服务器。 ... [详细]
  • 自己用过的一些比较有用的css3新属性【HTML】
    web前端|html教程自己用过的一些比较用的css3新属性web前端-html教程css3刚推出不久,虽然大多数的css3属性在很多流行的浏览器中不支持,但我个人觉得还是要尽量开 ... [详细]
  • 本文深入探讨了传输层的另一个重要协议——用户数据报协议(UDP)。在了解了TCP协议的基础上,我们将详细解析UDP的工作原理、应用场景及其优缺点,帮助读者全面理解为什么需要UDP。 ... [详细]
  • 配置多VLAN环境下的透明SQUID代理
    本文介绍如何在包含多个VLAN的网络环境中配置SQUID作为透明网关。网络拓扑包括Cisco 3750交换机、PANABIT防火墙和SQUID服务器,所有设备均部署在ESXi虚拟化平台上。 ... [详细]
  • NTP服务器配置详解:原理与工作模式
    本文深入探讨了网络时间协议(NTP)的工作原理及其多种工作模式,旨在帮助读者全面理解NTP的配置参数和应用场景。NTP是基于RFC 1305的时间同步标准,广泛应用于分布式系统中,确保设备间时钟的一致性。 ... [详细]
  • 访问一个网页的全过程
    准备:DHCPUDPIP和以太网启动主机,用一根以太网电缆连接到学校的以太网交换机,交换机又与学校的路由器相连.学校的这台路由器与一个ISP链接,此ISP(Intern ... [详细]
author-avatar
优优绿园之时尚饰品_834
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有