2008/06/25

続・snmpd: ioctl 35123 returned -1・その2・Dom0の準備

VLANとXenを組合わせて使う』シリーズに従ってDom0を設定する。ただし、VLANインターフェース名は、VLAN_PLUS_VID形式(つまり、vlan4000の様なインターフェース名となる)にする。

まず、VLANインターフェース名の形式を指定する。/etc/sysconfig/networkに以下の部分を追加する。
NOZEROCONF=yes
VLAN=yes
VLAN_NAME_TYPE=VLAN_PLUS_VID

VLANとXenを組合わせて使う・その2・VLAN設定』で解説した通り、VLAN_PLUS_VID形式ではVLANインターフェース名から対応する物理インターフェース名を特定することはできない。従って、各VLANインターフェースの設定ファイル/etc/sysconfig/network-scripts/ifcfg-vlan*では、PHYSDEV=物理インターフェース名の様に物理インターフェースを明示しなければならない。例えば、vlan4001の設定ファイル/etc/sysconfig/network-scripts/ifcfg-vlan4001は次の通り。
DEVICE=vlan4001
PHYSDEV=eth1
BOOTPROTO=static
IPADDR=192.168.56.191
NETMASK=255.255.255.0
ONBOOT=yes

これに伴い、他の設定でインターフェース名を使用している部分についてを変更する。『VLANとXenを組合わせて使う・その3・Xenネットワーク』で紹介したXenのネットワークのラッパースクリプト/etc/xen/scripts/network-vlan-bridge-wrapperを使う場合、netdev=で指定するインターフェース名を以下の通り変更する。
#!/bin/sh
BRIDGE_SCRIPT=/etc/xen/scripts/network-vlan-bridge
$BRIDGE_SCRIPT "$@" vifnum=0 netdev=vlan1000 bridge=br1000
$BRIDGE_SCRIPT "$@" vifnum=1 netdev=vlan4000 bridge=br4000
$BRIDGE_SCRIPT "$@" vifnum=2 netdev=vlan4001 bridge=br4001
$BRIDGE_SCRIPT "$@" vifnum=3 netdev=vlan4002 bridge=br4002
この他に例えば、iptablesでインターフェース名を指定している場合もあるだろう。適宜変更する。


その1・概要
その2・Dom0の準備
その3・RPMのビルドとインストール
その4・IPv6の無効化

2008/06/24

続・snmpd: ioctl 35123 returned -1・その1・概要

前のエントリ『snmpd: ioctl 35123 returned -1』で、
VLANとXenを組合わせて使う・その3・Xenネットワーク』で解説した通りに仮想ブリッジを構成すると、ブリッジ名が8文字を超える。Linuxにおいて、仮想ブリッジはネットワークインターフェースの一種なので、この問題が発生する。これについては、短いブリッジ名、例えばbr0900を使用することで回避可能。
と軽く書いたが、実際にやってみると簡単ではなかった。

簡単でない第一の理由は、実際にはネットワークインターフェース名を8文字以下に抑えることが出来ないこと。仮想ブリッジ名やVLANインターフェース名を8文字以下に抑えても、Xenのスクリプト/etc/xen/scripts/network-bridgeでは、VLANインターフェースを含むインターフェースが、pインターフェース名に改名される。例えば、VLANインターフェースvlan1000は、pvlan1000になる。結果、インターフェース名が8文字を超える。

この問題は、同じエントリに追記した通り、
net-snmp-5.3.1-24以降にアップグレードすれば解決する
ので、自前でRPMをビルド・インストールすれば、万事解決…とは行かない。CentOS5やRHEL5のnet-snmpパッケージにはIPv6の扱いにバグがあるからだ。これが簡単にいかない第二の理由。IPv6不要の場合は、IPv6を無効化することで解決可能だ。
参考:
Re: SNMP Errors in logfile with bonded NICs: subcontainer ia_addr insert #6
[ 1444989 ] --enable-ipv6 causes runtime errors in 5.3/5.4 on Linux 2.6

2008/6/26追記:
CentOS公式リポジトリが更新されたので、自前でビルドする必要は無い。『net-snmp-5.3.1-24 released』参照。

作業概要は、以下の通り。
  1. Dom0の準備
  2. RPMパッケージのビルドとインストール
  3. IPv6の無効化
以降、それぞれについて解説する。


その1・概要
その2・Dom0の準備
その3・RPMのビルドとインストール
その4・IPv6の無効化

2008/06/20

snmpd: ioctl 35123 returned -1

CentOS5やRHEL5でsnmpdを起動すると、/var/log/messagesに以下の様なメッセージが大量に吐かれる場合がある。
Jun 18 17:31:48 hostname snmpd[4807]: ioctl 35123 returned -1
Jun 18 17:31:48 hostname last message repeated 7 times
この問題は、8文字より長いネットワークインターフェース名を使用している場合に発生する。通常、インターフェース名は、eth0の様な形式で8文字を超えることは無いが、VLANを使用する場合等に問題になる。

この問題は、Net-SNMPのversion 5.4.2で解決されるらしい(CentOS5は、5.3.1)が、現時点では正式リリースされていない(Net-SNMPのサイト)。従って、現状では8文字より長いインターフェース名を使わないのが現実解となる。

