ホストPCから転送して仮想マシンにリモートアクセス

仮想マシンにリモートアクセスするには、ホストPCとのブリッジ接続にしたり、TailscaleでVPNを構築する方法がありますが、NAT内で動作している仮想マシンもホストPCとは通信できるので、一時的に試すだけなら、ホストPCへのリモートアクセスを、仮想マシンへ転送するという手があります。

転送するルールを設定する

たとえば、下記の例では仮想マシンのIPアドレスが192.168.122.214の場合の例です。またポート番号も空いている番号なら何でもよいのですが、ここでは分かりやすいように13389番としています。

ホストの13389番をゲストの3389番へ転送

NATルールとFORWARDルールを追加します。

sudo iptables -t nat -A PREROUTING -p tcp --dport 13389 -j DNAT --to-destination 192.168.122.214:3389
sudo iptables -I FORWARD -m state --state NEW -m tcp -p tcp -d 192.168.122.214 --dport 3389 -j ACCEPT

これで、リモートデスクトップアプリなどでホストPC:13389へアクセスすれば、仮想マシンに接続出来るはずです。

設定を保存する

iptablesコマンドで実行した変更は、再起動すると消えてしまいます。一時的に試すだけなら、これが便利でしょう。もし、今後も永続的に設定を行うなら次のコマンドを実施します。

sudo netfilter-persistent save

設定したルールの確認方法

まずは、ルールが正しく適用されているか確認します。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.214:3389
sudo iptables -D FORWARD -m state --state NEW -m tcp -p tcp -d 192.168.122.214 --dport 3389 -j ACCEPT