遠隔地でL2でほしいケースに対する選択肢としてL2TPやVPNを試してきましたが、VXLANがLinuxはカーネルレベルサポートらしいことを知ったので試してみます。
環境としては以下で試してみます。VXLANの通信はens224を使って通すようにします。
ノード | インターフェイス | IP | Note |
Node1 | ens192 | 192.168.9.81/22 | 物理インターフェイス |
ens224 | 192.168.41.81/22 | 物理インターフェイス | |
vxlan1 | 10.0.1.81/24 | vxlanインターフェイス | |
vxlan2 | 10.02.81/24 | vxlanインターフェイス | |
Node2 | ens192 | 192.168.9.82/22 | 物理インターフェイス |
ens224 | 192.168.42.82/22 | 物理インターフェイス | |
vxlan1 | 10.0.1.82/24 | vxlanインターフェイス | |
vxlan2 | 10.0.2.82/24 | vxlanインターフェイス |
Node1でvxlan1,2のインターフェイスを追加します。
# ip link add vxlan1 type vxlan id 1 dev ens224 # ip link add vxlan2 type vxlan id 2 dev ens224 # ip addr add 10.0.1.81/24 broadcast 10.0.1.255 dev vxlan1 # ip addr add 10.0.2.81/24 broadcast 10.0.2.255 dev vxlan2 # ip link set vxlan1 up # ip link set vxlan2 up
Node2でもvxlan1,2のインターフェイスを追加します。
# ip link add vxlan1 type vxlan id 1 dev ens224 # ip link add vxlan2 type vxlan id 2 dev ens224 # ip addr add 10.0.1.82/24 broadcast 10.0.1.255 dev vxlan1 # ip addr add 10.0.2.82/24 broadcast 10.0.2.255 dev vxlan2 # ip link set vxlan1 up # ip link set vxlan2 up
今回はVXLANの通信をユニキャストにしようと思うので、対向ノードを登録します。
Node1で以下を実行します。
# bridge fdb append 00:00:00:00:00:00 dev vxlan1 dst 192.168.41.82 # bridge fdb append 00:00:00:00:00:00 dev vxlan2 dst 192.168.41.82
Node2では以下を実行します。
# bridge fdb append 00:00:00:00:00:00 dev vxlan1 dst 192.168.41.81 # bridge fdb append 00:00:00:00:00:00 dev vxlan2 dst 192.168.41.81
これで設定はOKです。
疎通確認してみます。
# ping 10.0.1.82 PING 10.0.1.82 (10.0.1.82) 56(84) bytes of data. 64 bytes from 10.0.1.82: icmp_seq=1 ttl=64 time=0.217 ms 64 bytes from 10.0.1.82: icmp_seq=2 ttl=64 time=0.244 ms ^C --- 10.0.1.82 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1013ms rtt min/avg/max/mdev = 0.217/0.230/0.244/0.020 ms # ping 10.0.2.82 PING 10.0.2.82 (10.0.2.82) 56(84) bytes of data. 64 bytes from 10.0.2.82: icmp_seq=1 ttl=64 time=0.259 ms 64 bytes from 10.0.2.82: icmp_seq=2 ttl=64 time=0.244 ms ^C --- 10.0.2.82 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1042ms rtt min/avg/max/mdev = 0.244/0.251/0.259/0.017 ms
通信できるのがわかったので、両ノードでiperf3をインストールし帯域を測定してみます。
# dnf install iperf3 -y
Node2でサーバを起動します。
# iperf3 -s
まずは物理インターフェイスで確認します。Node1から接続します。
# iperf3 -c 192.168.41.82 Connecting to host 192.168.41.82, port 5201 [ 5] local 192.168.41.81 port 43104 connected to 192.168.41.82 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 2.77 GBytes 23.8 Gbits/sec 56 2.13 MBytes [ 5] 1.00-2.00 sec 2.80 GBytes 24.0 Gbits/sec 0 2.39 MBytes [ 5] 2.00-3.00 sec 2.80 GBytes 24.0 Gbits/sec 0 2.52 MBytes [ 5] 3.00-4.00 sec 2.80 GBytes 24.1 Gbits/sec 0 2.52 MBytes [ 5] 4.00-5.00 sec 2.79 GBytes 24.0 Gbits/sec 0 2.89 MBytes [ 5] 5.00-6.00 sec 2.79 GBytes 23.9 Gbits/sec 0 2.97 MBytes [ 5] 6.00-7.00 sec 2.76 GBytes 23.8 Gbits/sec 1 2.97 MBytes [ 5] 7.00-8.00 sec 2.79 GBytes 24.0 Gbits/sec 0 2.97 MBytes [ 5] 8.00-9.00 sec 2.79 GBytes 24.0 Gbits/sec 0 2.98 MBytes [ 5] 9.00-10.00 sec 2.80 GBytes 24.0 Gbits/sec 0 3.02 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 27.9 GBytes 24.0 Gbits/sec 57 sender [ 5] 0.00-10.04 sec 27.9 GBytes 23.9 Gbits/sec receiver
20Gbpsちょっと出ています。
次にvxlanインターフェイスでNode1から接続してみます。
# iperf3 -c 10.0.1.82 Connecting to host 10.0.1.82, port 5201 [ 5] local 10.0.1.81 port 46692 connected to 10.0.1.82 port 5201 [ ID] Interval Transfer Bitrate Retr Cwnd [ 5] 0.00-1.00 sec 2.97 GBytes 25.5 Gbits/sec 4 3.02 MBytes [ 5] 1.00-2.00 sec 2.64 GBytes 22.7 Gbits/sec 1 3.02 MBytes [ 5] 2.00-3.00 sec 2.35 GBytes 20.2 Gbits/sec 1 3.02 MBytes [ 5] 3.00-4.00 sec 2.35 GBytes 20.2 Gbits/sec 2 3.02 MBytes [ 5] 4.00-5.00 sec 2.35 GBytes 20.2 Gbits/sec 3 3.02 MBytes [ 5] 5.00-6.00 sec 2.34 GBytes 20.1 Gbits/sec 1 3.02 MBytes [ 5] 6.00-7.00 sec 2.37 GBytes 20.4 Gbits/sec 0 3.02 MBytes [ 5] 7.00-8.00 sec 2.35 GBytes 20.2 Gbits/sec 0 3.02 MBytes [ 5] 8.00-9.00 sec 2.33 GBytes 20.0 Gbits/sec 0 3.02 MBytes [ 5] 9.00-10.00 sec 2.34 GBytes 20.1 Gbits/sec 0 3.02 MBytes - - - - - - - - - - - - - - - - - - - - - - - - - [ ID] Interval Transfer Bitrate Retr [ 5] 0.00-10.00 sec 24.4 GBytes 21.0 Gbits/sec 12 sender [ 5] 0.00-10.04 sec 24.4 GBytes 20.9 Gbits/sec receiver
こちらも20Gbpsちょっと出ています。8~9割程度の速度が出てそうですね。
今回はアンダーレイネットワークもL2にして評価しましたが、実際にはL3で設定して、遠隔地のノートともL2で通信することができそうです。
また、ip linkで追加した状態だと、再起動でvxlanインターフェイスは消えるので、nmcliで追加する方法を調べました。
Node1と2でそれぞれ以下のようにするだけで、追加できます。これで再起動してもvxlanインターフェイスが維持されます。
Node1 # nmcli connection add type vxlan con-name vxlan1 ifname vxlan1 id 1 local 192.168.41.81 remote 192.168.41.82 ipv4.address 10.0.1.81/24 dev ens224 Node1 # nmcli connection add type vxlan con-name vxlan2 ifname vxlan2 id 2 local 192.168.41.81 remote 192.168.41.82 ipv4.address 10.0.2.81/24 dev ens224 Node1 # nmcli connection modify vxlan1 connection.autoconnect yes Node1 # nmcli connection modify vxlan2 connection.autoconnect yes Node1 # nmcli connection modify vxlan1 ipv4.method manual Node1 # nmcli connection modify vxlan2 ipv4.method manual Node2 # nmcli connection add type vxlan con-name vxlan1 ifname vxlan1 id 1 local 192.168.41.82 remote 192.168.41.81 ipv4.address 10.0.1.82/24 dev ens224 Node2 # nmcli connection add type vxlan con-name vxlan2 ifname vxlan2 id 2 local 192.168.41.82 remote 192.168.41.81 ipv4.address 10.0.2.82/24 dev ens224 Node2 # nmcli connection modify vxlan1 connection.autoconnect yes Node2 # nmcli connection modify vxlan2 connection.autoconnect yes Node2 # nmcli connection modify vxlan1 ipv4.method manual Node2 # nmcli connection modify vxlan2 ipv4.method manual