Citrix XenServer上でプライベートネットワーク構築

背景(読まなくてOK)

 i7 12GBメモリのマシンにCitrix XenServerを入れ,「これで仮想マシン使い放題!」と思ったのもつかの間.
 そのまま仮想マシンを作っても,ブリッジ接続にしかならず,IPが枯渇してしまう.IPv4の枯渇も問題だけど,うちのネットワークは既に*.254がDHCPから割り振られてしまう状態.絶賛枯渇中です.

 で,XenCenterでNetworkタブを開いてみたら,「Add Network...」のボタンを発見.これはプライベートネットワークを構築すれば,これ以上IP消費せずにいけるんじゃなかろうか? と思い立ったわけです.

Agenda

  1. プライベートネットワークの作成
  2. NATルータとなる仮想マシンの作成
  3. NATルータ上にDHCPサーバ構築
  4. NATルータの設定
  5. プライベートネットワーク上に仮想マシンを作成

 の5本立てです.

環境
  • 仮想化環境:Citrix XenServer 5.6.0
  • 仮想マシンのOS:Ubuntu Server 10.04.1
  • GlobalNetwork:192.168.1.0/24
  • PrivateNetwork:192.168.2.0/24
  • NATルータのネットワーク:Global -> eth0, Private -> eth1
  • プライベートネットワーク上のマシン:Private -> eth0

プライベートネットワークの作成

 XenServer上では,「Internal Network」.

  1. XenCenterを立ち上げる
  2. 左側のツリーから,物理サーバを選ぶ
  3. 右側上部のタブから「Network」を選ぶ
  4. 「Add Netowrk...」をクリック
  5. Internal Networkを作成する

 この時点ではIPレンジ等はまったく関係ない.
 XenServer内部に,新たなハブが出来上がったと考えると分かりやすいかも.

NATルータとなる仮想マシンの作成

 既に仮想マシンがある場合は,シャットダウンしてNetowrkタブを開いて,「Add Interface...」をクリックし,先程作ったInternal Networkを追加.
 新規に仮想マシンを作成する場合は,Networkの設定画面にて,「Network 0」はそのままに,新たに作成したInternal Networkも追加.
 MAC Addressは自動生成のままで.

 あとは普通に(OpenSSHは入れましたが)インストール.

NATルータ上にDHCPサーバ構築

ネットワーク設定

 /etc/network/interfacesを編集.編集後,"/etc/init.d/networking restart".

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp
# ここはstaticに設定して良いが,今回は重要でないのでDHCPのまま.

auto eth1
iface eth1 inet static
        address 192.168.2.1
        netmask 255.255.255.0
        gateway 192.168.1.1
DHCPサーバインストール
$ sudo apt-get install dhcp3-server

 この時点ではDHCPサーバの起動にエラーが出ますが,気にしない.

DHCPサーバ設定

 /etc/dhcp3/dhcpd.confに以下を追記.

subnet 192.168.2.0 netmask 255.255.255.0 {
  range 192.168.2.100 192.168.2.200;
  option routers 192.168.2.1;
}

NATルータの設定

 ufwを使う.
 https://help.ubuntu.com/10.04/serverguide/C/firewall.html#ip-masquerade-ufw
 を参考に(というかそのまま).

/etc/default/ufw を編集

 DROPをACCEPTに変更.

DEFAULT_FORWARD_POLICY="ACCEPT"
/etc/ufw/sysctl.conf を編集

 コメントアウトされているので,コメントイン.

net/ipv4/ip_forward=1
/etc/ufw/before.rules に追記

 追記というよりも,前追? 既にいろいろと書いてあるのだが,先頭の11文ぐらいのコメントの直後に以下を書く.COMMITまで忘れずに.

# nat Table rules
*nat
:POSTROUTING ACCEPT [0:0]

# Forward traffic from eth1 through eth0.
-A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE

# don't delete the 'COMMIT' line or these nat table rules won't be processed
COMMIT
ufwを有効化

 sshを使っている人はその許可も忘れずに.

$ sudo ufw allow ssh
$ sudo ufw enable

プライベートネットワーク上に仮想マシンを作成

 仮想マシン作成ウィザード中の設定画面では,デフォルトである「Network 0」を削除し,Internal Networkを追加.
 DHCPでIPも取得するし(192.168.2.100),ネットにも繋がる.

 あとは,192.168.2.2〜99までの非DHCP IPを割り当て,NATルータマシン経由でSSHするなり,Webアプリなら,ApacheでReverseProxyを使うなりすれば,XenServerの外からでもアクセス出来る.