KVMでネットワーク環境をBridgeからNATに戻す
ネットワーク構成の都合で、KVMのネットワーク環境をBridgeからNATに戻すことに(外部のネットワーク環境(セグメント等)が変わっても、KVM上で動作させている仮想マシン上のIPアドレスを変更しなくても済むようにしたかった)。
もちろん、その仮想マシンにアクセスしていた端末側は、アクセスするIPアドレスの変更が必要となりますが、まぁ、ネットワーク環境の変更が必要になった時点で、どのみち変更が必要になるので、そのあたりは許容範囲。
defaultのネットワークを復活させる
Bridgeにする際に、KVMのNAT用インタフェースを停止してしまっているので、それを復活させる必要があります。
# virsh net-start default
# virsh net-autostart default
開始するのに合わせて、自動起動の設定も行っておきます。
なお、仮想マシンのIPアドレスのセグメントを変更する場合は、 /var/lib/libvirt/network/default.xml および /etc/libvirt/qemu/networks/default.xml ファイルを編集します(おそらく、どちらかのファイルの設定を変更すると他方に設定が反映されると思うのですが、そこまで確認出来なかったので両方編集)。
仮想マシン側でDHCPサーバーを使用しない(全て固定IPアドレスを割り当てる)場合は、dhcp要素およびその内部のrange要素を削除。セグメントなどを変更する場合は、 <ip address="192.168.101.1" netmask="255.255.255.0"> のように修正します。
ゲストOSの定義を編集
/etc/libvirt/qemu ディレクトリ内にあるゲストOSに定義ファイルを編集します。
<interface type='bridge'>
<mac address='52:54:00:e5:ea:5a'/>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
のように定義されている部分を書き換えます。
<interface type='network'>
<mac address='52:54:00:e5:ea:5a'/>
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
編集内容を反映しておきます。
# virsh define (guest-name)
Bridge用の定義を元に戻す
/etc/sysconfig/network-scripts/ifcfg-br0 を削除(あるいは別のフォルダに待避)し、 /etc/sysconfig/network-scripts/ifcfg-eth0 の内容を修正(bridgeの設定を削除し、適切なIPアドレスを付与)。
あわせて、以下のような感じで仮想マシンに紐付けるIPアドレスを定義します。
IPADDR2="192.168.11.201"
NETMASK2="255.255.255.0"
GATEWAY2="192.168.11.254"
複数のNAT変換を定義する場合は、IPADDR3、IPADDR4 のように順番に定義していけばOKです。
NATの設定を行う
/etc/sysctl.conf を編集してIP転送を有効にします。
net.ipv4.ip_forward = 1
iptablesの設定を行い、IPアドレスの紐付けを行います。
# iptables -F
# iptables -F -t nat
# iptables -A INPUT -p all -j ACCEPT
# iptables -A FORWARD -p all -d 192.168.101.0/24 -j ACCEPT
# iptables -A FORWARD -p all -s 192.168.101.0/24 -j ACCEPT
# iptables -t nat -A POSTROUTING -s 192.168.101.221 -j SNAT --to 192.168.11.201
# iptables -t nat -A PREROUTING -d 192.168.11.201 -p tcp -j DNAT --to 192.168.101.221
# iptables -t nat -A PREROUTING -d 192.168.11.201 -p icmp -j DNAT --to 192.168.101.221
# /etc/rc.d/init.d/iptables save
再起動
設定諸々を反映させるため、ホストOSの再起動を行います。
なお、再起動後、iptablesの再起動を行わないと、外部からのアクセスに失敗してしまうことがあるような・・・?(滅多に再起動しないので、そのまま放置してしまっていますが)
その他
仮想マシン側のiptablesなどで、接続を許可するIPアドレスを制限している場合は、その部分を設定変更する必要があります(pg_hba.conf(PostgreSQLを使用している場合)など)。
「Linux」カテゴリの記事
- KVMでネットワークをNATにしている場合(2013.01.09)
- snmptrapdでtraphandleが反応しない(2012.10.18)
- SSLInsecureRenegotiation(2012.10.08)
- ntlmaps(2012.10.06)
- ReadyNAS NV+ v2 で Subversion(2012.09.30)
The comments to this entry are closed.
Comments