KVM上で動作するWindowsの音が途切れる問題(解決)

1. 発生する問題

SPICEクライアントを利用してWindowsゲストマシンに接続し、音楽などを再生すると数秒ごとに音が途切れるようにプチプチとノイズが入る。Linuxゲストマシンでは発生しない。

2. 環境

2.1 KVMホスト

OS:CentOS7.6(3.10.0-957.12.2.el7.x86_64)
libvirt:4.5.0
qemu-kvm:2.12.0

2.2 KVMゲスト

OS:Windows7, Windows8.1, Windows10

2.3 SPICEクライアント

※KVMホスト上
OS:Windows10, Centos7.6
remote-viewer:5.0-11

3. 対処方法

3.1 結論

サウンドデバイスを「ac97」に変更することで解決できる。他にも、USB DacをUSBリダイレクトで接続することで音にノイズが交じることなく再生することができた。

3.2 サウンドデバイスの変更

デフォルトでは下図のようにサウンドデバイスに「ich6」が選択されているが、「ac97」に変更する。

3.2 ドライバのインストール

3.2.1 Windows 7

3.1で変更したサウンドデバイスは「realtek ac97」であり、デフォルトではドライバが存在しないため次のようにサウンドデバイスが認識されないのでドライバをインストールする。

次のリンク先から「Download Realtek AC97 Sound Driver 6305 (Vista / 7) (29.68 MB)」をダウンロード(ZIPファイル)

Download Realtek ac97

ダウンロードしたファイルを展開し、下図の「setup.exe」を実行して手順を進めていくと、署名の検証エラーが発生しますが、「このドライバーソフトウェアをインストールします」を選択して先に進み、インストールが完了したら再起動します。

再起動後、スピーカーのアイコンから☓マークが消えてサウンドデバイスが認識されます。

3.2.2 Windows8.1 , Windows10

Windows8.1 と Windows10 ではドライバインストール時の証明書が検証できないとインストールできない(エラーとなる)ため、インストール前に別の手順を行う必要がある。

「スタート」→「電源(マーク)」の順にを選択すると「シャットダウン」と「再起動」の選択リストが表示されるので、shiftキーを押しながら「再起動」を選択すると、次の画面が表示されます。「オプションの選択」画面が表示されたら、「トラブルシューティング」→「詳細オプション」→「スタートアップ設定」を順にクリックし、再起動します。

再起動すると次の画面が表示されるので、「7 ドライバー署名を強制しない」を選択します。

この後デスクトップが表示されれば事前準備は完了です。この後はWindows7と同じようにドライバをインストールする。

以上

CentOS7.6にSnortを導入

CentOS6の32bit環境に導入したついでに64bit環境のCentOS7にSnortを導入

1. 環境

CentOS7.6(x86_64)をMinimalでインストール
Kernel Version : 3.10.0-957.21.3.el7.x86_64
※インストールイメージからインストール後Updateのみ実施

2. インストール

2-1. epelの導入

# yum install epel-release
# sed -i 's/enabled=1/enabled=0/g' /etc/yum.repos.d/epel.repo

私はデフォルトで無効にしています。

2-2. 必要なライブラリのインストール

$ sudo yum install rpm-build autoconf automake pcre-devel libpcap-devel gcc flex bison zlib-devel openssl-devel gettext gcc-c++ git rpmdevtools
$ sudo yum --enablerepo=epel install libdnet-devel luajit luajit-devel

tarballで配布されているソースコードパッケージからrpmファイルを生成するためにcheckinstallを導入します。(daq-2.0.6.tar.gzにはspecファイルが含まれていない)
また、epelリポジトリに daq のパッケージが存在しますが、必要なファイルが足りず後の snort のビルドが行えないので注意

$ git clone http://checkinstall.izto.org/checkinstall.git
$ cd checkinstall

※参考:checkinstallをインストールしてrpmパッケージを作成してみた

そのままだとパッケージ作成時にエラーで落ちるため checkinstall.in ファイルを次のように修正

$ diff -u checkinstall.in.org checkinstall.in
--- checkinstall.in.org 2019-06-22 08:07:20.144490509 +0900
+++ checkinstall.in     2019-06-22 08:07:32.168331040 +0900
@@ -2428,8 +2428,6 @@
 BuildRoot: $BROOTPATH
 Provides:  $PROVIDES
 Requires:  $REQUIRES,/bin/sh
-Recommends: $RECOMMENDS
-Suggests:  $SUGGESTS
 
 %description
 EOF

$ diff -u checkinstallrc-dist.org checkinstallrc-dist
--- checkinstallrc-dist.org     2019-06-23 22:15:04.217209722 +0900
+++ checkinstallrc-dist 2019-06-23 22:17:33.480591938 +0900
@@ -117,7 +117,7 @@
 NEW_SLACK=1
 
 # Comma delimited list of files/directories to be ignored
-EXCLUDE=""
+EXCLUDE="/sys"
 
 # Accept default values for all questions?
 ACCEPT_DEFAULT=0
 
$ diff -u installwatch/Makefile.org installwatch/Makefile
--- installwatch/Makefile.org   2019-06-23 22:17:55.687796979 +0900
+++ installwatch/Makefile       2019-06-23 22:18:14.558971202 +0900
@@ -11,7 +11,7 @@
 VERSION=0.7.0beta7
 
 BINDIR=$(PREFIX)/bin
-LIBDIR=$(PREFIX)/lib
+LIBDIR=$(PREFIX)/lib64
 
 all: installwatch.so

$ make
$ sudo make install
$ su -
# cd /usr/local/sbin
# diff -u checkinstall.org checkinstall
--- checkinstall.org    2019-06-23 22:45:25.807058269 +0900
+++ checkinstall        2019-06-23 22:48:51.508962212 +0900
@@ -2470,7 +2470,7 @@
 # Prepare directories to be included in the .spec file
 mv ${TMP_DIR}/newfiles ${TMP_DIR}/newfiles.tmp
 cat ${TMP_DIR}/newfiles.tmp | while read line; do
-   [ -d "${BUILD_DIR}/${line}" -o -L "${BUILD_DIR}/${line}" ] && echo -n "%dir " >> ${TMP_DIR}/newfiles
+   [ -d "${BUILD_DIR}/${line}" ] && echo -n "%dir " >> ${TMP_DIR}/newfiles
    echo "\"/${line}\"" >> ${TMP_DIR}/newfiles
 done

# rpmdev-setuptree
# curl -L https://www.snort.org/downloads/snort/daq-2.0.6.tar.gz -o daq-2.0.6.tar.gz
# tar zxvf daq-2.0.6.tar.gz
# cd daq-2.0.6
# ./configure
# checkinstall
# yum localinstall /root/rpmbuild/RPMS/x86_64/daq-2.0.6-1.x86_64.rpm
# exit
$

2-3. snort のビルド&インストール

こちらの snort-2.9.13.tar.gz には spec ファイルが存在するので rpmbuild でビルド可能

$ curl -L https://www.snort.org/downloads/snort/snort-2.9.13.tar.gz -o snort-2.9.13.tar.gz
$ rpmbuild -tb --clean snort-2.9.13.tar.gz
$ sudo yum localinstall ~/rpmbuild/RPMS/x86_64/snort-openappid-2.9.13-1.x86_64.rpm

※rpmbuildは実行環境によりますが数分かかります。

snortの設定等は次のサイトを参考にしてください

不正アクセス検知システム導入(Snort+SnortSnarf+Oinkmaster)