Azure VNetやSpoke間通信など

Azureネットワーク回りの自分用メモ。
他の記事へのリンクが多くなってしまっているが。。

# VNet
- VNet間は通常何も設定がなければ疎通不可
- DeployできるVMはVNetと同じRegionでないとだめ

## Subnet
### Private IP
プライベートIPアドレスに使えるのは以下範囲。
- 10.0.0.0/8        「10.0.0.0～10.255.255.255」
- 172.16.0.0/12    「172.16.0.0～172.31.255.255」
- 192.168.0.0/16    「192.168.0.0～192.168.255.255」


### Subnet上でAzureによって予約されるIP

https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-networks-faq#are-there-any-restrictions-on-using-ip-addresses-within-these-subnets

0,1,2,3,上限値は使えない。
> たとえば、IP アドレスの範囲が 192.168.1.0/24 の場合、次のアドレスが予約されます。
> 
> - 192.168.1.0: ネットワーク アドレス。
> - 192.168.1.1: 既定のゲートウェイ用に Azure によって予約されています。
> - 192.168.1.2、192.168.1.3: Azure DNS IP アドレスを仮想ネットワーク空間にマップするために Azure によって予約されています。
> - 192.168.1.255: ネットワーク ブロードキャスト アドレス。

## Azure Wire Server 168.63.129.16
- VMのHeartbeat問い合わせ
- AzureのDNS、
- AzureのDHCP
等いろいろやっているらしい。

VMが立つと即Internetに接続できるのはこいつが裏で動いていたりする。

https://qiita.com/l0x3el/items/b7477472ebefc2f54518

VNetのNSGにもAllowInternetOutBoundがある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/bdc4b79c-b419-534d-d11b-38e05c9d52b3.png)

VMを立ててすぐにはAzureのDNSを見るようになっており、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/ab14b87b-dec1-457a-0f65-ad99f00eb7e4.png)

VM上でipconfig /allしたらこうなる。
- VMが立つとcloudapp.netのドメインに参加させられる
- DHCPもさっきのAzure Wire Serverが設定されている
- GatewayにはX.X.X.1が振られている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/c24a1e0a-8b09-6785-cd3e-e4ad1f73f815.png)

### NAT Gateway
ちなみにこのまますぐInternetに出れるが、外部に見えるIPを固定したい場合はPublic IPを付与してしまうか、NAT Gatewayを使う。

https://www.cloudou.net/virtual-network/vnet021/

NATする際のPublic IPを設定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/cf850ff9-1f1e-7efb-7221-41f5f46c06e7.png)

VMが存在するSubnetを選択。最後にVMを再起動。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/6c222065-bdc4-07ff-7872-1c5ad1ac1168.png)

NAT Gatewayを確認するとPIPが振られていて、以降のVMの外部への通信はこれになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/66ba0302-db07-3810-5a20-9111b632cab0.png)

# VNet Peering

基本的なHub Spoke Topology。
Peeringのパターンについて素敵なまとめ記事があったので以下参照。

https://zenn.dev/microsoft/articles/zenn-vnet-peering-instruction

https://zenn.dev/microsoft/articles/expressroute-spoke-spoke

## Spoke間通信
Peeringして、UDR作成して、HubにFirewallを置けばOKと書いてあったが、自分の探し方が悪かったのか、具体的な手順が見つからなかったのでPerplexity AIに質問しながらやってみる。

以下イメージ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/5d4752bc-53bd-63c9-bd85-8decf15f3615.png)

https://learn.microsoft.com/ja-jp/azure/architecture/networking/architecture/hub-spoke?tabs=cli#direct-communication-between-spoke-networks


### ① VNet Deploy
まずはhub, spoke1, spoke2をDeployしてみる。VNetはRegionを変えてみる。hubにはAzure FirewallもDeployしている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/1decbefc-3ece-e6ef-f568-ee194a762522.png)

### ② Peering
HubからSpokeに対してPeeringを設定。双方向の設定が可能なので、そうするとSpoke側のVNetにも設定が入る。
Forwardを可能にするように2つ目の設定にチェックを入れる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/a86857db-b244-ed46-b00f-49eb634ddaac.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/21684fab-090d-3d74-2a57-4c738ad155a4.png)

同じことをspoke2でも実施。

### ③ UDRをspoke1, 2に作成する
スクショは1側だけで。
UDRはspoke2のVNetのIP Rangeを指定し、Next HopにFirewallのアドレスを設定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/86e1a468-bece-5b03-26b4-80ef8fb6f0f3.png)

spoke1のSubnetにUDRを紐づける。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/64a4dd5f-3040-3ee7-aa19-290c633c9c98.png)

同じことをspoke2でも実施。

### ④ Firewallのルールを設定
Network rule collectionでspoke1とspoke2の双方向のルールを設定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/bf021b37-057b-f60b-90aa-1d3d70416cec.png)

### ⑤ vmを配置
vmをspoke1とspoke2にデプロイし、それぞれでIISを有効化。

### ⑥ Private IPで疎通確認
VMから隣のSpokeのVMのIIS Start Pageが見れることを確認できた。

### ⑦ Private DNS Zone設定
せっかくここまできたので、URLでもアクセスできようにやってみる。
Private DNS Zoneを立てて、Virtual Network Link設定時にEnable auto registrationをOnにすればVMを自動的に検知してくれる。これも両方のVNetで設定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/5d4fca74-661b-a1e1-1010-4c5472720d60.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/a7118944-a30c-7cc5-6e44-dc94b09195b5.png)
レコードが作られた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/e0268f69-0fcb-8af5-6be9-fd603ae8ff99.png)

### ⑧ URLで疎通
Private DNS Zone経由でURLを名前解決できてアクセスできることを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/aabf675a-5e00-a8cf-8630-470675be489c.png)

### ⑨ HubのBastionからSpokeのVMへログイン

VNetがPeeringしていればHubにBastionをDeployすれば、SpokeのVNetへもHubのBastion経由でアクセスすることが可能。これはVNetがRegion跨ぎで構成されていても問題なく使える。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/7b295590-0ab8-ac65-c35a-06b453dc417b.png)

https://learn.microsoft.com/ja-jp/azure/bastion/vnet-peering

Bastionもう少し安くなればなぁ、、、

と思ったら開発用途向けのDeveloper SKUというのがあった！

https://onarimon.jp/entry/2024/06/07/182006

# VNet to VNet VPN

Peeringは簡単で安いけど、通信が暗号化されていないなどマイナス面もあるっちゃある。VNet PeeringはPrivate Endpoint経由で通信すればPrivate IPを利用できるし閉域化もできるのでそれで最低限の通信のセキュリティは満たされている気がするが。
更にセキュアにやりたい場合はコストも手間もかかるが、VPN Gatewayを利用したVNet to Vnet VPNが選択肢になる。

手順含めてまとまっていたので以下参照。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/654538/6a6b36c4-cbec-5812-0ce2-0d4a8770e229.png)

https://learn.microsoft.com/ja-jp/azure/vpn-gateway/vpn-gateway-howto-vnet-vnet-resource-manager-portal