SSHトンネリングに関する備忘録

やりたかったこと

実験サーバ上で動作するQEMU仮想マシンの画面を、作業用PCのVNC Viewerで表示する。

作業環境

実験サーバ
作業PC

試してみたこと

  • QEMU起動時のオプションに-vnc 192.168.1.20:0を指定してみた
    仮想マシンは起動せず。そもそもVNCサーバのIPアドレスは指定できないっぽい?(要調査)

  • 実験サーバにVNCで接続し、そこでVNCクライアントを起動して127.0.0.1へ接続してみた
    → 一応これでも接続は可能だが、二重に接続する手間が煩雑。

解決策

SSHを利用し、作業用PCのループバックデバイス上のポートから実験サーバのVNCポートに向けてトンネリングを行った。
以下のように-L オプションを指定することでポートフォワーディングを行うことが可能。

$ ssh -L 5901:127.0.0.1:5901 192.168.1.20


このように、PC側のループバックデバイスの5901ポートを叩くことで、サーバを経由して(サーバ側の)127.0.0.1:5901へ接続することができるようになる。

…のだが、ここを理解するのに時間がかかった。
ssh -L (ローカル側ポート):(宛先アドレス):(宛先ポート) (SSH接続先のアドレス)と指定することで、「SSH接続先のサーバを経由して」「-Lオプションで指定した宛先へ」接続することが可能。
そのため、宛先アドレスを127.0.0.1とすることで「サーバを経由して127.0.0.1へ接続する」すなわち、サーバのループバックデバイスへ転送することが可能となる。

ともあれ、以上のようにトンネリングを行ったあとでPC上のVNC Viewerから127.0.0.1:5901へ接続することで、本来PC側からは見えないはずである実験サーバ上のVNCサーバに接続することができるようになる。