#author("2025-05-22T12:20:13+00:00","default:sysosa","sysosa") #author("2025-05-22T12:21:50+00:00","default:sysosa","sysosa") NTP: Network Time Protocol 皆の時間をあわせるもの 以前は ntp、今は chrony で行っているのが多いかな. ntp本家様 [[http://www.ntp.org/>+http://www.ntp.org/]] chrony本家様 [[https://chrony-project.org/>+https://chrony-project.org/]] ***windows11をntpサーバにしてみる [#z751897b] まずはwindows自体のntpクライアントを有効にして上位の時計サーバに繋げる. [設定]->[時計と言語]->[日付と時刻]->[その他の時計]をクリックして「日付と時計」パネルを表示させる. 「インターネット時刻」タブをクリックして「設定の変更..」ボタンを押下して「インターネット時刻設定」パネルで有効な上位のntpサイトを指定して「OK」ボタンを押下します &ref(2025y05m22d_204634230.png,nolink,60%); これで上位のntpサーバから時計情報がlinkされました. 次に本題のwindows自体をntpサーバに仕立てます. レジストリを弄ります. 検索欄、もしくはcmdから regedit と実行して「レジストリ エディター」を起動します。 修正場所は HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpServer でEnabledを0から1に変更します &ref(2025y05m22d_205030660.png,nolink,80%); &ref(2025y05m22d_205407509.png,nolink,80%); 次に HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config の AnnounceFlags を a から 5 に変更します &ref(2025y05m22d_205649725.png,nolink,80%); &ref(2025y05m22d_205724501.png,nolink,80%); 以上で「レジストリ エディター」の作業は完了. 次に、w32timeを再起動させます。面倒ならwindowsを再起動で行けますが、コマンドプロンプトで行けます。 まず、検索欄で[cmd]と記入して検索された「コマンドプロンプト」にて右クリック「管理者として実行」を選択します &ref(2025y05m22d_210057812.png,nolink); そこで現れたコマンドプロンプトで #code(nonumber){{ C:\Windows\System32>net stop w32time Windows Time サービスを停止中です. Windows Time サービスは正常に停止されました。 C:\Windows\System32>net start w32time Windows Time サービスを開始します. Windows Time サービスは正常に開始されました。 C:\Windows\System32> }} と実行します. これでwindows11はntpサーバに成れました。次にサーバになったら要求を受け入れる必要があるのでファイアウォールに穴をあけます。 [検索欄]にてコントロールパネルを検索して開きます. 表示方法を「小さいアイコン」にして「Windows Defenderファイアウォール」を起動します 左縦メニューから「詳細設定」を選び「セキュリティが強化されたWinodws Defenderファイアウォール」を開きます。 そこで左のツリーから「受信の規則」を選び、右側の「新しい規則..」を押下します. -どの種類の規則を作成しますか? 「ポート」を選択します -TCPとUDPのどちらにこの規則を適用しますか? 「UDP」を選びます -すべてのローカルポートと特定のローカルポートのどちらを対象にこの規制を適用するか選択してください 「特定のローカルポート」で値は「123」を指定します -接続が指定の条件に一致した場合に、どの操作を実行しますか? 「接続を許可する」を選択 -この規則はいつ適用しますか? 全て選択します -名前 「NTPサービス」 として「完了ボタン」を押下します。これでファイアウォールに穴が開き外部からntpサーバとして機能します。 既定で全てのインターフェースにこれが適用されます。なので二本のnicをもって片方にのみサービスを提供したい場合とか作ったサービス[NTPサービス]のプロパティで修正します ***windowsをntpサーバにした場合の留意点 [#y20b2f5c] chronyで接続を試みても失敗します. 「/etc/chrony.conf」に「maxdistance」を淹れないと無理みたい #code(nonumber){{ [root@rockylinux9 ~]# server win11 iburst maxdistance 16.0 [root@rockylinux9 ~]# }} 「chronyc tracking」とかで接続確認します ***ntpの構築 [#lef0df64] 最新の安定板を取得して、コンパイル、インストール #code(nonumber){{ # wget http://archive.ntp.org/ntp4/ntp-4.2/ntp-4.2.6p5.tar.gz # gzip -cd ntp-4.2.6p5.tar.gz | tar xf - # cd ntp-4.2.6p5 # ./configure --prefix=/opt/ntp --enable-step-slew --enable-ntp-signd=/opt/samba/var/run/ntp_signd # make # make test; make install }} 起動スクリプトは既存の /etc/init.d/ntpd を #code(nonumber){{ prog=ntpd ↓ prog=/opt/ntp/bin/ntpd }} に変更すればOK ■設定ファイル 基本ntpdを稼働させれば、そのマシンはntpサーバとなる。ntpのサービスを提供するかしないかはrestrictの定義に依存。 何もrestrict(制限)しなければ、そのマシンは他から来る時刻問い合わせを受けて、返事をだす形になる。 また、時計の参照先はserverで指定したマシンになるが、127.127.1.0 のIPアドレスは自が持っている時計を参照することを意味する。 #code(nonumber){{ server ntp1.jst.mfeed.ad.jp <-- 外部の信頼ある時刻参照先 server 127.127.1.0 stratum 10 <-- もし外部が繋がらなかった際、緊急として自分の体内時計を参照する restrict default ignore <-- クライアントから来る全てのパケットを拒否します restrict 127.0.0.1 <-- (ただし)この''サーバ''からこの''サーバ''へのパケットは構わない restrict 192.168.0.0 mask 25.255.255.0 nomodify notrap <-- (ただし)192.168.0.0/24から届く、 nomodify: サーバーの状態を変更するパケットは受け取らない notrap : trap サービスのためのパケットも受け取らない restrict ntp1.jst.mfeed.ad.jp mask 255.255.255.255 nomodify notrap noquery <-- (ただし)ntp1.jst.mfeed.ad.jpからの届く nomodify: サーバーの状態を変更するパケットは受け取らない notrap : trap サービスのためのパケットも受け取らない noquery : 質問・紹介らのパケット要求も受け取らない(192.168.0.0/24では頂くけど) driftfile /var/lib/ntp/drift logfile /var/log/ntpd.log broadcastdelay 0.008 keys /etc/ntp/keys ntpsigndsocket /opt/samba/var/run/ntp_signd }} これで、192.168.0.0/24から届く時間参照要求のパケットは許可するけど、それ以外は許可しなくなる。 (自分自身は構わないけど) ***配布パッケージの場合 [#v9c99269] ごくごく簡単に配布パッケージを利用して時計合わせを行う場合。192.168.0.3がntpサーバ #code(nonumber){{ [root@c131 ~]# yum -y install ntp [root@c131 ~]# vi /etc/ntp.conf driftfile /var/lib/ntp/drift server 192.168.0.3 *この2行で十分 [root@c131 ~]# echo 192.168.0.3 >> /etc/ntp/step-tickers *起動時に/etc/init.d/ntpdateで採用されるntpサーバを指定 [root@c131 ~]# /etc/init.d/ntpd start [root@c131 ~]# chkconfig ntpd on; chkconfig ntpdate on }} 最低限これでOK