仕事をしている傍ら、開発環境であるVMwareの仮想マシン(以降VM)にてDjangoサーバーを立ててrunserver実行下にて作っているWebページのデバッグやら開発やらをやっていた。
このホストマシンが社内ネットワークにつながっており、持ち出すことができないのだが在宅で仕事をしようとしたときにわざわざリモートデスクトップをつかってホストマシンにログインしたうえでVMを触るというのはいかんせん作業効率が悪いなと思い、直接VMのサーバーにhttpで接続出来たら回線速度も圧迫せず快適にデバッグできるなと思いいろいろ調べてみたらたくさん記事が出てきたのでその備忘録。
やりたいこと
- ・VM上のサーバーにホストマシン以外のネットワークから接続する。
やること
- ・VMのポートフォワーディング
- ・ホストのポート開放
ポート開放したいマシンの環境
- OS: Windows 10 Home 64bit
- VMwareのバージョン:15
- VMwareのネットワーク設定:NAT
- Django(VM上)にて使用するポート:8090
- ホストの開放するポート: 8080
念のために、簡易サーバー起動のコマンド(VM上で実行しております)
python manage.py runserver 0.0.0.0:8090
自分の場合はPyCharmで開発していたので、起動用のコマンドに上の命令を指定してF5だったり再生マークをぽちっと押して実行している
VMのポートフォワーディング手順
手順
・vmnetnat.confの中身を書き換える
以上。
基本的にはめちゃくちゃ簡単なのだが、自分の場合は設定ファイルであるvmnetnat.confを見つけるのに手間がかかった。
参考ページと違うのが設定ファイルの場所だが、これは自分がインストールの時に指定したディレクトリのせいなのだろうか、、、(記憶があいまい)
私の場合はC:\ProgramData\VMware\vmnetnat.conf の中にある[incomingtcp]の下に
8080 = 192.168.xxx.xxx:8090
のように書くことで、ホスト上のIPアドレスの8080番ポートにきたアクセスをVMのIPアドレス:8090番ポートに静的マスカレード(ポート変換)してアクセスできるようになった。
xxx.xxxの部分は実際にVMにどのIPが割り振られているかで変わるので、IPアドレスを調べてから入力する。
実際の中身はこんな感じ(私の場合)
[incomingtcp]
8080 = 192.168.111.23:8090
!!注意点!!
[incomingtcp]
と似ている[incomingudp]
という設定項目があるので気を付けてください。UDPではありません、TCPです
ホストのポート番号 = VMのアドレス:VMの解放済みポート
という設定になっています。ご自身の設定に合わせていろいろ変えてみてください。
設定を書き込んで保存したら、サービス一覧よりVMware NAT Service を再起動する(※地味に重要)
サービス一覧を表示する方法は、Windows+R をおして[ファイル名を指定して実行]をひらき、
services.msc
と入力して開いてあげることができる。(Windowsのメニューから”サービス”を探して起動してもOK)
ホストマシンのポート開放
次に、ホストマシンのポートを外部に公開する必要がある。
ポートを開放する設定はWindowsのファイアウォール設定にて行う。
コントロールパネル>システムとセキュリティ>Windows Defender ファイアウォールより[詳細設定]を開きます
[受信の規則] > [新しい規則…]にて設定を追加する
今回の場合、8080ポートを開放するので、次のように設定する
これで、ホストマシン側のポート開放も完了。
送信の規則は不要です。
ルーターやゲートウェイのファイアウォールに引っかからなければこれで問題なく外部からVMサーバーに接続できるはず。
接続するときは、ブラウザなどから
https://[ホストマシンのIPアドレス]:[開放したポート]
のような形でアドレスを指定してあげればいいだろう。
今回の場合だとホストマシンのアドレスが192.168.12.56だとすると
https://192.168.12.56:8080
となる
※注意
指定するアドレスはホストマシンのアドレスです
うまくいかないときはもう一度設定を見直してみましょう。それでも無理な場合はゲートウェイなどではじかれていると思います。pingなどで確認してみましょう。
コメント
初めて知った!ありがとうー