概要
CiscoルータでのPAT(NAT)環境で配下のPCからNTPを使おうとしたらハマったのでそのメモです。
PAT(NAT NAPT)環境でのポート変換でなぜかウェルノウンポートにして外に通信してしまう事象が発生しました。
NTPに限らずこの仕様で動くようなので気をつけておかないといけません。
構成
NTPサーバ(NICTやmfeedなど) ――― インターネット ――― Ciscoルーター ――― クライアント(PCなど)複数台
- NTPサーバのIP : 1.1.1.1(仮)
- GlobalIP(NAT後のIP) : 2.2.2.2(仮)
- クライアントのIP : 10.0.0.1-100
グローバルIPは1つしかないのでクライアントからNTPサーバ宛のアクセスは全てマスカレードしています。
普通のPAT(NAPT)の挙動
show ip nat translationsで確認
Inside global | Inside local | 備考 |
---|---|---|
1.1.1.1:47289 | 10.0.0.1:47289 | ポートが空いていれば内部ローカルと同じポート番号で外に出ていく |
1.1.1.1:47290 | 10.0.0.2:47289 | ポートが埋まっている場合は別のポート番号(ウェルノウンポート以外)で出ていく |
NTPアクセス時の挙動
show ip nat translationsで確認
Inside global | Inside local | 備考 |
---|---|---|
1.1.1.1:123 | 10.0.0.1:123 | ポートが空いていれば内部ローカルと同じポート番号で外に出ていく |
1.1.1.1:20 | 10.0.0.2:123 | ポートが埋まっている場合は別のポート番号(ウェルノウンポート)で出ていってしまう |
※IPは例えです。
問題点
クライアントの送信元ポートが123(NTP)の場合なぜかウェルノウンポートに変換されます。
この123以外のウェルノウンポートを使って出ていくのが結構やっかいで、NTPサーバによっては時間を取得させてくれません。
今回の例で20番ポートに変換されてしまったクライアントは123番ポートが空くまでひたすらエラーを繰り返しました。
結論
Ciscoルータの動作仕様だそうです。
これの対策はstatic natを使用するしかないとのことできちんとした対処ができません。
詳細はCisco社のFAQを参照ください。
Network Address Translation(NAT; ネットワーク アドレス変換)に関する FAQ
ワークアラウンド
NATテーブルの保持時間がデフォルトで10分(6000秒)なので、これを10秒など極端に短くすることでクライアント同士のNTP取得タイミングがかぶる確率を減らすくらいしかなさそうです。
まとめ
NTPなどSource Portがウェルノウンポートになる可能性が高い通信はこの仕様を理解した上で設計しないとトラブります。