これはおそらく非常に基本的なものですが、今はこの問題に閉じ込められています。 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
その後、ホストのポートに接続でき、パケットは仮想マシンにリダイレクトされます。これは、仮想マシンがホストからのパケットを表示するために機能します(マスカレーディングのためにリモートシステムからのパケットではありません)。