アクティブディレクトリに参加しようとすると、「ERROR_ASSERTION_FAILURE」失敗!!
クライアントPC(Ubuntu12.04)のシステムをリストア後、アクティブディレクトリに参加できなくなりました。ドメインの登録時にエラーメッセージがでます。(図1)<図を、クリックすると拡大します>
アサーション(assertion)とは、プログラム実行の前提条件が満たされるか満たされないかを判定する仕組みです。この場合アサーション・フェイラーなので失敗しています。しかし、どのプログラムのどの部分で失敗しているのか、Details(詳細)を見ても、それらしいファイルは検索にヒットしませんでした。見つけることができませんでした。(図2)
(後でわかったのですが、IPv6が有効になっていると、このようなエラーが起きるようです。)
きちんとアクティブディレクトリに参加できないととっても危機的な状態になります。
端末(ターミナル:Alt+T)を起動するといきなりグループIDがログインユーザ(この場合は、アクティブディレクトリに登録されているユーザ)と関連付けができない状態を示すメッセージと合わせて、「私の名前はありません」みたいなメッセージが表示されました。(つまり、ユーザ名・グループ名がすべてID(12345678)に置き換えられていました。)
このような状態では、端末は使えません。
日本語入力システム(MOZC)やLibreOfficeなどほとんどのアプリケーションが起動しません。 さらに、「原因不明の内部エラーが発生!」のようなメッセージがたびたび表示され、システム全体も不安定になってしまいました。
まったく、使い物になりません。つまり、リカバリーした意味がないのです。
さっそく、ネイティブ・ユーザ(Ubuntu本来のユーザ)で、ログインし直し、端末を起動させて作業開始です。(この症状はネイティブ・ユーザでは見られません。)
【前提条件】
- すでにアクティブディレクトリに接続できる設定は完了している(以前は参加できた)
- pbis-open-7.1.2.1233.linux.x86.debがインストールされている
【原因の究明】
まず、やったこと。
1.ドメインコントローラを再起動→効果なし
2.ドメインコントローラの名前解決ができるか確認→成功
dig smb4.abc.localで、名前解決できるか確認できた。
(ping smb4.abc.localも成功)
3.グループポリシーを削除→効果なし(たまに成功。確実性なし。)
グループポリシーを設定する前は、問題なくアクティブディレクトリに参加できていた。
(グループポリシーの内容はリムーバブルメディアの読み取り禁止)
4.Windows7の管理ツールから登録されている該当パソコンを削除し、再登録を試みるが失敗。
5.pbis-openの再インストール→効果なし
6.「ある日突然、使えなくなったAD用サーバー管理ツール」を参考に、IPv6を無効化→解決
実際には、WiresharkでクライアントPCのパケットをキャプチャして、その振る舞いを確認しました。
図3・図4のようにIPv6でドメインコントローラにアクセスしようとして、失敗しているように見えました。
IPv6が優先されているので先にIPv6で接続確立を試みています。(図3:No1〜12)
しかし、うまくいきません。(ドメインコントローラはIPv6仕様ではありません。)
不思議なのはドメインコントローラから「session keep alive」(セッションの有効性確認)メッセージがクライアントPCに発行されていることです。(図4:No21)そのあと、クライアントPC側から「ACK」フラグがセットされたTCPが返されています。(図4:No22)
「SYN,SYN-ACK,ACK」フラグなど通常の3ウェイハンドシェイクの手順もなく、いきなり「ACK」フラグです。どこでセッション確立したっちゃろ?
つまり、セッションは確立していないのに、セッションの有効性を確認しています。
再びIPv4のARPが発行されて接続のやり直しになっています。(まぁ、接続失敗ですね)
正常な通信ではない。このことから、クライアントPCのIPv6が邪魔をしていると推論しました。つまり、クライアントPCのIPv6を無効にすれば問題は解決するはずです。
単純な話です。ドメインコントローラ(samba4)側はIPv6で運用していないので、クライアントもIPv6を無効にすればいいだけの話でした。なかなか、気づかないものですね。