2023年4月2日日曜日

DD-WRTでクライアントにNTP鯖を強制的にリダイレクトしてみた。

 WiFiにつながるデバイスが増える中でRTCを持たずにNTPサーバから時計を取ってくるデバイスが増えてると思うんだけども、NTPサーバを強制的に変更できないか試してみた。

微妙に時間がズレてるのとか気になるし。中華デバイスとかだと鯖も中華とかなのかな。

方法としてはNTP鯖が特定できればルータのhostsとかdnsmasqで飛ばせたりするんだろうけども、今回はiptablesでNTPポートの123を特定のNTP鯖に飛ばすようにしてみた。

iptables -t nat -A PREROUTING -p udp -m udp --dport 123 -j DNAT --to-destination 162.159.200.1:123
iptables -t nat -A POSTROUTING -p udp --sport 123 -j SNAT --to-source 162.159.200.1:123

DD-WRT化したルータなのでiptablesがそのまま使えるのでWebアクセスでSSHを有効にしてSSHからこの2行のコマンドを実行した。NTP鯖はCloudflare Time Servicesを使わせてもらった。これでこのルータに繋がっているデバイスからNTPのポート123にアクセスする場合は全部指定したIPアドレス(162.159.200.1)の鯖につながるようになる。

ためしにコントロールパネルの日付と時刻から適当な鯖にインターネット時刻設定するとうまく同期できるようになってる。でも適当なアドレスではだめっぽい。DNSでIPが返ってくるような存在するアドレスであればうまく設定される。

ちなみにこの設定、ルーターを再起動するとリセットされてしまうので、常に有効にしたい場合はAdministration→CommandsでStartupに入れておくといいかも。削除したい場合は

iptables -t nat -L --line-numbers

でリストを表示してから

iptables -t nat -D [リストの項目] [番号]

で削除できる。(デフォルト状態からの追加だと、iptables -t nat -D PREROUTING 3とiptables -t nat -D POSTROUTING 6だった)

ローカル環境でRTCを持たないデバイスにRTCを持つデバイスからNTPしたい場合にも使えるかも。

0 件のコメント:

コメントを投稿