ASDK上に立てた仮想マシンへのアクセス方式として、公式にドキュメントに記載されているのは以下のやり方がある。
- ASDKホストマシンにリモートデスクトップして、その上でSSH/RDP接続する。
ただし、ASDKホストマシンはWindows Serverベースのため、標準だと最大2セッションしか接続できないので、多数のユーザから同時にはアクセス出来ない。 - Azure Stack PowershellおよびAzure Stack ToolsをセットアップしたPCから、ASDKホストマシンにVPN接続する。
この場合は、リモートデスクトップの2セッション接続制限には引っかからないが、接続元となるPCに上記のツールをセットアップしてVPNを設定する必要がある。(ASDKをデプロイする度にこの設定をユーザにやり直してもらう)
その他、Azureと同様にVPN GatewayをセットアップしてP2S VPNを構成するとかは当然出来る。
ただ、いずれも、オンプレミスっぽい雰囲気でASDK上の仮想マシンを使いたいだけのユーザからするとちょっと……、ハードルが高い。
そのため、お手軽にオンプレミスっぽい感じで接続できるようにASDKホストマシン上でNATを設定して、さもその辺に仮想マシンが居るように見せかけることにした。
ASDKホストマシンで実施する手順は以下の通り。
- NATオブジェクトを作成する
- NATオブジェクトに、接続用IPアドレスを追加する
- NATルールを作成し、仮想マシンのIPアドレス&Port番号と、接続用IPアドレス&Port番号のマッピングを設定する
NATオブジェクトを作成する
デフォルトで、ASDKとBGPルータの間でVPN接続するための”BGPNAT”という名前のNATオブジェクトが作成されているが、これは華麗に無視して別のNATオブジェクトを作成するのが吉。
New-NetNat -Name global -ExternalIPInterfaceAddressPrefix 192.168.1.0/24
NATオブジェクトに、接続用IPアドレスを追加する
ASDKホストマシンに割り当てられているIPアドレスとは別に、NAT専用のIPアドレスを設定するのが分かりやすいはず。もしASDKが接続されているセグメントに余裕があるなら、仮想マシンと1対1で設定してしまっても良いだろう。
Add-NetNatExternalAddress -NatName global -IPAddress 192.168.1.6 -PortStart 0 -PortEnd 65535
NATルールを作成し、仮想マシンのIPアドレス&Port番号と、接続用IPアドレス&Port番号のマッピングを設定する
Add-NetNatStaticMapping -NatName global -ExternalIPAddress 192.168.1.6 -Protocol TCP -ExternalPort 22 -InternalIPAddress 192.168.102.32 -InternalPort 22
後は、NATルールを作成するだけ。
で、繋いでみると、繋がる!!!
(ちなみにPingに応答しているのはASDKホストマシンのほう。NATルールにないのでASDKホストマシン側に着信している)
「ASDK上の仮想マシンに直接アクセスするためにNAT設定を追加する」への2件の返信
https://docs.microsoft.com/ja-jp/azure-stack/operator/azure-stack-create-vpn-connection-one-node?view=azs-2002
↑
丁寧なやり方としては、上記のURLに記載されているようなAzS-BGPNAT01マシン上でNAT設定を追加することのようです。。。
でもAzS-BGPNAT01マシン無いよな、と思って調べたら今はASDKホストマシンがRRASの機能含めて持っているとのことで、このブログの書き方であってるみたい。
https://github.com/MicrosoftDocs/azure-stack-docs/pull/350/commits/d037b9e475087958d9aabe6cebd31ebaae87950c