Lolizeppelin's Blog

Centos 6.4 KVM 安装panabit routeos管理局域网

Posted on By gcy

这篇是2013末写的,里面一些设置在现在版本已经不适用,比如pci直连网卡已经被linux禁止了


服务器最少2个网口,推荐3个接口以上

首先解决点centos 6.4的初始问题,参考

升级centos内核,升级kvm,直接yum update升级libvertd等等一套kvm相关工具

升级硬件firmware—-惠普DL360 G6/G7的raid卡旧固件会导致使用内核使用intel_iommu=on启动参数的服务器崩溃(这个问题折腾了我2天才搞清楚,试验了各种参数启动iommu=on,pt intel_iommu=on,igfx_off,strict,一个都没用)

貌似r410甚至r710系列的dell服务器也有类似故障,这个参数是kvm pci_assign_devices的必备参数,所有优先升级raid卡固件,最好连bios固件也升级了。升级HP固件可以参考

启用主板iommu功能,参考下面帖子,不过6.4步骤比简化了,不需要编译内核,只要主板cpu支持,直接在grub.conf增加intel_iommu=on就可以了,取消网卡绑定和绑定网卡这两步都不需要自己做了(但是虚拟机pci独占的网卡也要在网卡配置文件里noboot=yes,不要配置ip,BOOTPROTO=no就可以了) 旧版参考

修改系统参数, 参考

vim /etc/modprobe.d/kvm_iommu.conf
options kvm allow_unsafe_assigned_interrupts=1

设置完后重新加载模块或者直接重启

下载panabit 链接

下载routeos 自己搜索 MikroTik RouterOS 5.24下载

解释下为什么要routeos
虽然routeos的管理功能倒是不重要,大部分管理相关的都由panabit管理,但是一般网关路由设备性能烂,不如routeos,做个猫还行
而且如果无线路由之类的在panabit上方,那么panabit就没法管理到无线的流量,现在办公地点无线设备那么多,所以最好还是有个routeos
当然如果你的路由性能不错,r6300v2什么的,可以不弄routeos,但是无线流量panabit就管理不到了。

虚拟网络规划(DL360 G6服务器自带网卡eth0 eth1,一块intel 双口千兆网卡eth2 eth3)

routeos两块网卡
1、pci独占物理网卡 eth2  上接modem
2、虚拟网卡  tap_ro (与panabit的上行口tap_pa直连)

物理机(宿主服务器)使用eth0,与tap_ctrl连接,eth1暂时无用。

顺便,不要在意ethtool里tap网卡的Speed: 10Mb/s,实际网速应该取决于openvswich的限制(实测有千兆网速)
附上原来找到的一个openvpn的FAQ,也是说tap网卡的
The TAP-Win32 adapter will run at whatever speed the hardware and network will
support -- the 10Mbps you see in the interface properties doesn't really mean
anything -- it's really just a Windows artifact from the days when ethernet
interfaces were always hardware and never virtual.

要实现上述网络,系统自带的网桥是做不到的

因为网桥的原理是拦截物理网卡信息然后分发(反正大概就是这个逻辑),不能实现虚拟交换机的功能。
要实现此功能,须使用到openvswich,正好openvswich对kvm的支持很好,配置文件里都能直接配openvswich模式,结构图如下

openvswich没有现成的rpm包,直接下载openvswich

最新稳定版是1.9.3,直接下载tar.gz包
解压可以在rhel文件夹里找到
openvswitch-fedora.spec   openvswitch-kmod-rhel6.spec
熟悉redhat rpmbiuid语法的可以把两个文件合并,水平不行就分开两个来rpmbuild
openvswitch-fedora.spec编译出openvswitch
openvswitch-kmod-rhel6 这个是内核模块必须安装,如果你升级了系统版本,必须重新编译一份并安装
rpmbuild编译的时候出错 Dependency tokens must begin with alpha-numeric, ‘_’ or ‘/’: BuildRequires: %kernel_module_package_buildreqs
安装 redhat-rpm-config 包即可
如果你刚换内核!记得在安装kernel-devel以后重启在系统(最好把老内核直接删了),不然build出来的版本位置是错误的,文件还在老内核下!折腾死人啦!!!!_

build openvswich的到最后打包的时候也会报错ovsdbmonitor缺文件,原因可以从编译前check的输出得知

checking for PySide.QtCore Python module... no
checking for PyQt4.QtCore Python module... no
checking for twisted.conch.ssh Python module... no
checking for twisted.internet Python module... no
checking for twisted.application Python module... no
checking for json Python module... yes
checking for zope.interface Python module... no
checking whether to build ovsdbmonitor... no

简单来讲就ovsdbmonitor是个基于pyqt的图形化界面工具,没有PyQt就不能使用,所以编译的时候没把文件编译到目标目录.但是spec文件里定义了这些文件——等等….这好像是我自己修改版本的spec文件里加进去的…..我操?

算了不过如果你安装了PyQt,build原版的时候一样报错说多出了文件……反正如果你用原版build的话,不要装PyQt,如果有必要用这个,自己在spec文件里把文件加到spec文件后面。

接下来编辑/etc/sysconfig/openvswitch,把#BRCOMPAT=yes的注释取消掉

