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 件のコメント:
コメントを投稿