📘
Public IP アドレスを VNet の中で使いたい
勝手グローバルを許すな
というのもそれはそうなんですが、そうではなくまっとうに VNet の中で Public IP (というか global IP) アドレスを使いたかったとしましょう。
普通に VNet のアドレス空間として global IP アドレスを書いて、それを subnet に割り当てられればそれはそれで動くと思います。
が、今回は /32 だけ割り当てたいということで少し工夫していきます。
参考実装
参考実装はこちらです。
構成図
構成図はこちらです。
参考実装では VNet は 4 つあるため、若干内容は異なりますが、大筋変わっていないのでお許しください。
- Hub-spoke VNet と branch VNet
- 適当な ExpressRoute circuit
- Hub と Branch を ExpressRoute Gateway を使って接続
- BGP で経路を入れるための ARS (Azure Route Server)
- Peer として spoke にある NVA VM を指定しておきます
- NVA VM には FRRouting を入れます
構成のポイント
は GitHub 側にも書いてあるので冗長にはなりますが、こちらにも書いておきます。
- 目的の IP アドレス (ここでは 1.2.3.4/32) を
eth0
の secondary IP として付与する - その IP アドレスを FRRouting を使って BGP で ARS に経路広報する
- NVA VM の NIC において、IP forwarding の設定を有効化しておく
これらの設定をすることで、VNet の中で /32 の経路が伝搬していきます。
Hub VM からも、ExpressRoute で接続された Branch VM からも 1.2.3.4/32 宛ての通信が可能になります。
結果
GitHub の方からそのままコピペしたもの。
まぁ、できたね、というだけなので。。
ikko@vm-hub200:~$ sudo ./ethr -c 1.2.3.4 -p tcp -port 22 -t tr
Ethr: Comprehensive Network Performance Measurement Tool (Version: v1.0.0)
Maintainer: Pankaj Garg (ipankajg @ LinkedIn | GitHub | Gmail | Twitter)
Using destination: 1.2.3.4, ip: 1.2.3.4, port: 22
Tracing route to 1.2.3.4 over 30 hops:
1.|--???
2.|--1.2.3.4 [] 4.999ms
Ethr done, measurement complete.
ikko@vm-hub200:~$ ping -c 3 1.2.3.4
PING 1.2.3.4 (1.2.3.4) 56(84) bytes of data.
64 bytes from 1.2.3.4: icmp_seq=1 ttl=63 time=5.25 ms
64 bytes from 1.2.3.4: icmp_seq=2 ttl=63 time=5.35 ms
64 bytes from 1.2.3.4: icmp_seq=3 ttl=63 time=5.28 ms
--- 1.2.3.4 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 5.245/5.291/5.351/0.044 ms
Discussion