KVM のゲストOSをゲストポートへ誘導
〜 Linux のソースルーティングによるデフォルトルート設定 〜
2014-01-12 作成 福島
TOP > tips > sourcerouting
ゲートウェイが複数あり、デフォルトルートが指定されたネットワークはしばしば見受けますが、
ここでは仮想 OS に対する設定を同様に行います。

言葉で説明すると、説明するほうもされるほうもややこしいので、図解します。

赤い線: 通常に使用している通信経路
緑の線: ゲスト用通信経路

・Server2 は Linux の KVM によって構成しています。

・Guest1, Guest2 の通信経路は、KVM でゲスト OS を作成するときのデフォルトである NAT で構成しています。

・ほとんどの通信機器 (およびサーバー) の通信は GW1 を通り、Guest2 だけが GW2 を通ります。

・この構成の場合、Guest1 や Guest2 から、その先の Gateway である GW1, GW2 を指定することができないため、ホスト OS である Server2 で設定します。

・この時、ゲスト OS の Guest1, Guest2 は、両方とも PC1 から管理できるようにします。

0. ネットワークおよびサーバーの構成
Guest2 に対するソースルーティング以外は通常の構成なので、それぞれの機器やサーバーは、普通に設定してください。
1. ルール名の作成 (Server2 に作成)
$ su
# vi /etc/iproute2/rt_tables

#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep

100     gw2    # <- この行を追加
2. ソースルーティング用スクリプトの作成 (Server2 に作成)
# vi /etc/rc.d/init.d/source-routing
#! /bin/bash
#
# chkconfig: 345 11 89
# description: Alternate routing from source IP-address.

CWD=$(pwd)

case "$1" in
  start)
        ip rule add from 192.168.122.3 table gw2
        ip route add 192.168.1.0/24 dev eth0 table gw2
        ip route add default via 192.168.1.2 table gw2
        touch /var/lock/subsys/source-route
        ;;
  stop)
        ip rule del from 192.168.122.3 table gw2
        ip route del 192.168.1.0/24 dev eth0 table gw2
        ip route del default via 192.168.1.2 table gw2
        rm -f /var/lock/subsys/network
        ;;
  restart)
        cd "$CWD"
        $0 stop
        $0 start
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart}"
        exit 2
esac

exit 0
※ここでは、/etc/rc.d/init.d/network が S10network として起動するため、そのあとに起動されるよう、11 を指定しています。
(同様に K90network の前の数字として 89 を指定しています)

通常のルーティングでは /etc/sysconfig/network-script/ にルールを記述しますが、
今回の設定でそこに記述するとうまくいきません。
3. 設定の有効化
# /sbin/chkconfig --add source-routing
# /etc/rc.d/init.d/source-routing start
  (あるいは、shutdown -r now)