Hyper-Vで外部のネットワークに接続する場合は、仮想ネットワークで「外部」を選択することで接続できます。一方、ゲストOSとゲストOS(とホストOS)だけのネットワークを別セグメントに接続しておきたいなんてときは、仮想ネットワークで「内部」を選択します。ただ、仮想ネットワークで「内部」を選択すると、そのままの設定ではゲストOSが外部ネットワークに接続することができません。そこで、Windows Serverにあるルーティング機能を使用します。
「ルーティングとリモートアクセス」役割サービスでルーティング
ルーティング機能を有効にするためには、「ネットワークポリシーとアクセスサービス」役割とその中の「ルーティングとリモートアクセス」役割サービスをホストOSに追加します。仮想ネットワークで「内部」を選択するとHyper-Vの仮想ネットワークインターフェースが登録されているので、外部に繋がるインターフェースと内部仮想ネットワークインターフェースに対してIPルーティングを構成することで外部とつなげることが可能です。
※ 「ルーティングとリモートアクセス」の構成を有効化した時点でホストOSはゲートウェイとして機能します。
WANに繋がっているルータによってはIPルーティングでは問題が…
うちの環境ではIP電話などを使用している関係上、ルータはNTTから借りているものを使用しています(ブリッジモードで動作しているそこそこ高速なルータも中間に存在しているけど)。このルータが曲者で、どうもルータ自身が管理しているセグメント以外からの要求は外に出さないような動きをしています。
要するに、IPルーティングだとゲストOSが存在するセグメントからは外に出してくれない。これは困ったということで、ルーティングをIPルーティングからNATへ変更。NATにすれば、ルータからはホストOSからの要求としか見えないので、外部への接続は無事成功しました。
ただ、IPルーティングからNATへ変更したことで、直接ルータに繋がっている端末からゲストOSへ、リモートデスクトップ接続ができなくなってしまいました。
「RD ゲートウェイ」経由でリモートデスクトップ接続
ゲストOSは評価環境として利用したりもするので、リモートデスクトップが使用できないと非常に不便でした。そこで、「ターミナルサービス」役割の「RD ゲートウェイ」役割サービスをゲストOSの一つに導入し、ホストOSへのSSL接続はRD ゲートウェイを導入したサーバーへポートフォワードすることにしました(ポートフォワードの設定はホストOSの「ルーティングとリモートアクセス」より行うことができます)。
これでようやくゲストOSにリモートデスクトップ接続することが可能になりました。
色々と設定する必要があって面倒だなーって感じがしますが、「サーバーマネージャ」がWindows Server 2008になってから使いやすくなったこともあり、思っていたよりも楽に作業ができました。ルーティング機能がRRASに限定されてしまいますが、仮想ネットワーク間のルーティングも制御することができるので、ちょっとしたネットワークトポロジの検証にも使用できます。