• このエントリーをはてなブックマークに追加

CentOS7でVXLANを使ってみた

  • このエントリーをはてなブックマークに追加

centos
zaco muraです。

近頃流行りのキーワードとしてよく耳にするのがVXLANです。なんとなくVLANを発展さ
せたものということは知っていますが具体的にはよく知りません。
ということで、今回CentOS7を使ってVXLANを実際に使ってみました。

スポンサーリンク
Sponsords Link

VXLANとは?

Virtual eXtensible Local Area Network というのが正式名称で、RFC7348で公開されているそうです。
登場の背景としてはVLANのタグは4,096までしかないので、近年の大規模なデータセンターなどでは不足することが多く問題になるとのこと。
それを解決するのがVXLANで、タグの数が24bitまで拡張されており、約1600万のネットワークが構築できるそうです。
プロトコルの中身としてはVLANと違っていて、L2フレームをUDPでカプセル化すること
によりL2 over L3 を実現できるトンネリングプロトコルとなっています。

構成図

以下のような構成で試しました。
vxlan

192.168.1.0/24と172.0.0.0/24が実ネットワークで、その上に192.168.42.0/24という仮想的なL2セグメントを構築します。

環境

・node1,2 : centos7.1.1503
・HW : OpenStack上の仮想マシン(qemu+kvm)

構築していきます

それでは早速構築していきます。ちょっと調べた感じではVXLANはマルチキャストを使うらしいですが、それではうまくいかなかったので今回はユニキャストで構築します。

事前準備

CentOS7系ではVXLANは標準でカーネルに組み込まれていますのでインストールなどは不要です。また、設定はipコマンドで行っていきます。

構築手順

以下のような流れをnode1,2両方で行います。
・インターフェイスの作成
・インターフェイスの起動
・IPの設定

まずはnode1です。

# VXLANインターフェイスを作成。VXLAN-IDは42、対向の実IPは172.0.0.11、対向のポート番号は4789(デフォルト)
[root@node1 ~]# ip link add vxlan0 type vxlan id 42 remote 172.0.0.11 dstport 4789 dev eth0

# 構築できたか確認。vxlan0というのができています。
[root@node1 ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1454 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether fa:16:3e:c6:e4:da brd ff:ff:ff:ff:ff:ff
4: vxlan0: <BROADCAST,MULTICAST> mtu 1404 qdisc noop state DOWN mode DEFAULT
link/ether 16:26:62:0a:24:a4 brd ff:ff:ff:ff:ff:ff

# vxlan0インターフェイスを起動します。
[root@node1 ~]# ip link set up vxlan0

# 起動したか確認します。パラメータも正しく設定されています。
[root@node1 ~]# ip -d link show vxlan0
5: vxlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1404 qdisc noqueue state UNKNOWN mode DEFAULT
link/ether 16:26:62:0a:24:a4 brd ff:ff:ff:ff:ff:ff promiscuity 0
vxlan id 42 remote 172.0.0.10 dev eth0 srcport 0 0 dstport 4789 ageing 300

# IPアドレスを設定します。
[root@node1 ~]# ip a add 192.168.42.2/24 dev vxlan0

次にnode2を設定します。

[root@node2 ~]# ip link add vxlan0 type vxlan id 42 remote 192.168.1.48 dstport 4789 dev eth0
[root@node2 ~]# ip -d link show vxlan0
4: vxlan0: <BROADCAST,MULTICAST> mtu 1404 qdisc noop state DOWN mode DEFAULT
link/ether 9a:a1:c0:6e:d5:86 brd ff:ff:ff:ff:ff:ff promiscuity 0
vxlan id 42 group 239.1.1.1 dev eth0 srcport 0 0 dstport 4789 ageing 300

[root@node2 ~]# ip link set up vxlan0
[root@node2 ~]# ip -d link show vxlan0
4: vxlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1404 qdisc noqueue state UNKNOWN mode DEFAULT
link/ether 9a:a1:c0:6e:d5:86 brd ff:ff:ff:ff:ff:ff promiscuity 0
vxlan id 42 group 239.1.1.1 dev eth0 srcport 0 0 dstport 4789 ageing 300

[root@node2 ~]# ip a add 192.168.42.2/24 dev vxlan0

これで両方の設定が終わりました。疎通を確認してみます。

[root@node1 ~]# ping -I vxlan0 192.168.42.3
PING 192.168.42.3 (192.168.42.3) from 192.168.42.2 vxlan0: 56(84) bytes of data.
64 bytes from 192.168.42.3: icmp_seq=1 ttl=64 time=1.80 ms

無事pingが通りました!
この時の実NICをキャプチャすると以下のようになり、ただのUDPパケットとして認識されていることがわかります。

[root@router ~]# tcpdump -i eth1 -nn
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth1, link-type EN10MB (Ethernet), capture size 65535 bytes
02:40:44.686813 IP 192.168.1.48.59560 > 172.0.0.10.4789: UDP, length 106
02:40:44.687395 IP 172.0.0.10.43783 > 192.168.1.48.4789: UDP, length 106

ちなみに、VXLANではarpパケットも通るんですね。初めて知りました。

[root@node1 ~]# arping -I vxlan0 192.168.42.3
ARPING 192.168.42.3 from 192.168.42.2 vxlan0
Unicast reply from 192.168.42.3 [7A:9E:CB:67:FE:2A] 1.870ms
Unicast reply from 192.168.42.3 [7A:9E:CB:67:FE:2A] 1.571ms

wiresharkで見てみた

pingのパケットをwiresharkで見てみると、VXLANであることを認識しているのと、中身がpingであることを認識しています。
つまり、VXLANでは暗号化の機能はないということですね。

vxlan_cap

まとめ

ということで、VXLANを試してみました。どんどん新しい技術が出てくるので言葉だけでなんとなく理解しがち(私は)ですが、実際に触ってみると意外に簡単にできたりするので、やっぱり手を動かすことが大事だなーと思った今日この頃です。

参考

http://blog.etsukata.com/2013/07/linux-vxlan.html

スポンサーリンク
Sponsords Link
  • このエントリーをはてなブックマークに追加

ZacoDesign

スポンサーリンク
Sponsords Link