RHELやCentOSでのVLANの使用方法については、『VLANとXenを組合わせて使う・その2・VLAN設定』で解説した。インターフェース名が8文字以下に抑えるには、/etc/sysconfig/networkの中で、VLAN_NAME_TYPEにVLAN_PLUS_VIDもしくはVLAN_PLUS_VID_NO_PADを指定すればよい。
VLAN=yes
VLAN_NAME_TYPE=VLAN_PLUS_VID
VLAN IDは最大で4桁(1~4095)なので、ネットワークインターフェース名は最大で8文字となる。

また、『VLANとXenを組合わせて使う・その3・Xenネットワーク』で解説した通りに仮想ブリッジを構成すると、ブリッジ名が8文字を超える。Linuxにおいて、仮想ブリッジはネットワークインターフェースの一種なので、この問題が発生する。これについては、短いブリッジ名、例えばbr0900を使用することで回避可能。

2008/6/25追記:
上で、「例えばbr0900を使用することで回避可能」と書いているが、実際にはそう簡単には解決しない。解決編『続・snmpd: ioctl 35123 returned -1・その1』参照。

追記:
この問題は、RHBA-2008:0376-8で修正されている。
This update also fixes syslog messages produced by snmp under the following
conditions:

* when an interface name exceeds 8 characters in length.
従って、net-snmp-5.3.1-24以降にアップグレードすれば解決する…はずだが、CentOSのリポジトリにはまだない

2008/6/26追記:
CentOS公式リポジトリが更新された。『net-snmp-5.3.1-24 released』参照。

2008/06/11

もう一つのping … arping

コマンド/bin/pingは、通信確認用によく使われる。このコマンドは、IPのプロトコルの一つであるICMPのType 8、Echo Requestを対象ホストへ送信し、ICMP Type 0、Echo Replyが返ってくるかどうかを確認する(『ネットワークの疎通を確認するには?~ping/traceroute~』)
ただし、TCPやUDPで通信はできるのに、pingは失敗する、という場合もある。例えば、対象ホストでiptablesが働いていて、pingに応答しないよう設定されている場合などだ。Firewallなどのセキュリティ製品の場合、デフォルトでpingに応答しない場合もある。このような場合の代替手段の一つが、/usr/sbin/arpingだ。
このコマンドは、pingがICMPを利用する代わりに、ARPを利用する。ARPは、Ethernet環境において、IPアドレスからMACアドレスを得るために用いられるプロトコル。Echo Requestに応答しないよう設定されているホストでも、IPで通信する必要があれば、必ずARPには応答する。
# /usr/sbin/arping -I eth0.4001 192.168.56.192
ARPING 192.168.56.192 from 192.168.56.195 eth0.4001
Unicast reply from 192.168.56.192 [XX:XX:XX:XX:XX:XX] 0.703ms
Unicast reply from 192.168.56.192 [XX:XX:XX:XX:XX:XX] 0.672ms
Unicast reply from 192.168.56.192 [XX:XX:XX:XX:XX:XX] 0.983ms [CTRL]+[C]
Sent 3 probes (1 broadcast(s))
Received 3 response(s)
#
このコマンドを使用する場合の注意点は以下の通り。
  • root権限で実行しなければならない。
  • 同一セグメント内でしか使用できない(ARPの原理より明らか)
  • インターフェースが複数ある場合は、-I インターフェースで指定しなければならない(上の実行例参照)

2008/06/03

パスワードを紛失したDomUをリカバリ

DomUのパスワードを忘れてしまった場合の復旧作業のメモ。
簡単に言うと、当該DomUのイメージファイルなり論理ボリューム(logical volmume, LV)をマウントし、/etc/shadowを編集すればよい。DomUで論理ボリュームを使用している場合、Dom0と同じボリュームグループ(volume group, VG)名だと面倒なことになる(『LVMをXenを使ってサルベージする』参照)ため、Dom0のVG名は、事前にVolGroup00ではなく、例えばVolGroupXX等に変更しておく。以下、Dom0上で作業する。
# kpartx -a /dev/VolGroupXX/LVNAME
# pvscan
PV /dev/mapper/LVNAME VG VolGroup00 lvm2 [3.88 GB / 0 free]
PV /dev/sda2 VG VolGroupXX lvm2 [135.47 GB / 91.53 GB free]
Total: 2 [139.34 GB] / in use: 2 [139.34 GB] / in no VG: 0 [0 ]
# vgchange -ay VolGroup00
2 logical volume(s) in volume group "VolGroup00" now active
# mkdir /mnt/root
# mount /dev/VolGroup00/LogVol00 /mnt/root
#
ここで、/mnt/root/etc/shadow(DomUの/etc/shadow)を適宜編集する。このファイル中のパスワードフィールドは、以下の手順で生成することができる。
$ openssl passwd -1
Password: パスワード
Verifying - Password: パスワード
$1$mvOZS5mn$TbBh6lcKrGn.y5Hvzk/MK.
$
編集後、後始末する。
# umount /mnt/root
# vgchange -an VolGroup00
0 logical volume(s) in volume group "VolGroup00" now active
# kpartx -d /dev/VolGroupXX/LVNAME
#