NATモードのKVM(+libvirt)にて、ゲストOSへSSHログインする
良く忘れるので、メモ。
KVM(+libvirt)をNATモードにて使用する際に、ゲストOSを外部公開する(ポートマッピング)する為の設定。
・環境
ホストOS: CentOS5.8
仮想NW : 192.168.122.0/24
ゲストIP: 192.168.122.101
・概要
ホストの10022/tcp宛通信をゲストOSの22/tcpへマッピング
・現在のiptables設定確認
# iptables -nvL --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 2 0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 3 0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67 4 0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67 5 46 7646 RH-Firewall-1-INPUT all -- * * 0.0.0.0/0 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all -- * virbr0 0.0.0.0/0 192.168.122.0/24 state RELATED,ESTABLISHED 2 0 0 ACCEPT all -- virbr0 * 192.168.122.0/24 0.0.0.0/0 3 0 0 ACCEPT all -- virbr0 virbr0 0.0.0.0/0 0.0.0.0/0 4 0 0 REJECT all -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 5 0 0 REJECT all -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 6 0 0 RH-Firewall-1-INPUT all -- * * 0.0.0.0/0 0.0.0.0/0 Chain OUTPUT (policy ACCEPT 47 packets, 8284 bytes) num pkts bytes target prot opt in out source destination Chain RH-Firewall-1-INPUT (2 references) num pkts bytes target prot opt in out source destination 1 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmp type 255 3 0 0 ACCEPT esp -- * * 0.0.0.0/0 0.0.0.0/0 4 0 0 ACCEPT ah -- * * 0.0.0.0/0 0.0.0.0/0 5 0 0 ACCEPT udp -- * * 0.0.0.0/0 224.0.0.251 udp dpt:5353 6 0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:631 7 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:631 8 39 2856 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 9 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:443 10 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80 11 7 4790 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
・仮想ブリッジ(virbr0)<->外部NW間のFORWARD許可(Chain FORWARDのルール1番を上書き)(以下一行)
# iptables -R FORWARD 1 -o virbr0 -s 0.0.0.0/0 -d 192.168.122.0/255.255.255.0 -j ACCEPT
・10022/tcpへの新規接続許可(Chain RH-Firewall-1-INPUTのルール11番に挿入)(以下一行)
# iptables -I RH-Firewall-1-INPUT 11 -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT
・10022/tcp宛通信を、ゲストOS 22/tcpへポートマッピング(新規追加)(以下一行)
# iptables -t nat -A PREROUTING -p tcp -m tcp --dport 10022 -j DNAT --to 192.168.122.101:22
・確認
# iptables -nvL --line-numbers # iptables -nvL -t nat --line-numbers
設定永続化の仕組みは適宜作成。
ただしlibvirtdの再起動時、FORWARD,PREROUTING,POSTROUTING Chain等が毎回上書きされるので一工夫が必要。
(今回は、とりあえずrc.localに書きこむ事とした)
以上