猫型エンジニアのブログ

プログラム/ネットワーク系の技術関連をまとめたページです 

OpenvSwitchにGREトンネルを設定

 OpenvSwitchでもGREトンネルを利用することができます。環境は下図を参考にしてください。OSは全てUbuntu12.04になります。

モジュールの確認

 GREトンネルの利用にはgreモジュールが必要となります。以下のようにgreモジュールが存在して、それをOpenvSwitchが参照している必要があります。

# lsmod |grep gre
gre                    12990  1 openvswitch

GRENIC間での疎通確認

 下図において、ルータを挟んだ左右のNICpingが疎通することを確認します。

# ping 20.1.1.10
PING 20.1.1.10 (20.1.1.10) 56(84) bytes of data.
64 bytes from 20.1.1.10: icmp_req=1 ttl=62 time=0.726 ms
64 bytes from 20.1.1.10: icmp_req=2 ttl=62 time=0.688 ms

OVSの設定(下図右側)

 OVSとの接続に用いられるNIC(eth0)はadd-portしますが、GREトンネルの両端のNIC(eth1)はadd-portしないように設定します。GRE用のポートには対向のNICIPアドレスを指定します。

ovs-vsctl add-br br100
ovs-vsctl add-port br100 eth0
ovs-vsctl add-port br100 gre1 -- set interface gre1 type=gre options:remote_ip=10.10.10.10 options:pmtud=true

OVSの設定(下図左側)

 OVSとの接続に用いられるNIC(eth0)はadd-portしますが、GREトンネルの両端のNIC(eth1)はadd-portしないように設定します。GRE用のポートには対向のNICIPアドレスを指定します。

ovs-vsctl add-br br100
ovs-vsctl add-port br100 eth0
ovs-vsctl add-port br100 gre1 -- set interface gre1 type=gre options:remote_ip=20.1.1.10 options:pmtud=true

f:id:alexei-karamazov:20140318182052p:plain

トンネルの設定の確認

下のコマンド結果(一部抜粋)から、GREトンネルがOVSの論理ポートの1番に作成されていることが確認できます。

# ovs-ofctl show br100
OFPT_FEATURES_REPLY (xid=0x2): dpid:0000000000000003
n_tables:254, n_buffers:256
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: OUTPUT SET_VLAN_VID SET_VLAN_PCP STRIP_VLAN SET_DL_SRC SET_DL_DST SET_NW_SRC SET_NW_DST SET_NW_TOS SET_TP_SRC SET_TP_DST ENQUEUE
 1(gre1): addr:52:d9:1a:f4:e9:77
     config:     0
     state:      0
     speed: 0 Mbps now, 0 Mbps max

動作確認

 それぞれのOVSに適切なフローエントリを指定したのちに、ホスト端末間で通信をさせます。それをGREトンネルの両端のNIC(eth1)でパケットをキャプチャした際に、下のようにパケットのヘッダにGeneric Routing Encapusulationが表示されれば大丈夫です。(下のキャプチャ環境は諸事情により上のNW環境とは別物です)

f:id:alexei-karamazov:20140401143020p:plain