VPNサーバーでトランジット通信に挑戦!!

もっと自由にネットワークを組みたい!! そうです。そうなんです。Azureのシステムルーターは自由に設定できないし、トランジット通信(マルチホップ)環境も構築できません。

今回は、Azure 上の各仮想ネットワーク上にVPNサーバーを構築し、拠点間通信が可能なハブ&スポーク構成に挑戦したいと思います。

この構成が組めるとルーティングを完全にコントロールできるので、トランジット通信どころかマルチホップ構成が組め、格段にネットワーク設計の自由度があがるでしょう!!

【今回の構成】

各仮想ネットワークにVPNサーバーを配置し、それぞれVPNを張ります。VNet01の仮想マシンからVNet03の仮想マシンに通信ができれば完成です。
VNetピアリングだと、VNet02を飛び越えるような通信ができません。


それでは、VPNサーバー環境を構築して行きましょう!!

全体の流れ

Step1:Subnet-1をサーバー設置エリアとし、PIP無しの仮想マシンを作成します。
Step2:Subnet-2に、VPNサーバーとなる仮想マシンを作成します。
Step3:VPNサーバーのNICにて[IP転送]を有効にします。
Step4:Subnet-1に、デフォルトルートをVPNサーバーに向けたUDRを作成します。
※このStep1~4をVNet01,VNet02,VNet03で実施して下さい。

基本的な手順は「Azure上にルーターを構築する!!」と同様となりますので、今回は、Step2のVPNサーバー構築に絞りたいと思います。

Step2:Subnet-2に、VPNサーバーとなる仮想マシンを作成します。

※VNet02のVPNサーバーをハブ側(センター)ルーターとして構築していきます。
※ルーターサーバーの「PIP」を「静的」にします。

[Libreswanのインストール]
# yum install libreswan -y
# systemctl start ipsec
# systemctl enable ipsec

[鍵の生成]
# ipsec newhostkey –configdir /etc/ipsec.d \ –output /etc/ipsec.d/www.cloudou.net.secrets Generated RSA key pair using the NSS database
# ipsec showhostkey –left ←上記で作成した鍵を表示

leftrsasigkey=0sAQOsIwmzm4txMvi9…YPUE=
※全VPNサーバーで実行し、鍵をコピーしておいて下さい。

[VPN設定] ※各VPNサーバーにより内容が異なりますので、それぞれ設定して下さい。
※以下、VNet02のVPNサーバー設定
# vi /etc/ipsec.d/ipsec.conf
conn VPN01 ←VNet01~VNet02間のVPNを定義
 left=10.11.0.5 ←VNet02_VPNサーバーのプライベートIP
 leftid=@VPN02
 leftsubnet=0.0.0.0/0 ←VNet02をデフォルトルートとする
 leftrsasigkey=0sAQOsIwmzm4txMvi…YPUE= ←VNet02_VPNサーバーの鍵をペースト
 #
 right=52.175.146.179 ←VNet01_VPNサーバーのパブリックIP
 rightid=@VPN01
 rightsubnet=10.10.0.0/16 ←VNet01のアドレス空間
 rightrsasigkey=0sAQOyo2h61lHbM4…OakOLz ←VNet01_VPNサーバーの鍵をペースト
 #
 auto=start
 authby=rsasig

conn VPN03 ←VNet02~VNet03間のVPNを定義
 left=10.11.0.5 ←VNet02_VPNサーバーのプライベートIP
 leftid=@VPN02
 leftsubnet=0.0.0.0/0 ←VNet02をデフォルトルートとする
 lleftrsasigkey=0sAQOsIwmzm4txMvi…YPUE= ←VNet02_VPNサーバーの鍵をペースト
 #
 right=52.175.155.223 ←VNet03_VPNサーバーのパブリックIP
 rightid=@VPN03
 rightsubnet=10.12.0.0/16 ←VNet03のアドレス空間
 rightrsasigkey=0sAQOrgp6NXC9…t+7zlLazc= ←VNet03_VPNサーバーの鍵をペースト
 #
 auto=start
 authby=rsasig

※以下、VNet01のVPNサーバー設定
vi /etc/ipsec.d/ipsec.conf
conn VPN01 ←VNet01~VNet02間のVPNを定義
 left=40.74.133.4 ←VNet02_VPNサーバーのパブリックIP
 leftid=@VPN02
 leftsubnet=0.0.0.0/0 ←VNet02をデフォルトルートとする
 leftrsasigkey=0sAQOsIwmzm4txMvi…YPUE= ←VNet02_VPNサーバーの鍵をペースト
 #
 right=10.10.1.5 ←VNet01_VPNサーバーのプライベートIP
 rightid=@VPN01
 rightsubnet=10.10.0.0/16 ←VNet01のアドレス空間
 rightrsasigkey=0sAQOyo2h61lHbM4…OakOLz ←VNet01_VPNサーバーの鍵をペースト
 #
 auto=start
 authby=rsasig

conn passthrough
 left=40.74.133.4 ←VNet02_VPNサーバーのパブリックIP
 right=0.0.0.0
 leftsubnet=10.10.0.0/16 ←VNet01のアドレス空間
 rightsubnet=10.10.0.0/16 ←VNet01のアドレス空間
 authby=never
 type=passthrough
 auto=route

※以下、VNet03のVPNサーバー設定
vi /etc/ipsec.d/ipsec.conf
conn VPN03 ←VNet02~VNet03間のVPNを定義
 left=40.74.133.4 ←VNet02_VPNサーバーのパブリックIP
 leftid=@VPN02
 leftsubnet=0.0.0.0/0 ←VNet02をデフォルトルートとする
 leftrsasigkey=0sAQOsIwmzm4txMvi…YPUE= ←VNet02_VPNサーバーの鍵をペースト
 #
 right=10.12.0.6 ←VNet03_VPNサーバーのプライベートIP
 rightid=@VPN03
 rightsubnet=10.12.0.0/16 ←VNet03のアドレス空間
 rightrsasigkey=0sAQOyo2h61lHbM4…OakOLz ←VNet03_VPNサーバーの鍵をペースト
 #
 auto=start
 authby=rsasig

conn passthrough
 left=40.74.133.4 ←VNet02_VPNサーバーのパブリックIP
 right=0.0.0.0
 leftsubnet=10.12.0.0/16 ←VNet03のアドレス空間
 rightsubnet=10.12.0.0/16 ←VNet03のアドレス空間
 authby=never
 type=passthrough
 auto=route

[VPN設定の読み込み] ※全VPNサーバーにて実施
# systemctl restart ipsec

[VPN実行] ※VNet02_VPNサーバーにて実施
# ipsec auto –add VPN01
# ipsec auto –add VPN03

[IP Forwardを有効] ※全VPNサーバーにて実施
# vi /etc/sysctl.conf
 net.ipv4.ip_forward = 1 ←この一行を追記
# service network restart

以上で、VPNサーバーでの設定は終了です!!
続けてStep3,4を設定すると、拠点間通信が可能なハブ&スポーク構成の出来上がりです!


今回は、Azure と言うより、Libreswanの設定がメインになってしまいました。
自由度で言うと最強ですが、構築に手間がかかるのとVPNサーバーの運用が大変そうです。

VNetピアリング環境限定になりますが、拠点間通信が可能なハブ&スポーク構成が可能です。しかも、簡単に作成できます。