仮想マシンにリモートアクセスするには、ホストPCとのブリッジ接続にしたり、TailscaleでVPNを構築する方法がありますが、NAT内で動作している仮想マシンもホストPCとは通信できるので、一時的に試すだけなら、ホストPCへのリモートアクセスを、仮想マシンへ転送するという手があります。
転送するルールを設定する
たとえば、下記の例では仮想マシンのIPアドレスが192.168.122.200の場合の例です。またポート番号も空いている番号なら何でもよいのですが、ここでは分かりやすいように13389番としています。
ホストの13389番をゲストの3389番へ転送
NATルールとFORWARDルールを追加します。
sudo iptables -t nat -A PREROUTING -p tcp --dport 13389 -j DNAT --to-destination 192.168.122.200:3389
sudo iptables -I FORWARD -m state --state NEW -m tcp -p tcp -d 192.168.122.200 --dport 3389 -j ACCEPT
これで、リモートデスクトップアプリなどでホストPC:13389へアクセスすれば、仮想マシンに接続出来るはずです。

設定を保存する
iptablesコマンドで実行した変更は、再起動すると消えてしまいます。一時的に試すだけなら、これが便利でしょう。もし、今後も永続的に設定を行うなら次のコマンドを実施します。
sudo netfilter-persistent save
インストールされていない場合は、下記コマンドでインストールします。途中で設定を保存するか確認の画面が表示されるので設定を保存します。
sudo apt install iptables-persistent -y
設定したルールの確認方法
まずは、ルールが正しく適用されているか確認します。iptables はテーブル(-t)ごとに管理されているため、NATとFORWARDの両方を確認する必要があります。
NATテーブルの確認(PREROUTING)
sudo iptables -t nat -L PREROUTING -n -v --line-numbers
FILTERテーブルの確認(FORWARD)
sudo iptables -L FORWARD -n -v --line-numbers
-n: IPアドレスやポートを名前解決せず数字で表示(速い)。-v: パケット数などの詳細を表示。--line-numbers: 重要。 削除時に使う「行番号」を表示します。
ルールの削除方法
削除には2つの方法があります。
方法1:行番号を指定して削除
確認コマンドで表示された行番号(num)を使って削除します。これが最も確実です。
NATルール(13389番ポート)を消す場合(例:行番号が1番だった時)
sudo iptables -t nat -D PREROUTING 1
FORWARDルールを消す場合(例:行番号が1番だった時)
sudo iptables -D FORWARD 1
方法2:コマンドラインで直接指定して削除
追加した時のコマンドの -A や -I を -D (Delete) に置き換える方法です。
sudo iptables -t nat -D PREROUTING -p tcp --dport 13389 -j DNAT --to-destination 192.168.122.200:3389
sudo iptables -D FORWARD -m state --state NEW -m tcp -p tcp -d 192.168.122.200 --dport 3389 -j ACCEPT
ホスト側(libvirt)からVMのIPアドレスを固定する
VMの中(ゲストOS)を触らずに、ホスト側の設定だけで完結させることも出来ます。
VMの「MACアドレス」を調べる
IPを固定するには、そのVM固有の識別番号(MACアドレス)が必要です。下記はVM名がubuntu25.10の場合の例です。
virsh dumpxml ubuntu25.10 | grep "mac address"
出力例:<mac address='52:54:00:ab:cd:ef'/> この 52:54:00:ab:cd:ef の部分をメモしてください。
ネットワーク設定を書き換える
libvirtのデフォルトネットワーク(通常は default)を編集して、特定のMACアドレスに対して特定のIPを割り当てる設定を追記します。
sudo virsh net-edit default
セクションの中に host 行を追加します。
<network> ... <ip address='192.168.122.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.2' end='192.168.122.254'/>
<host mac='52:54:00:ab:cd:ef' name='ubuntu25.10' ip='192.168.122.200'/>
</dhcp> </ip> </network>
mac: 最初に調べたものname: 識別用の名前(任意)ip: 固定したいIPアドレス(rangeの範囲内であること)
保存してエディタを閉じたら、ネットワークを再起動します。
sudo virsh net-destroy default
sudo virsh net-start default


