開発環境において、とある製品のサービスをホストしているサーバに、そのサーバが属するセグメントに到達できない別のセグメント上のクライアント(アプリ)からどうにかアクセスできるようにしたい、という難題を振られたときに捻り出した方法のメモ。
困っていた状況
クライアント --×-> サーバA
クライアント --○-> サーバB
サーバB --○-> サーバA
サービスをホストしているサーバAのIPアドレス(既知)は、別に立ててある認証サーバから認証後に通知される仕組みとなっていて、クライアント(アプリ)に通知されるIPアドレスをサーバBに偽装するのは困難だったため、サーバBからサーバAへポートフォワードする方式だけでは対応できず。。。
そこで、クライアントにVMを立てて、ポートフォワード → NAT → ポートフォワードと組み合わせたところ、無事サービスにアクセスできるようになった。
うまくいった方法
クライアント(仮想NIC:サーバAと同じセグメントのIPアドレス)
----> クライアント内VM(仮想NIC1:サーバAのIPアドレス)
----> (サーバBへポートフォワード)
----> クライアント内VM(仮想NIC2:サーバBと同じセグメントのIPアドレス)
----> (NAT)
----> クライアント(物理NIC)
----> サーバB
----> (サーバAへポートフォワード)
----> サーバA
P.S. トイレの神様ありがとうございます。