Linux で VXLAN を試してみた

Linux 3.7 から VXLAN が追加されたので,ちょっと試してみた.

試した環境は Ubuntu 12.04 Server.
Ubuntu 12.04 のカーネルは 3.2 なので,まずはこれを 3.7 に入れ替える.
apt-get だと Ubuntuカーネルは 3.7 にならないが,以下のコマンドで入れ替えることができる.

wget http://dl.dropbox.com/u/47950494/upubuntu.com/linux-kernel-3.7 -O linux-kernel-3.7
chmod +x linux-kernel-3.7
sh linux-kernel-3.7
reboot

再起動後,Kernel 3.7 で上がっていれば大丈夫.

次に VXLAN のインタフェースを追加するため,ip コマンドを VXLAN 対応のものにする.
ip コマンドはソースからコンパイルする.
インストールまでの手順は以下の通り.
あ,build-essential とか make とかコンパイルに必要なその他もろもろは先に入れておいてください.

git clone git://git.kernel.org/pub/scm/linux/kernel/git/shemminger/iproute2.git
cd iproute2
make
make clean

最後に,VXLAN を使う際に iperf が必要なので,apt-get でインストールする.

apt-get install iperf

VXLAN の設定.

ip addr add 172.16.0.1/24 dev eth0
ip route add 224.0.0.0/4 dev eth0
ip link set ip eth0
ip link add vxlan 100 type vxlan id 100 group 239.0.0.1 ttl 1 dev eth0
ip addr add 192.168.0.1/24 dev vxlan100
ip link set up dev vxlan100
iperf -u -s -B 239.0.0.1 &

反対側

ip addr add 172.16.0.2/24 dev eth0
ip route add 224.0.0.0/4 dev eth0
ip link set ip eth0
ip link add vxlan 100 type vxlan id 100 group 239.0.0.1 ttl 1 dev eth0
ip addr add 192.168.0.2/24 dev vxlan100
ip link set up dev vxlan100
iperf -u -s -B 239.0.0.1 &

iperf を起動しておかないと 239.0.0.99 宛のパケットを処理してくれない.
で,なんとなく ping 打ってみた感じ.

# ping 192.168.0.1

※ 書き忘れてましたが,以下 tcpdump の結果です
08:39:13.419782 IP 172.16.0.2.53741 > 239.0.0.1.8472: UDP, length 50
08:39:13.420627 ARP, Request who-has 172.16.0.2 tell 172.16.0.1, length 28
08:39:13.420650 ARP, Reply 172.16.0.2 is-at 00:16:3e:2f:d5:87, length 28
08:39:13.421427 IP 172.16.0.1.56266 > 172.16.0.2.8472: UDP, length 50
08:39:13.421457 IP 172.16.0.2.57160 > 172.16.0.1.8472: UDP, length 106
08:39:13.422226 IP 172.16.0.1.41953 > 172.16.0.2.8472: UDP, length 106
08:39:14.421418 IP 172.16.0.2.57160 > 172.16.0.1.8472: UDP, length 106
08:39:14.422362 IP 172.16.0.1.41953 > 172.16.0.2.8472: UDP, length 106
08:39:15.422581 IP 172.16.0.2.57160 > 172.16.0.1.8472: UDP, length 106
08:39:15.423386 IP 172.16.0.1.41953 > 172.16.0.2.8472: UDP, length 106
08:39:16.422527 IP 172.16.0.2.57160 > 172.16.0.1.8472: UDP, length 106
08:39:16.423313 IP 172.16.0.1.41953 > 172.16.0.2.8472: UDP, length 106
08:39:18.424390 IP 172.16.0.1.56266 > 172.16.0.2.8472: UDP, length 50
08:39:18.424425 IP 172.16.0.2.57621 > 172.16.0.1.8472: UDP, length 50

一回目だけマルチキャストでその後はユニキャストなのね.
後で色々試してみたけど,arp テーブルにあるうちはユニキャストで投げてるっぽい.