Azure の仮想ネットワークからNAT gateway でインターネットに出る

Azure はかつて、特に設定をしなくても仮想ネットワークからインターネットに出られました（既定のSNAT）。
今ではインターネットへの通信にはNAT gateway を構成することが推奨されています。
いつも検証環境では、パブリックIP アドレスを仮想マシンにくっつけていますが、本番でやると大問題のやり方です。
推奨通り、NAT gateway を作ってインターネットに出てみます。

## 概要
NAT gateway を構成し、パブリックIP を持っていない仮想マシンからインターネットに出る。
[前回の記事](https://qiita.com/dessin/items/b8cf85552832c9997690)で立てたNTP サーバが残っているので、こいつがインターネット上のNTP サーバと同期できれば成功とみなします。
## 手順
### ０．準備（VPN gateway の作成）
前回の記事で立てたNTP サーバはRHEL です。
パブリックIP アドレスなしで仮想マシンをいじる＆インターネットに出る検証をするために、VPN gateway を作っておきます。いつもBasic SKU で作るためにBicep 使ってるんですがそれすらめんどう・・・お金がかかるので短期決戦です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/679afe1e-e735-7165-08b2-e2bb0f39b166.png)

### １．NAT gateway の作成
いきなりですが、作成しようとしてエラーが出ました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/904734fc-b9d0-1c39-7cad-d75acb10418e.png)

NAT gateway を置くサブネットに、Basic SKU のパブリックIP アドレスがあってはならぬとのこと。
これは前回用いたNTP サーバにくっつけたものなので今回は削除します。
関連付けの解除からの、削除で。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/2b495a8f-1315-0344-1aca-bf2e3bbe7ffe.png)
パブリックIP を削除したら、失敗したと思っていたNAT gateway が半分出来てました。デプロイには成功して、サブネットとの関連付けのみ失敗していたようです。
よく考えたら、NTP サーバがインターネットに参照する前後で有効になっていればいいので、いったんこのままで。

### ２．VPN gateway からつなぐ
VPN gateway ができたので、ポイント対サイトの構成をしてVPN を張ります。
（Azureから見て）リモートのネットワークは10.1.0.0/16 にしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/95160650-5079-31aa-7891-7fd083b6c5f9.png)
VPN から、StepServer につなぎます。いうまでもなく、今のStepServer にはプライベートIP アドレスしかありません。
/etc/chrony.conf の内容を編集し、デフォルトの（インターネット上の）NTP サーバを参照する設定にします。
```
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
pool 2.rhel.pool.ntp.org iburst
```

.conf ファイルを更新したら、chronyd を再起動するのをお忘れなく。
時刻同期の確認をすると、、、
```
[root@StepServer testuser]# chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^? 202.182.111.234.vultruse>     2   6     3     2    -55ms[  -55ms] +/- 2187us
^? 172-105-204-105.ip.linod>     2   6     3     2    -55ms[  -55ms] +/- 1977us
^? ntp-b2.nict.go.jp             1   6     3     2    -55ms[  -55ms] +/- 1133us
^? v163-44-97-196.rm2n.stat>     2   6     3     1    -56ms[  -56ms] +/-   17ms
```
今のところ、同期できない状態です。
### ３．（再）NAT gateway の作成
サブネットを追加するところからやり直しです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3617557/2c164552-60f1-fe0a-3ed5-3994b6c4ba92.png)
パブリックサブネット（スペルミスはご愛敬）にNTP サーバがいるのでここと関連付けます。ここでも「Basic SKU のパブリックIP を持つサブネットは表示されません」と言ってます。
NAT gateway の作成は直感的でいいですね。パブリックIP を新規作成するか流用するかと、関連付けるサブネットを選ぶくらいです。
また、サブネットの関連付けも20秒くらいで完了しました。

### ４．時刻同期
さて、時刻同期はどうなっているでしょうか。先ほどはインターネットのNTP サーバと同期ができていない状態でした。
```
[root@StepServer testuser]# chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^+ 202.182.111.234.vultruse>     2   6   177    72    +56us[ -505us] +/- 2094us
^+ 172-105-204-105.ip.linod>     2   6   177     8    -34us[  -34us] +/- 2866us
^* ntp-b2.nict.go.jp             1   6   177     8   -155us[ -278us] +/- 1790us
^- v163-44-97-196.rm2n.stat>     2   6   177    71   -779us[ -798us] +/-   16ms
```
Stratum 1 のサーバと同期がとれています。NAT gateway のおかげでインターネットに出られたことがわかります。
### 補足
chronyc sources の結果について、copilot に聞いてみた。

 ntp-b2.nict.go.jpってどんなサーバ？
> `ntp-b2.nict.go.jp` は、国立研究開発法人情報通信研究機構（NICT）が提供する公開NTPサーバーの一つです。このサーバーは、日本標準時（JST）に直結しており、非常に高精度な時刻同期を提供します>¹²。
>
>具体的には、NICTのNTPサーバーは以下の特徴を持っています¹²：
>- **高精度**：日本標準時と10ナノ秒以内の精度で同期。
>- **高性能**：毎秒100万リクエスト以上の処理能力。
>- **高信頼性**：冗長システム構成と高性能サーバーにより、安定した時刻供給を実現。
>
>このサーバーを利用することで、ネットワークに接続されたPCやデバイスが正確な時刻を自動的に取得することができます。
>
>他に知りたいことがあれば教えてくださいね。
>
>ソース: Copilot との会話、 2024/10/10
>(1) 日本標準時(JST)グループ - NICT. https://jjy.nict.go.jp/tsp/PubNtp/index.html.
>(2) 【NTP】日本から使える公開NTPサーバ #Cisco - Qiita. >https://qiita.com/keigo_kabutomori/items/945b543cbe2792dd8d80.
>(3) NICT 公開 NTP サービス. https://bing.com/search?q=ntp-b2.nict.go.jp+server.
>(4) NICT 公開 NTP サービス. https://jjy.nict.go.jp/ntp/.
>(5) [Linux]NTPサーバーの設定と確認 | プナイミー. https://punaime.jp/linux-ntp-server-configuration-verification/.

^+ は疎通はできてるんですか？
>`chronyc sources` コマンドで `^+` が表示されている場合、そのNTPサーバーとの疎通は確立されています。`^+` は、サーバーが時刻同期の候補として受け入れられていることを示しており、通信が正常に行われていることを意味します。
>
>他に確認したいことや、詳しく知りたいことがあれば教えてくださいね。

候補のサーバとはちゃんと疎通まで出来たうえで、Stratum が上位のサーバを選んでるようですね。

以上です。お疲れさまでした。