前書き
在宅勤務が増えていますが、私が勤めている会社も、在宅勤務を順次、導入しつつあります。私も許可を得て、自宅で作業を進めるようになったのですが、会社のネットワークにSSL-VPNで接続すると、ローカルに立てていた仮想環境に繋がらなくなるという現象に見舞われました。
解決方法は、考えてみれば簡単な対処だったのですが、この不具合に見舞われたときは、さっさとバグをリリースしなければならない時だったため、あれこれと設定に悩んで、時間がかかってしまいました。今後のために、備忘録がわりに残しておきます。
環境
- ホストOS:Windows 10 pro
- ゲストOS:CentOS 7
- 仮想環境構築:Virtulbox, およびvagrant
システムの検証サーバ自体は、別途ありますが、いちいちデプロイしての動作確認が面倒だったので、仮想環境を立てて、そこでPostgreSQLやらnginxやらを稼働させて、個人用の環境を作っていました。
そして、ホストからゲストのCentOSに繋げる時には、Vagrantfile
に記載していたprivate_network
のIPに繋げる形で、接続していました。
config.vm.network "private_network", ip: "192.168.33.21"
例えば、ホストのpgAdmin
から、ゲストOSで起動しているPostgreSQLに繋げる時は、以下のようにIPアドレスを直接、指定していたわけです。
会社で開発をしていた時は、これで問題なく動いていました。
発生した事象
在宅勤務のため、SSL-VPNを有効にして、会社のネットワークに繋げた場合、このローカルに繋がらなくなりました。今までVPNを利用した事があまり無かったので知らなかったのですが、VPNではプライベートIPアドレスが使えなくなるらしいです。
VPNの製品や設定方法によっては、繋がるようにもできるようですが、うちの会社の設定では、許可されていませんでした。
対処法
最初はインフラ運用をしている部署に連絡して、VPNの設定を変更してもらおうかとも思いましたが、冷静になって良く考えるとpgAdminにはアクセスできていることに気づきました。pgAdminは、起動後にhttp://127.0.0.1:[ポート番号]/browser/
でアクセスするわけですが、そのURLは機能していました。あと、社内チャットで相談すると、ローカルでdockerを入れて、WEBサーバをローカルに立ててる人が「localhost:8000
などは繋がってます」とも情報を貰いました。
つまり、127.0.0.1
(localhost
)なら、SSL-VPNを稼働した後でも繋がっている訳です。となると「仮想環境にもlocalhost
で繋げるようにすれば、この現象は解消するのでは」と考えました。
ということで、さくっとforwarded_port
の設定をしました。Vagrantは、こうやってVagrantfile
に追記するだけで、簡単にネットワーク設定が変更できて便利ですね。仮想環境中のPostgreSQLのポート番号5432
に、ホスト側の15432
ポートで繋げられるように設定しました。
config.vm.network "forwarded_port", guest: 5432, host: 15432
設定を変更したら、一度、vagrant reload
を実行して、Vagrantを再起動します。
こうして再起動後、pgAdminの「ホスト名/アドレス」をlocalhost
にして、「ポート番号」を15432
に設定してやると、正常に繋げられるようになりました。
解決
上に載せたのはPostgreSQLのケースですが、WEBサーバなどでもポートフォワードの設定をすれば、繋がりました。
正直、仮想環境のポートフォワードは、ゲストとホストのポートの繋がりを把握する必要があるので、あまり好きではないのですが、一旦はこれで運用してみます。