这个东西的作用是让系统自带的brctl命令能直接操作openvswich,
这样做的好好处是常用的系统脚本比如ifup之类的命名就能直接生成启动虚拟交换机,
如果你完全不打算使用系统来配置openvswich,可以不设置。
不过这样的话就不能通过在network-scripts/下添加配置文件来启动虚拟交换机了,这是个很麻烦的一件事,
所以最好配置这个设置

安装完成后检查/etc/rc3.d/,确保openvswich在network之前启动

启动openvswick
/etc/init.d/openvswitch start

在network-scripts/下创建ifcfg-br_cross ifcfg-br_cross内容分别为

DEVICE=br_cross
TYPE="Bridge"
ONBOOT="yes"
BOOTPROTO="static"

DEVICE=br_ctrl
TYPE="Bridge"
ONBOOT="yes"
BOOTPROTO="static"

启动网桥(装了openvswich已经网桥已经变交换机了)

ifup br_ctrl
ifup br_cross

将eth0绑定到br_ctrl

brctl addif eth0(这里用ovs-vsctl add-port来绑定是一样的,
    但是brctl绑定诸如eth0:0这样的虚拟网卡会报错,用ovs-vsctl就没问题)

openvswich这边配置完毕, 下面创建panabit虚拟机

1:创建虚拟机磁盘文件

qemu-img create -f raw panabit.raw 10G

顺便记录个类型模式转换命令qemu-img convert -f qcow2 -O raw panabit.qcow2 panabit.raw.

设置panabit虚拟机的xml文件,也就是libvirt的xml文件,官方文档地址,我的xml文件如下

<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  virsh edit panabit
or other application using the libvirt API.
-->

<domain type='kvm'>
  <name>panabit</name>
  <uuid>you uuid for kvm</uuid>
  <memory unit='KiB'>262144</memory>
  <currentMemory unit='KiB'>262144</currentMemory>
  <vcpu placement='static'>2</vcpu>
  <cputune>
    <period>1000000</period>
    <quota>-1</quota>
    <emulator_period>1000000</emulator_period>
    <emulator_quota>-1</emulator_quota>
    <vcpupin vcpu='0' cpuset='15'/>
    <vcpupin vcpu='1' cpuset='11'/>
  </cputune>
  <os>
    <type arch='x86_64' machine='rhel6.4.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='localtime'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>destroy</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='none'/>
      <source file='/home/Kvm_disk/panabit.raw'/>
      <target dev='hda' bus='ide'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <controller type='usb' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
    </controller>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <interface type='bridge'>
      <mac address='you mac for tap_pa'/>
      <source bridge='br_cross'/>
      <virtualport type='openvswitch'>
        <parameters interfaceid='interfaceid uuid' profileid='menial'/>
      </virtualport>
      <target dev='tap_pa'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <interface type='bridge'>
      <mac address='you mac for tap_ctrl'/>
      <source bridge='br_ctrl'/>
      <virtualport type='openvswitch'>
        <parameters interfaceid='interfaceid uuid' profileid='menial'/>
      </virtualport>
      <target dev='tap_ctrl'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </interface>
    <video>
      <model type='cirrus' vram='9216' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <hostdev mode='subsystem' type='pci' managed='yes'>
      <source>
        <address domain='0x0000' bus='0x07' slot='0x00' function='0x0'/>
      </source>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </hostdev>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </memballoon>
  </devices>
  <seclabel type='none'/>
</domain>

hostdev那部分就是pci独占网卡,我的eth2是

07:00.0 Ethernet controller: Intel Corporation 82571EB Gigabit Ethernet Controller (rev 06)

所以

    <address domain='0x0000' bus='0x07' slot='0x00' function='0x0'/>

其他的pci对应设置即可,设置好xml文件后将panabit添加到libvirt中,初次安装需在xml文件里添加光驱和vcn连接接口,并把启动设备改为cdrom

<graphics type='vnc' port='5910' autoport='no' listen='0.0.0.0'>
  <listen type='address' address='0.0.0.0'/>
</graphics>
<disk type='file' device='cdrom'>
    <source file='/home/kvm/Panabit_1309r3_fb8x.iso'/>
    <target dev='hdb' bus='ide'/>
</disk>

在vrish中执行

virsh create panabit.xml(创建虚拟机)
virsh define panabit.xml(把虚拟机配置文件存放到libvirt中)
virsh start panabit

安装panabit直接去官网看,自从有了live cd后安装都很方便,参考

注意,不要在panaibt的虚拟机内使用reboot命令,也不要在panabit的web界面重启panabit,虚拟机内部重启会造成panabit从内核加载开始就奇慢无比,一开始我还以为是虚拟机磁盘问题。

routeos同样安装一次

routeos 花生壳设置,参考

这版本winbox设置计划任务有点问题,直接在终端通过命令行里添加计划任务,参考

例如

system scheduler>add name=ddns interval=30m start-time=startup  on-event=peanutddns

待续………………………..

更新,最新版的panabit已经支持pppoe拨号了,可以不再需要routeos了。

再更新…panabit拨号配置接口ip的话就只能处于旁路监听模式不能控留了,还是推荐panaibt控流,随便用个什么做路由

再更新…新版panabit的路由功能已经完善,不需要在上层增加任何路由器了,pppoe也ok了