リモート仮想マシンのソケットに接続する

リモート仮想マシンのソケットに接続する

これはおそらく非常に基本的なものですが、今はこの問題に閉じ込められています。 KVMにソケットサーバーがある仮想マシンがあります。 localhostを介して、つまりホストのクライアントを使用してこのコンピュータに接続できますが、私が望むのはリモートで接続することです。リモートとは別のコンピュータを意味します。

これでこのコンピュータにpingを送信することもできません。このコンピュータにデフォルトで割り当てられているIPはです192.168.122.122。私のホストが大学ネットワークに接続すると、そのIPは次のよ​​うになります10.5.135.*。私のアプリケーションにリモートで接続する方法はありますか?構成を大幅に変更する必要があるため、VMのIPを変更する必要がなければ良いと思います。必要に応じて、静的IPを使用してホットスポットを作成することになります。

この問題の解決にご協力いただきありがとうございます。

ベストアンサー1

特定のTCPポートとUDPポートのホストでポート転送を設定できます。しかし、ICMPを用いたDNATは不可能に見える。

代替方法は、リモートシステムからホストまで暗号化された(SSH、OpenVPN、IPsec)トンネルまたは一般トンネルを設定し、リモートシステムからこのトンネルを介してVMアドレスへのルートを確立することです。

SSHポート転送

host_ip='10.5.135.42'
vm_ip='192.168.122.122'
vm_port=42
# on the remote system
ssh -L "127.0.0.1:1234:${vm_ip}:${vm_port}" user@$host_ip

このSSH接続が有効になっている間は、リモートシステムのポート1234に接続し、仮想マシンから目的のポートに接続できます。

telnet localhost 1234

DNATとiptables

ホストマシンから:

vm_ip='192.168.122.122'
vm_port=42
iptables -t nat -A PREROUTING -p tcp --dport "$vm_port" -j DNAT --to-destination "$vm_ip"
iptables -t nat -A POSTROUTING -p tcp -d "$vm_ip" --dport "$vm_port" -j MASQUERADE

その後、ホストのポートに接続でき、パケットは仮想マシンにリダイレクトされます。これは、仮想マシンがホストからのパケットを表示するために機能します(マスカレーディングのためにリモートシステムからのパケットではありません)。

おすすめ記事