2013年3月13日水曜日

Catalyst 2970でパケットキャプチャ用の設定

> en
# conf t

ポート1で送受信されるパケットを、ポート2につないだPCでキャプチャする場合。

# monitor session 1 source interface FastEthernet0/1
# monitor session 1 destination interface FastEthernet0/2

VLANの場合

# monitor session 2 source vlan 10
# monitor session 2 destination interface Gi0/2


IPv6 disable

ubuntu 12.04でIPv6をdisableにする。

新しくファイルを作る
/etc/sysctl.d/60-ipv6-disable.conf

ファイル編集

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

user mode linuxのネットワーク設定

apt-getでuml-utilitiesをインストールすると、/etc/init.d/uml-utilitiesができる。これはlinux起動時にuml_switchというアプリを動かす。

このアプリはuser mode linux上のゲストOSにネットワーク(Layer2HUB、Layer2switchとも言う)を提供する。

たとえば、ゲストOS起動時のパラメータで
linux eth0=daemon
のように「daemon」と指定するとuml_switchに繋いでくれる。

ただし、ubuntu 12.04のデフォルトでは閉じたネットワークなので外には出られない。

/etc/init.d/uml-utilitiesを
UML_SWITCH_OPTIONS="-tap tap0"
のように変えると外に出るためのtapデバイスを用意してくれる。

tunctl -u uml-net -t tap0
このようにtap0をuml-netユーザで使用すると予約しておけば、uml_switchをrootで動かさなくてもtapデバイスを作成できる。

#通常、tapデバイスはrootでないと作れない


これでtap0ができるのでホストOSでブリッジなどを作成して繋いでやる。

brctl addbr br0
brctl stp br0 off
brctl addif br0 eth0
brctl addif br0 tap0
ifconfig eth0 up
ifconfig br0 up
ifconfig tap0 up


ゲストOS用のネットワークが1つしかないのは不便なのでいくつか作成する。
ネットワークの識別はunix domian socketで行う。
/etc/init.d/uml-utilitiesの
UML_SWITCH_CTL="$UML_DIR/uml_switch.ctl"がそのファイル名。
このファイル名やpidファイル名を各ネットワークで分ける。

ゲストOS起動時は
linux eth-=daemon,,unix,/var/run/uml-utilities/uml_switch.ctl
とネットワークを指定する。


----------------------------------------
追記
/etc/network/interfaces例

auto lo
iface lo inet loopback

auto br0
iface br0 inet dhcp
bridge_ports eth0 tap0
bridge_stp off
bridge_wait 0
bridge_fd 0
up echo 0 > /sys/devices/virtual/$IFACE/bridge/multicast_snooping
pre-up ifconfig eth0 up
pre-up tunctl -u uml-net -t tap0

libvirtのネットワーク設定

virshコマンドでVM用のネットワークを設定する。

virsh net-define test.xml

test.xmlはこんな感じ
#ホストにbr0のブリッジがある場合の設定
#br0はホストの/etc/network/interfacesとかで作成済み

<network>
  <name>host-bridge-br0-eth0</name>
  <forward mode="bridge"/>
  <bridge name="br0"/>
</network>

virtioとPACKET

kvmで動かしたVM上のアプリで、socket(AF_PACKET)でキャプチャすると、TCP/IPのチェックサムが化けてるという現象に会った。

kvmのvirtio-netにそういう癖があるみたい。

libvirtを使ってゲストOSを扱ってるので設定(XML)を変更して回避する。

<domain type='kvm'>
  <name>guest</name>
  <memory>524288</memory>
  <currentMemory>524288</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type arch='x86_64' machine='pc-1.0'>hvm</type>
    <boot dev='hd'/>
  </os>

  <features>
    <acpi/>
  </features>

  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>

  <devices>

    <disk type='file' device='disk'>
      <source file='guest.img'/>
      <target dev='hda' bus='virtio'/>
    </disk>

    <disk type='file' device='cdrom'>
      <source file='/vm/iso/ubuntu-12.04-server-amd64.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
    </disk>

    <interface type='bridge'>
      <mac address='52:54:00:99:00:00'/>
      <source bridge='br99'/>
      <!--  <model type='virtio'/>  ここをコメントにする  -->
    </interface>

    <input type='mouse' bus='ps2'/>

    <graphics type='vnc' port='5900' autoport='no' listen='0.0.0.0' keymap='ja'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>

  </devices>
</domain>

2013年3月12日火曜日

pythonでイメージファイル操作

Python Imaging Library (PIL)
http://www.pythonware.com/products/pil/

準備
sudo apt-get install python-imaging


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import Image

#Image.new('RGBA', (width, height), (R, G, B, A))
img = Image.new('RGBA', (800, 800), (255,255,255,255))

# img.getpixel( (x,y) )

r = 255
g = 0
b = 0

for x in range(100,200):
  for y in range(200,300):
    img.putpixel( (x,y), (r,g,b) )

img.save("image.png")

ubuntuネットワーク設定

/etc/network/interfacesまわりのメモ。

基本
man interfaces
man bridge-utils-interfaces

最近のkernelにはmulticast snoopingの機能が入ってるのだが、私のよく書くテストプログラムに悪い影響があるので(普通はそんなことにはならないもんだが)、snooping機能をOFFにしたい場合はこんな感じで書いとく。

iface br0 inet dhcp
  bridge_ports eth0
  bridge_stp off
  bridge_waitport 0
  bridge_fd 0
  up echo 0 > /sys/devices/virtual/net/$IFACE/bridge/multicast_snooping

ubuntu desctopでマネージャーがいらない場合
service network-manager stop
apt-get purge network-manager