モジュールに正確な時刻を設定することは、ログ同期やセキュリティ証明書の検証を含むあらゆる活動において極めて重要です。リリース15.1以降、VOSにはネットワーク時刻プロトコルデーモン(ntpd)の移植版が同梱されており、これを実行することを強く推奨します。
通常、ntpdを実行するには、タイムサーバーのリストを指定する必要があります。タイムサーバーとは、ネットワーク上でntpdを実行し、要求するホストに時刻を提供するホストです。インターネット上には利用可能なタイムサーバーが多数存在します。地域別にサーバーを整理したhttp://www.pool.ntp.org/en/を参照してください。
1つまたは3つ(それ以上)のサーバーをリストすることを推奨します。決して2つだけにしてはいけません。ntpdはサーバーの応答を比較することで、最適なサーバーを判断しようとします。サーバーが2つしかリストされていない場合、ntpdが判断できず、結局どちらのサーバーも使用しない結果になる可能性があります。
しかし、会社のポリシーでインターネット上のタイムサーバーにアクセスできず、会社が指定したタイムサーバーも利用できない場合はどうすればよいでしょうか。その場合、ローカルのWindows (DC)またはバックアップドメインコントローラー(BDC)を利用できる可能性があります。ほとんどのDCとBDCはタイムサービスを提供します。
VOS管理者として、ローカルDCやBDCをどのように見つければよいでしょうか?最も簡単な方法は尋ねることでありますが、それが不可能な場合、パケットモニターを実行して自身で確認できます。ワークステーションとドメインコントローラーの両方が、UDPポート138で定期的にブロードキャストを行います。
コマンド
system>stcp>command_library>packet_monitor -interface#INTERFACE-numeric
-time_stamp -verbose -pkt_hdr -hex_header -hex_dump -length 1500 -filter -port 138
|
| 図1 – packet_monitor コマンド |
これらのブロードキャストを表示します(INTERFACEを自身のIPインターフェース名に置き換えてください)。残念ながら、タイムサーバーを見つけるにはパケット内の16進データを調べる必要があり、処理すべきパケットが大量に存在するため、パケットをファイルにダンプする必要があります。 私のpm.cmコマンドマクロ(マクロはこちらで入手可能)は自動的に出力ファイルを作成し、トレースを起動プロセスとして実行します。出力ファイル名はpm.(日付).(時刻).outとなります。コマンドは以下の通りです:
pm#INTERFACE-no_arp -no_icmp -port 138 |
| 図2 – pmコマンドマクロ |
トレースを開始する方法にかかわらず、15~20分間実行させると、ネットワーク上の各DCおよびBDCからブロードキャストを受信できるはずです。 次に、文字列「c0 3」および「c0 2」を含む行を検索してください。つまり、小文字のC、ゼロ、4つのスペース、そして3または2のいずれかです。この数字はオフセットc0のバイトの上位ニブルに対応します。そのバイトは以下のようにデコードできます:
ABCD EFGH ^^^^ ^^^^ |||| ||||-- ホストはワークステーションです |||| |||--- ホストはサーバーです |||| ||---- ホストはSQLサーバーではありません |||| |----- ホストはドメインコントローラーではありません ||||------- ホストはバックアップドメインコントローラーです |||-------- ホストはタイムサーバーです ||--------- ホストはAppleホストではありません |---------- ホストはNovellホストではありません |
| 図3 – サーバータイプバイトのデコード |
ご覧の通り、最初の3つまたは2つを検索してもすべてのタイムサーバーが見つからない場合がありますが、専属のNovellまたはAppleサイトでない限り、少なくとも1つのDCまたはBDCは検出されるはずです。
d pm.11-02-06.17:25:06.out -match 'c0 2'
ready 17:47:13
d pm.11-02-06.17:25:06.out -match 'c0 3'
%phx_vos#m15_mas>SysAdmin>Noah_Davids>pm.11-02-06.17:25:06.out 11-02-06 17:47
c0 33 10 82 0 f 1 55 aa 0 3 <<U*
c0 33 10 84 0 f 1 55 aa 0 3 <<U*
c0 33 10 84 0 f 1 55 aa 0 3 <<U*
c0 33 10 82 0 f 1 55 aa 0 3 <<U*
c0 33 10 84 0 f 1 55 aa 0 3 <<U*
c0 33 10 84 0 f 1 55 aa 0 3 <<U*
c0 33 10 84 0 f 1 55 aa 0 3 <<U*
c0 33 10 82 0 f 1 55 aa 0 3 <<U*
c0 33 10 84 0 f 1 55 aa 0 3 <<U*
c0 33 10 82 0 f 1 55 aa 0 3 <<U*
c0 33 10 84 0 f 1 55 aa 0 3 <<U*
ready 17:47:29
|
| 図4 – タイムサーバーおよびバックアップドメインコントローラーに一致するpacket_monitor行 |
単に「c0」行を見つけるだけでは不十分です。パケットを送信したホストのアドレスも特定する必要があります。`>system>gnu_library>bin` ディレクトリにある `grep` コマンドは複数行にまたがる一致が可能です。
grep -e 'c0 3' -e 'c0 2' -e UDP pm.11-02-06.17:25:06.out
. . . .
UDP from 192.168.33.180.138 to 192.168.33.255.138 Cksum 7ca3, 220 data bytes.
UDP from 192.168.33.249.138 to 192.168.33.255.138 Cksum c89a, 209 data bytes.
c0 33 10 82 0 f 1 55 aa 0 3 <<U*
. . . .
UDP from 192.168.33.50.138 to 192.168.33.255.138 Cksum 9526, 193 data bytes.
UDP from 192.168.33.248.138 to 192.168.33.255.138 Cksum d05f, 209 data bytes.
c0 33 10 84 0 f 1 55 aa 0 3 <<U*
. . . .
UDP from 192.168.33.202.138 to 192.168.33.255.138 Cksum cf35, 219 data bytes.
UDP from 192.168.33.253.138 to 192.168.33.255.138 Cksum 9505, 209 data bytes.
c0 33 10 82 0 f 1 55 aa 0 3 <<U*
. . . .
UDP from 192.168.33.131.138 to 192.168.33.255.138 Cksum aa35, 222 data bytes.
UDP from 192.168.33.252.138 to 192.168.33.255.138 Cksum 7343, 209 data bytes.
c0 33 10 84 0 f 1 55 aa 0 3 <<U*
. . . . .
|
| 図5 – 検出されたタイムサーバーを示すpacket_monitorのライン |
タイムサーバーのアドレスは「c0」行の直上の行に表示されます。上図では192.168.33.249、192.168.33.248、192.168.33.253、および192.168.33.252を特定しています。
タイムサーバーとして自身を広告するホストを特定したところで、それらが確実に機能するかどうかをどう確認すればよいでしょうか?ntpdateコマンドを使用して各タイムサーバーを手動で問い合わせることができます。この時点ではntpdateにモジュールの時刻も設定させたくないため、「-q」引数を使用してタイムサーバーへの問い合わせのみを実行します。
ntpdate -q 192.168.33.248
ホスト 192.168.33.248 およびサービス ntp を検索中
ホストが見つかりました : dc48.noahslab.stratus.com
サーバー 192.168.33.248, 階層 4, オフセット -0.117418, 遅延 0.04202
6 Feb 17:53:10 ntpdate[1427079382]: タイムサーバー 192.168.33.248 オフセット -0 を調整中
+.117418 秒
準備完了 17:53:10
ntpdate -q 192.168.33.249
ホスト 192.168.33.249 およびサービス ntp を検索中
ホストが見つかりました : dc49.noahslab.stratus.com
サーバー 192.168.33.249, 階層 4, オフセット -0.038709, 遅延 0.04355
6 Feb 17:53:25 ntpdate[1427079382]: タイムサーバー 192.168.33.249 オフセット -0 を調整
+.038709 秒
準備完了 17:53:25
ntpdate -q 192.168.33.252
ホスト 192.168.33.252 およびサービス ntp を検索中
ホストが見つかりました : dc52.noahslab.stratus.com
サーバー 192.168.33.252, 階層 3, オフセット 0.015733, 遅延 0.04216
6 Feb 17:53:38 ntpdate[1427079382]: タイムサーバー 192.168.33.252 オフセット 0. を調整中。
+015733 秒
準備完了 17:53:38
|
| 図6 – ntpdateを使用した検出済みタイムサーバーのテスト — 動作中のサーバー |
あるサーバーが、時間を広告しているにもかかわらず、ファイアウォールポリシーによって時間を提供できない場合、ntpdate は以下のように表示されます。
ntpdate -q 192.168.33.254
ホスト 192.168.33.254 およびサービス ntp を検索中
ホストが見つかりました : dc54.noahslab.stratus.com
サーバー 192.168.33.254, 階層 0, オフセット 0.000000, 遅延 0.00000
6 Feb 17:54:00 ntpdate[1427079382]: 同期に適したサーバーが見つかりませんでした。
準備完了 17:54:00
|
| 図7 – ntpdateを使用した検出済みタイムサーバーのテスト — 動作しないサーバー |
使用可能なタイムサーバーがわかったところで、>system>ntp>ntp.conf ファイルを以下のように記述できます。黒文字部分はすべて sample_ntp.conf.17.0 ファイルからの引用です。新規追加部分は 緑色で示します。 「server foo.bar.somewhere.com」行の前に追加されたコメント記号に注意してください。 restrictステートメントは、他のホストがNTPデーモンに対して時刻以外の問い合わせを行うことを防止することで、システムのセキュリティ状態を向上させます。
# サーバーディレクティブは時刻の取得元を指定します。
# 各ディレクティブごとに、DNSまたはIP値を1つ指定します。
# server foo.bar.somewhere.com
server 192.168.33.248 burstiburst
server 192.168.33.249 burst iburst
server 192.168.33.252 burstiburst
# logile の保存場所。適切な相対パスを選択 - VOS では絶対パス
# ログファイルの保存場所。相対パスを適切に選択してください - VOSの絶対パス名は正しく解析できません。
logfile >system>ntp>ntp.logfile
# ドリフトファイルの保存場所。
driftfile >system>ntp>ntp.drift
# これらの設定により、ローカルホスト以外のホストからの非時刻関連クエリを防止します
restrict default noquery
restrict 127.0.0.1
|
| 図8 – 更新された >system>ntp>ntp.conf ファイル |
ntpdコマンドを起動します(>system>ntpディレクトリ内にsample_start_ntpd.17.0があります)。数分後、以下のような出力が表示されるはずです。192.168.33.252の前にある「*」は、ntpdがその時刻を取得するために選択したサーバーであることを示しています。 192.168.33.248 の前にある「+」は、192.168.33.252 から応答がない場合の代替候補を示しています。いずれかの行の 1 列目に「*」が表示されている限り、モジュールの時刻は時刻サーバーと同期されます。 ただし、モジュールと時刻サーバーの初期差が大きい場合、時刻が収束するまでに時間がかかる可能性があることに留意してください。
ntpq -n
ntpq> peer
remote refid st t when poll reach delay offset jitter
==============================================================================
+192.168.33.248 192.168.33.252 4 u - 1024 377 1.312 -1549.3 639.489
192.168.33.249 192.168.33.252 4 u 626 1024 377 132.423 15.202 27.797
*192.168.33.252 192.168.33.51 3 u 802 1024 377 0.964 -27.486 2.993
|
| 図9 – ntpqを使用した時刻同期の確認 |
最後に、ntpdはクライアントとサーバーの両方の役割を果たすため、1つのVOSモジュール上で動作させれば、ネットワーク上の他のモジュールやあらゆるデバイス向けのタイムサーバーとして機能できます。
