ntpd 4.2.8サービスを実行するUbuntu 16.04ベースのDockerコンテナがあります。コンテナがインスタンス化された後、ポート123 / udpを公開しました。
LAN上のホストまたは他のコンピュータからntpq -p <container_host>
ピアリストと同期状態を取得するために使用できます。ただし、Collectdを使用して監視しないと、ntpdc -c kerninfo <container_host>
失敗/タイムアウトします。これは私を混乱させる!
コンテナ内でテストしましたが、合理的なrestrict
声明がありますが、合理的なものはありません。ただし、どちらの場合もタイムアウトが発生します。コンテナでtcpdumpを実行すると(権限のあるコンテナに昇格した後)、UDPパケットが到着しましたが応答がないことがわかります。もちろん、tcpdumpを使用すると、ntpq実行を使用するときの要求と応答を表示できます。
同じntp.confファイルを使用してホストから直接ntpdサーバーを実行すると、ntpdc -c kerninfo <container_host>
ntpdとCollectdの両方がホストと承認されたLAN上の他のシステムで成功します。ただし、ホストシステムはまだntp 4.2.6に付属している以前のバージョンのUbuntu(14.04)を実行しています。
したがって、唯一の違いは、Dockerネットワーキング(私が知っている限りNAT)とntpバージョン(4.2.6対4.2.8)です。ただし、ntp.org文書にはNATまたは4.2.8アップデートへの言及はありません。クライアントがサーバーとは異なるサブネット上にあるため(NATのため)、コマンドがタイムアウトしますか?それとも4.2.8で何かが変わりましたか?
注:私のコンテナイメージはntpdを実行しているubuntu:16.04に基づいています。[Eメール保護](Ubuntu公式リポジトリから)ホストシステムは4.2.6p5を実行するUbuntu 14.04を実行しています。
PS:すべての制限文が正しい場合でも、Collectdによって送信されたコマンドは、ntpdc -c kerninfo <container_host>
コンテナで実行されたときのntpdのタイムアウトと同じです。
修正する-ddd
:より詳細な出力を得るためのオプションを使用してコンテナ内でntpdを実行したことに言及するのを忘れました。記録された唯一の関連データは次のとおりです。
read_network_packet: fd=19 length 192 from 192.168.1.3
receive: at 26 172.17.0.2<-192.168.1.3 flags 19 restrict 000
アップデート2:解決策を見つけた後、同じ問題を抱えている他の人も検索するときに質問/回答をよりよく見つけることができないかという心に質問を変更しました。また、ホストがUbuntu 16.04を実行していると思っていましたが、実際にはまだ14.04を実行しているバグを修正しました。
答え1
私の問題を解決しました。このエラーは、ntp 4.2.8がツールntpdc
とツールで使用する通信モード(つまりmode7)を使用せずに(デフォルトで無効にすることによって)発生します。
ntp 4.2.8以降では、ntpq
ntpdcの代わりにこのツールを使用する必要があります。これでntpdcと同じコマンドがサポートされます。これにより、ntpq -c kerninfo <container_host>
正常に実行できます。このntpq
コマンドは他のモード(mode6とも呼ばれます)を使用して通信します。
ntp 4.2.8では、まだ移行されていないツールとの互換性をサポートするためにモード7を再度有効にできます。次の行をに追加する必要があります/etc/ntp.conf
。
enable mode7
しかし、この制限については非常に注意する必要があります。 mode7を有効にしてntpdサーバーを開いたままにすると、DDoS増幅攻撃を実行するために使用できる可能性があります。現在、UbuntuはIPv4とIPv6のデフォルト制限を使用しています。私の考えでは- このモードの使用をブロックします。
restrict -4 default kod notrap nomodify nopeer noquery limited
restrict -6 default kod notrap nomodify nopeer noquery limited
Collectdはmode7のみをサポートしています(参照問題#932)、コンテナ内部構成でこのモードを再度有効にすることにしました。 ntpがこのモードのリアクティブ化をサポートしている限り、この変更はCollectdがUbuntu 16.04(またはntp 4.2.8+を使用するすべてのディストリビューション)でntpdを監視できない問題を解決します。
注:人々がこの問題に直面したときに解決策を見つけるために、より良い準備のためにNATについて誤解を招くことがないように質問を編集します。 NATはそもそも根本的な原因だと思います。