designetwork

ネットワークを軸としたIT技術メモ

ESXiマウントDell PERC RAID1を高速化する(HDDキャッシュ有効化)

f:id:daichi703n:20170918235313p:plain

PowerEdge T110 Ⅱ PERC H200A でRAIDディスクの速度が遅いため調査したところ、PERC 200 RAIDコントローラはキャッシュを持っておらず、パフォーマンスが悪いという問題が発覚した。

communities.vmware.com

[PERC] キャッシュのないRAIDコントローラのパフォーマンスに関する懸念点(H330、H310、S130、S110、S300、S100、H200、SAS 6/iR、SAS 5/iR) | Dell

なお、RAIDコントローラでなく、HDD自体はキャッシュを持っているのだが、ESXiとPERC 200の組み合わせ動作時には、HDDキャッシュが無効化されるようだ。停電時等のデータロストを防ぐためには適切な対応に思うが、DISKの速度が遅すぎて実用に耐えない場面が多々ある。

私の環境は試験用で、最悪データロストしても困らないため、強制的にHDDキャッシュを有効にすることでパフォーマンス改善を図る。

※この手順はデータロストのリスクを増加させる可能性があるため、検討のうえ各人の責任で適用してください。

状態確認

ディスク速度が遅いと感じているVM (CentOS7) で ddコマンドによりディスクの書込み速度を試験する。

$ dd if=/dev/zero of=~/perf/test bs=1M count=1024
1024+0 レコード入力
1024+0 レコード出力
1073741824 バイト (1.1 GB) コピーされました、 1.5644 秒、 686 MB/秒
$ dd if=/dev/zero of=~/perf/test bs=1M count=1024
1073741824 バイト (1.1 GB) コピーされました、 1.14801 秒、 935 MB/秒
$ dd if=/dev/zero of=~/perf/test bs=1M count=1024
1073741824 バイト (1.1 GB) コピーされました、 0.460856 秒、 2.3 GB/秒

この出力を見ると、数百MB/sの性能が発揮できているように見える。しかし、これはOS上の認識だけで実体の書き込みを待っておらず、vmstatでCPU負荷状況を見るとこちらの通り。iowaitが100%になる、SSH CLI操作がままならなず応答しない状態になる。

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  2      0 2473280   1008 1230940    0    0    20     0  106  123  0  0 44 57  0
 0  2      0 2473280   1008 1230940    0    0     0     0   89   96  0  0 50 50  0
 0  2      0 2473280   1008 1230940    0    0     0     0  134  146  0  0 50 50  0
 1  2      0 2474016   1008 1230948    0    0     4     0  223  332  1  1 38 61  0
 1  3      0 2474056   1008 1230952    0    0     4 16388  145  176  0  0  0 100  0
 0  3      0 2474056   1008 1230960    0    0     0     0  145  215  0  0  0 100  0
 0  3      0 2474056   1008 1230960    0    0     0     0  139  191  0  0  0 100  0

vSphere (ESXi) Web Clientから仮想マシンの状態を見ると以下の通り。

f:id:daichi703n:20170829224242p:plain

書き込み速度:5.44MB/s (≒44Mbps)
最大待ち時間:4,955 ms

調子のいいときでもこのように、1秒程度のDISK IO待ちが発生している。

書き込み速度:24.60MB/s (≒200Mbps)
最大待ち時間:1,087 ms

f:id:daichi703n:20170829224554p:plain

前提作業

HDDキャッシュを有効化するにあたり、Dell PowerEdgeの管理ツールOMSA ( OpenManage Server Administrator ) をESXiにインストールする必要がある。インストールはVIBパッチ適用により実施できる。

OSMAのインストールはこちらの手順を参照。ログ収集目的メインで記載されているが、VIBインストール手順は同様。

ログ収集のために、VMWareにDell™ OpenManage Server Administrator(OMSA)をインストールする方法 | Dell 日本

この先の設定手順は6. WindowsでのOMSA 8.5のダウンロードおよびインストール(オプション)を実施したWindowsから操作する。CentOS等にもOSMAをインストールできるようだが、私の環境ではうまくいかなかった。

OSMAからキャッシュ有効化する

OSMAをインストールしたWindowsスタートメニュー > Dell OpenManager Applications > Server Administrote を起動する。(私の環境はWindows Server 2016)

f:id:daichi703n:20170918225110p:plain

ESXiのrootアカウントでログインする。

f:id:daichi703n:20170918225304p:plain

ツリーから システム > ストレージ > PERC H200 Adapter > 仮想ディスク を選択する。

初期状態では ディスクキャッシュポリシー:無効 となっている。変更対象の仮想ディスク (RAID) のタスクプルダウンから「ポリシーの変更…」を選択し実行する。

f:id:daichi703n:20170918230030p:plain

ディスクキャッシュポリシーが有効になった。

f:id:daichi703n:20170918230142p:plain

私の環境では再起動の必要なくパフォーマンス改善されたが、状況に応じて要再起動。

キャッシュ有効化による改善結果

冒頭と同様にパフォーマンスを測定する。

書き込み速度:75.60MB/s (≒600Mbps)
最大待ち時間:363 ms

パフォーマンスが3倍以上(実質10倍程度)向上し、かつ安定している。待ち時間が300ms程度あるが、2秒おきに1GB書き込みという厳しめの環境なのでしょうがないものと考える。

f:id:daichi703n:20170919015159p:plain

理論値6Gbpsから比べるとまだ遅いが、十分に実用的な速度となっている。また、iowaitも減りディスクアクセスが速くなったことが実感できた。

参考情報

Slow write with Perc H200 and VMWare ESXi | Technology and Me

community.spiceworks.com

https://www.weblab360.com/User:xltran/App/Dell/PowerEdge_R510/PERC_H200

まとめ - ESXiマウントDell PERC RAID1を高速化する(HDDキャッシュ有効化)

Dell PowerEdgeの管理ツールOMSA ( OpenManage Server Administrator ) をESXiにインストールし、強制的にHDDキャッシュを有効化した。これにより、PERC 200 でのRAIDディスクのパフォーマンスが3倍以上(実質10倍程度)向上し速くなった。

※この手順はデータロストのリスクを増加させる可能性があるため、検討のうえ各人の責任で適用してください。

Macのzshでコマンド履歴(上キー・history)の重複を排除する

f:id:daichi703n:20170918184900p:plain

Maczshで上キーでコマンド履歴をたどるときに、同じコマンドを複数回打った履歴を除外する。

ネットワークエンジニアだと複数のコマンドを繰り返し実行するようなケースが多い。例えば、pingやtracerouteで複数への疎通・経路確認を繰り返すパターンなど。

デフォルトだと、このように、同じコマンドを複数回実行した場合は全て履歴に保存される。そのため、ターミナルで履歴をたどるときに上キーを押す回数が多くなってしまう。

$ history
  174  traceroute google.com
  175  traceroute google.com
  176  traceroute google.com
  177  traceroute example.com
  178  traceroute example.com
  179  traceroute example.com

zshの設定によりコマンド履歴の重複を排除する。

コマンド履歴の重複を除外する

.zshrcに以下のコマンドを追加することで、上キーでの履歴、historyでの重複を除外できる。

vi ~/.zshrc

setopt hist_ignore_dups

設定を反映させる。

source ~/.zshrc

このようにhistoryに重複して表示されない。実際の操作は冒頭と同様に3回ずつ同じコマンドを実行している。

$ history
  181  vi .zshrc
  182  source .zshrc
  183  traceroute google.com
  184  traceroute example.com

なお、この設定を無効化したい場合は以下の通りunsetする。

unsetopt hist_ignore_dups

参考情報

ぴったりのタイトルのものがなかったため新規に記事を書きましたが、zsh関連では以下の記事が参考になりました。

qiita.com

minus9d.hatenablog.com

まとめ - Maczshでコマンド履歴(上キー)の重複を排除する

zshrcの設定でコマンド履歴の重複を排除した。これで、2,3個のコマンドを繰り返し実行するような作業の効率が向上する。

ZOOT NATIVE & VyOSでDS-Lite (IPv4 over IPv6) インターネット接続する

f:id:daichi703n:20170904022032p:plain

こちらの記事でZOOT NATIVE & CentOSでのDS-Liteインターネットアクセスを実装した。

designetwork.hatenablog.com

しかし、CentOS (Linux) をルータとして運用していくのは面倒(慣れの問題)なので、VyOSで同等のDS-Lite環境を構築する。本当はフレッツPPPoEインターネットルータとして使用しているCisco ASA5505がいいのだが、ASAはIPv4 over IPv6トンネル(そもそもトンネル機能全般)をサポートしていないため、VyOSで代替する。

事前準備 ZOOT NATIVE(インターリンク)契約

今回使用するZOOT NATIVEの契約に関してはこちらを参照。2ヶ月の無料お試し期間を利用してDS-Liteによるインターネット速度改善を検証する。

gigazine.net

ネットワーク構成

前記事でも記載の通り、Catalyst2960でoutside VLANとしてONUアクセスをマルチポイント化している。

f:id:daichi703n:20170904014729p:plain

VyOSインタフェース設定

VyOSにDS-Lite接続のための設定をする。(ベース設定・デフォルト設定は割愛)

inside側インタフェースはIPv4設定のみとする。

set interfaces ethernet eth0 address '192.168.1.2/24'
set interfaces ethernet eth0 duplex 'auto'
set interfaces ethernet eth0 smp_affinity 'auto'
set interfaces ethernet eth0 speed 'auto'
  • outside側物理NIC

outsideにはVLANインタフェースで接続する。物理インタフェースにはIPアドレス設定なし。

set interfaces ethernet eth1 duplex 'auto'
set interfaces ethernet eth1 smp_affinity 'auto'
set interfaces ethernet eth1 speed 'auto'
  • outsideサブインタフェース

outside側VLANインタフェースはZOOT NATIVEからRA・DHCPv6でIPv6アドレスを取得する。トンネルのアンダーレイインタフェースとなる。

set interfaces ethernet eth1 vif 99 ipv6 address 'autoconf'
set interfaces ethernet eth1 vif 99 ipv6 'disable-forwarding'
set interfaces ethernet eth1 vif 99 ipv6 dup-addr-detect-transmits '1'

IPv6アドレス・疎通確認

ZOOT NATIVEの契約が完了していることを確認した上で、outsideインタフェースでIPv6アドレスの取得、IPv6通信が可能となっていることを確認する。

2409:10:24e0:2000::/64IPv6グローバルアドレスを取得できている。

$ show interfaces ethernet eth1 vif 99
eth1.99@eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 00:0c:29:05:52:3b brd ff:ff:ff:ff:ff:ff
    inet6 2409:10:24e0:2000:20c:29ff:fe05:xxxx/64 scope global dynamic
       valid_lft 2591863sec preferred_lft 604663sec
    inet6 fe80::20c:29ff:fe05:xxxx/64 scope link

網内対向機器のリンクローカルアドレスが見えている。

$ show ipv6 neighbors
fe80::221:d8ff:fe9a:d1c1 dev eth1.99 lladdr 00:21:d8:9a:d1:c1 router REACHABLE
  • IPv6デフォルトルート

網内対向機器のリンクローカルアドレス宛にIPv6デフォルトルートが設定されている。設定されない場合はset protocols static route6 ::/0 next-hop xxxxで自分でも設定可能。

$ show ipv6 route
Codes: K - kernel route, C - connected, S - static, R - RIPng, O - OSPFv3,
       I - ISIS, B - BGP, * - FIB route.

S   ::/0 [1/0] via fe80::221:d8ff:fe9a:d1c1, eth1.99
K>* ::/0 via fe80::221:d8ff:fe9a:d1c1, eth1.99
C>* ::1/128 is directly connected, lo
C>* 2409:10:24e0:2000::/64 is directly connected, eth1.99
  • DS-Lite疎通確認

DS-Lite IPv4 over IPv6トンネルの対向機器宛の疎通確認をする。対向アドレスは2404:8e00::feed:100 (2017/9月現在) 今後変更の可能性あり。随時ZOOT NATIVE(インターリンク)、transix(インターネットマルチフィード)の最新情報を確認する。

$ ping 2404:8e00::feed:100
PING 2404:8e00::feed:100(2404:8e00::feed:100) 56 data bytes
64 bytes from 2404:8e00::feed:100: icmp_seq=1 ttl=59 time=8.07 ms
64 bytes from 2404:8e00::feed:100: icmp_seq=2 ttl=59 time=3.13 ms

$ traceroute 2404:8e00::feed:100
traceroute to 2404:8e00::feed:100 (2404:8e00::feed:100), 30 hops max, 80 byte packets
 1  2409:10:24e0:2000::fffe (2409:10:24e0:2000::fffe)  1.830 ms  2.385 ms  2.384 ms
 2  * * *
 3  * * *
 4  * * *
 5  * 2404:8e00:feed:ff00::a (2404:8e00:feed:ff00::a)  6.766 ms *
 6  2404:8e00:feed:ff07::2 (2404:8e00:feed:ff07::2)  8.938 ms  5.160 ms  5.095 ms
 7  2404:8e00::feed:100 (2404:8e00::feed:100)  12.168 ms  16.176 ms  12.136 ms

IPv4 over IPv6トンネル設定

transix (インターネットマルチフィード) 宛のIPv4 over IPv6 トンネルを設定する。トンネルIPv4アドレスの指定は必要ない。

local-ipはDHCPv6で割り当てられたアドレスを使用する。

set interfaces tunnel tun0 encapsulation 'ipip6'
set interfaces tunnel tun0 local-ip '2409:10:24e0:2000:20c:29ff:fe05:xxxx'
set interfaces tunnel tun0 multicast 'disable'
set interfaces tunnel tun0 remote-ip '2404:8e00::feed:100'
  • IPv4 ルーティング設定

トンネル宛にデフォルトルートを設定する。

set protocols static interface-route 0.0.0.0/0 next-hop-interface 'tun0'
  • OSPF設定(オプション)

私の環境ではCisco ASA5505がLAN-PCからのデフォルトゲートウェイになるようにしているため、VyOSとASAでOSPFにより経路交換している(Static再配信)。本当はVRRPなどでゲートウェイ冗長化したいが、ASAは未サポート。従来PPPoEは継続しているため、VyOS停止時には切り替わる。

IPv4疎通確認

ここまででDS-Lite通信に必要となる設定が完了している。

tracerouteで逆引きDNSを見ると、transix.jpを経由してIPv4インターネットアクセスできていることがわかる。

$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_req=1 ttl=61 time=4.56 ms
64 bytes from 8.8.8.8: icmp_req=2 ttl=61 time=4.04 ms

$ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  ike-gw00.transix.jp (14.0.9.66)  3.461 ms  3.910 ms  3.899 ms
 2  ike-bbrt10.transix.jp (14.0.9.65)  3.976 ms  3.961 ms  3.946 ms
 3  210.173.176.243 (210.173.176.243)  4.726 ms  4.555 ms  5.002 ms
 4  108.170.242.161 (108.170.242.161)  4.994 ms 108.170.242.97 (108.170.242.97)  4.984 ms  5.273 ms
 5  108.170.238.35 (108.170.238.35)  5.264 ms 108.170.236.181 (108.170.236.181)  5.254 ms 72.14.236.33 (72.14.236.33)  4.938 ms
 6  google-public-dns-a.google.com (8.8.8.8)  4.624 ms  4.387 ms  7.371 ms

速度比較

従来の@nifty IPv4 フレッツPPPoEと、ZOOT NATIVE DS-Lite (IPv4 over IPv6)での通信速度を比較する。

従来IPv4 フレッツPPPoE

@nifty IPv4 PPPoE + Cisco ASA5505
-> 約5.8Mbps

f:id:daichi703n:20170903163444p:plain

ZOOT NATIVE DS-Lite

ZOOT NATIVE DS-Lite + CentOS7
-> 約61Mbps

f:id:daichi703n:20170904021328p:plain

約10倍の通信速度(スループット)となっている。ESXiの都合上、VyOSは100Mbps 1NIC構成となっているため頭打ちとなっているが、1Gbps-NICを使用すればさらに速度向上すると考えられる。

IPoEも使用可能

ZOOT NATIVEはDS-LiteとともにIPoE方式でのIPv6ネイティブ通信もサポートしている。そのため、こちらの記事で書いたCisco ASA 5505 での IPv6 NAPT方式によるIPv6インターネットアクセスも可能。

designetwork.hatenablog.com

まとめ - ZOOT NATIVE & VyOS でDS-Lite (IPv4 over IPv6) インターネット接続する

VyOS を使用してZOOT NATIVE経由で transix (インターネットマルチフィード) へ DS-Lite (IPv4 over IPv6) インターネット接続した。これにより、IPv4インターネット網への通信速度が10倍程度向上した。引き続き無料期間はDS-Liteを使用し、ZOOT NATIVEを継続利用するか検討する。

ZOOT NATIVE & CentOSでDS-Lite (IPv4 over IPv6) インターネット接続する

f:id:daichi703n:20170903172344p:plain

こちらの記事でIPv6接続によるインターネットアクセス高速化を試験したが、@niftyが提供するIPv6プラス(MAP-E)は専用機器が必要で、Cisco ASA5505、VyOS、Linux等ではシンプルなIPoE接続しかできず、IPv4サービスの高速化はできなかった。

designetwork.hatenablog.com

日常的に使用するサービス・Webサイトの大部分はIPv4アクセスが必要となるため、ZOOT NATIVE(インターリンク)のDS-Liteサービスを使用してIPv4 over IPv6 トンネルの環境を構築する。

なお、ZOOT NATIVEのDS-Liteサービスは、インターネットマルチフィードが提供するtransixへの接続を可能とするプロバイダ的なサービスとなっている。

事前準備 ZOOT NATIVE(インターリンク)契約

今回使用するZOOT NATIVEの契約に関してはこちらを参照。2ヶ月の無料お試し期間を利用してDS-Liteによるインターネット速度改善を検証する。

gigazine.net

この記事の中では、正式サポートのブロードバンドルータでの設定例まで記載されているが、今回は汎用性を考慮してLinux (CentOS 7)での接続を試験する。

@niftyのv6オプション解除が必要

ZOOT NATIVEの新規契約時には、他のプロバイダのIPv6接続オプションを使用しているとエラーになる。事前にオプションを解約しておく必要がある。v6プラスについても同様。

エラーはこういった内容。

f:id:daichi703n:20170903163028p:plain

私の場合は@niftyのv6接続オプションを使用中だったため、サポートサイトより解約した。処理に時間を要する場合があるので、早めに申し込みをしておくといい。@niftyだと、夜12時過ぎに当日解約で申し込み、朝起きたらサービスが解除されていた。

ネットワーク構成

一般的にONUは1NIC構成のため、複数のルータで接続を切り替えて試験するのは面倒だ。そのため、私はONUを一旦スイッチ(Catalyst2960)に接続し、ONU接続用のVLANを作成することで自由度を増している。

f:id:daichi703n:20170903171843p:plain

今回は従来のCisco ASA5505のPPPoE通信を残したまま、Linux ( CentOS ) をoutside (ONU) VLANに接続してIPv6通信をする。

NIC構成

CentOSNIC設定は以下の通りとする。設定はnmtui (Network-Manager)でも可能。

自宅LANセグメントでPCからのデフォルトGWとなるインタフェース。IPアドレスDNSは環境に合わせて適宜設定する。

$ sudo cat /etc/sysconfig/network-scripts/ifcfg-ens160
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=no
IPV4_FAILURE_FATAL=yes
IPV6INIT=yes
IPV6_AUTOCONF=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens160
UUID=531a8e7d-07d1-4b71-9d27-96433ca6f8fc
DEVICE=ens160
ONBOOT=yes
DNS1=192.168.1.77
DNS2=8.8.8.8
DOMAIN=designet.local
ZONE=trusted
IPADDR=192.168.1.8
PREFIX=24
IPV6_PRIVACY=no
  • outside側物理NIC

VMware ESXiの構成の制限より、outside側インタフェースはスイッチにtrunk接続する。物理インタフェースとしてはIPv4/v6アドレスは設定する必要はない。

$ sudo cat /etc/sysconfig/network-scripts/ifcfg-ens192
TYPE=Ethernet
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens192
UUID=05c28633-5849-4892-bdc0-08e69b574ac1
DEVICE=ens192
ONBOOT=yes
ZONE=trusted
PEERDNS=yes
PEERROUTES=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_PRIVACY=no
  • outsideサブインタフェース

ONU-VLANに接続するVLANサブインタフェース。IPv4アドレスは持たず、IPv6アドレスはautoconfでRA・DHCPv6により取得する。これがトンネルのアンダーレイインタフェースとなる。

$ sudo cat /etc/sysconfig/network-scripts/ifcfg-outside
VLAN=yes
TYPE=Vlan
PHYSDEV=ens192
VLAN_ID=99
REORDER_HDR=yes
GVRP=no
MVRP=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=outside
UUID=9e20f5e5-3a57-4441-9b78-cb784c42d3fe
ONBOOT=yes
ZONE=trusted
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes

NICのFirewall設定

inside, outsideともにtrustで全許可とする。outside側はDHCPv6など制限することが望ましいが、一旦試験用として許可する。※サーバ自身のSSHなどのセキュリティ設定は個別に実施

$ sudo firewall-cmd --zone=trusted --change-interface=ens160
The interface is under control of NetworkManager, setting zone to 'trusted'.
success

$ sudo firewall-cmd --zone=trusted --change-interface=ens192
The interface is under control of NetworkManager, setting zone to 'trusted'.
success

$ sudo firewall-cmd --zone=trusted --change-interface=ens192.99
The interface is under control of NetworkManager, setting zone to 'trusted'.
success

SELinux無効化

SELinuxを無効化する。有効になっているとルーティング(インタフェース・NICまたぎ)の通信が破棄されてしまう。

$ sudo setenforce 0
$ getenforce
Permissive

CentOSでのルーティング有効化

Linuxはデフォルトではルーティング(インタフェース・NICまたぎ)の通信が許可されていない。設定変更してルーティングを有効化する。トンネル上での通信なのでIPv4のみでOK。IPv6もルーティングさせる場合はipv6の設定も変更する。

$ cat /proc/sys/net/ipv4/ip_forward
0
$ su -
# echo 1 >/proc/sys/net/ipv4/ip_forward
# cat /proc/sys/net/ipv4/ip_forward
1

なお、この設定方法だと再起動等で設定がリセットされるため、別途永続化する設定が必要。Linuxそのものの設定方法を参照。

IPv6アドレス・疎通確認

ZOOT NATIVEの契約が完了していることを確認した上で、outsideインタフェースでIPv6アドレスの取得、IPv6通信が可能となっていることを確認する。

2409:10:24e0:2000::/64IPv6グローバルアドレスを取得できている。

$ ip -6 a
15: ens192.99@ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
    inet6 2409:10:24e0:2000:b8bb:e04d:d79a:xxxx/64 scope global noprefixroute dynamic
       valid_lft 2591913sec preferred_lft 604713sec
    inet6 fe80::2fc9:356d:ef33:cee9/64 scope link
       valid_lft forever preferred_lft forever

網内対向機器のリンクローカルアドレスが見えている。

$ ip -6 neigh
fe80::221:d8ff:fe9a:d1c1 dev ens192.99 lladdr 00:21:d8:9a:d1:c1 router REACHABLE
  • IPv6デフォルトルート

網内対向機器のリンクローカルアドレス宛にIPv6デフォルトルートが設定されている。設定されない場合はip -6 route addで自分でも設定可能。

$ ip -6 r
default via fe80::221:d8ff:fe9a:d1c1 dev ens192.99  proto static  metric 400
  • DS-Lite疎通確認

DS-Lite IPv4 over IPv6トンネルの対向機器宛の疎通確認をする。対向アドレスは2404:8e00::feed:100 (2017/9月現在) 今後変更の可能性あり。随時ZOOT NATIVE(インターリンク)、transix(インターネットマルチフィード)の最新情報を確認する。

$ ping6 2404:8e00::feed:100
PING 2404:8e00::feed:100(2404:8e00::feed:100) 56 data bytes
64 bytes from 2404:8e00::feed:100: icmp_seq=1 ttl=59 time=5.71 ms
64 bytes from 2404:8e00::feed:100: icmp_seq=2 ttl=59 time=2.71 ms
^C
--- 2404:8e00::feed:100 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 2.719/4.216/5.713/1.497 ms

$ traceroute6 2404:8e00::feed:100
traceroute to 2404:8e00::feed:100 (2404:8e00::feed:100), 30 hops max, 80 byte packets
 1  2409:10:24e0:2000::fffe (2409:10:24e0:2000::fffe)  1.071 ms  1.061 ms  1.581 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  2404:8e00:feed:ff07::2 (2404:8e00:feed:ff07::2)  5.506 ms  10.365 ms  9.893 ms
 7  2404:8e00::feed:100 (2404:8e00::feed:100)  17.772 ms  17.704 ms  11.916 ms

うまく接続できない場合はNetworkの再起動などを実施する。

(うまく接続できない場合)
$ sudo systemctl restart network

IPv4 over IPv6トンネル設定

ちょうどいい設定例がなかったが、こちらを参考にしつつhelpで確認しながら設定した。

linux-hacks.blogspot.jp

$ ip -6 tunnel help
Usage: ip -f inet6 tunnel { add | change | del | show } [ NAME ]
          [ mode { ip6ip6 | ipip6 | ip6gre | vti6 | any } ]
          [ remote ADDR local ADDR ] [ dev PHYS_DEV ]
          [ encaplimit ELIM ]
          [ hoplimit TTL ] [ tclass TCLASS ] [ flowlabel FLOWLABEL ]
          [ dscp inherit ]
          [ [i|o]seq ] [ [i|o]key KEY ] [ [i|o]csum ]
  • 設定コマンド

ipip6 (IPv4 over IPv6) トンネルを作成する。トンネル名はds-liteとする。(任意)

remoteはインターネットマルチフィードの対向機器アドレス、localはoutside側インタフェースにDHCPv6で割り当てられたIPアドレスを使用する。

$ sudo ip -6 tunnel add ds-lite mode ipip6 remote 2404:8e00::feed:100 local 2409:10:24e0:2000:b8bb:e04d:d79a:xxxx dev ens192.99

実際のトラフィック流れるトンネルインタフェースのFW設定はdropで全拒否(戻りパケットは許可される)

$ sudo firewall-cmd --zone=drop --change-interface=ds-lite
success

トンネルインタフェースを有効化する。

$ sudo ip link set dev ds-lite up
  • IPv4ルーティング(デフォルトルート)設定

トンネルインタフェース宛にIPv4デフォルトルートを設定する。

$ sudo ip route add 0.0.0.0/0 dev ds-lite
  • 状態確認

インタフェースの状態はこのようになる。

$ ip a
77: ds-lite@if4: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1452 qdisc noqueue state UNKNOWN qlen 1
    link/tunnel6 2409:10:24e0:2000:b8bb:e04d:d79a:4a82 peer 2404:8e00::feed:100
    inet6 fe80::9805:daff:fe9c:5d8b/64 scope link
       valid_lft forever preferred_lft forever

$ ip -6 tunnel show
ip6tnl0: ipv6/ipv6 remote :: local :: encaplimit 0 hoplimit 0 tclass 0x00 flowlabel 0x00000 (flowinfo 0x00000000)
ds-lite: ip/ipv6 remote 2404:8e00::feed:100 local 2409:10:24e0:2000:b8bb:e04d:d79a:4a82 dev if4 encaplimit 4 hoplimit 64 tclass 0x00 flowlabel 0x00000 (flowinfo 0x00000000)

$ ip r
default dev ds-lite  scope link
192.168.1.0/24 dev ens160  proto kernel  scope link  src 192.168.1.8  metric 100

疎通確認

IPv4でDS-Liteトンネル経由で通信できることを確認する。

逆引きDNSの結果より transix.jp (インターネットマルチフィード)を経由して通信できている。

$ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  ike-gw00.transix.jp (14.0.9.66)  3.063 ms  2.763 ms  2.737 ms
 2  ike-bbrt10.transix.jp (14.0.9.65)  2.994 ms  2.927 ms  2.940 ms
 3  210.173.176.243 (210.173.176.243)  3.799 ms  3.778 ms  3.747 ms
 4  108.170.242.129 (108.170.242.129)  3.877 ms 108.170.242.97 (108.170.242.97)  4.138 ms 108.170.242.129 (108.170.242.129)  3.725 ms
 5  108.170.236.179 (108.170.236.179)  4.530 ms 108.170.236.195 (108.170.236.195)  4.575 ms 216.239.54.21 (216.239.54.21)  4.622 ms
 6  google-public-dns-a.google.com (8.8.8.8)  4.211 ms  4.377 ms  4.341 ms

inside側のMacからはCentOS7を経由して同様に通信できている。

Mac: $ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 64 hops max, 52 byte packets
 1  o-cent-rt01.designet.local (192.168.1.8)  2.404 ms  0.978 ms  1.001 ms
 2  ike-gw00.transix.jp (14.0.9.66)  3.785 ms  3.350 ms  6.000 ms
 3  ike-bbrt10.transix.jp (14.0.9.65)  4.419 ms  4.177 ms  4.495 ms
 4  210.173.176.243 (210.173.176.243)  5.231 ms  4.827 ms  5.182 ms
 5  108.170.242.193 (108.170.242.193)  5.537 ms
    108.170.242.97 (108.170.242.97)  5.386 ms  5.042 ms
 6  72.14.236.107 (72.14.236.107)  5.284 ms
    209.85.143.51 (209.85.143.51)  5.706 ms
    216.239.41.247 (216.239.41.247)  5.453 ms
 7  google-public-dns-a.google.com (8.8.8.8)  5.106 ms  4.944 ms  5.183 ms

速度比較

従来の@nifty IPv4 PPPoEと、ZOOT NATIVE DS-Lite (IPv4 over IPv6)での通信速度を比較する。

従来IPv4 PPPoE

@nifty IPv4 PPPoE + Cisco ASA5505
-> 約5.8Mbps

f:id:daichi703n:20170903163444p:plain

ZOOT NATIVE DS-Lite

ZOOT NATIVE DS-Lite + CentOS7
-> 約66Mbps

十倍以上の速度が出ている。体感的にも各種通信が早くなった気がする。Cat2960がFastEthernet(100Mbps)モデルで、かつLinuxがワンアーム構成なので頭打ちになっているが、環境を整備すればさらなる速度向上が見込める。

f:id:daichi703n:20170903163459p:plain

traceroute

そもそものtracerouteでの中継装置の応答速度でも10倍程度の差が出ている。やはりIPv4 PPPoE網での遅延が大きかったということがわかる。

下記はIPv4 PPPoEでの測定結果。DS-Liteは前述の通り。

Mac: $ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 64 hops max, 52 byte packets
 1  asa5505 (192.168.1.5)  9.144 ms  1.565 ms  1.376 ms
 2  133.160.170.13 (133.160.170.13)  36.559 ms  44.012 ms  174.003 ms
 3  133.160.170.117 (133.160.170.117)  174.886 ms  130.233 ms  177.554 ms
 4  133.160.148.209 (133.160.148.209)  189.458 ms  171.760 ms  87.412 ms
 5  133.160.182.129 (133.160.182.129)  170.154 ms
    133.160.182.41 (133.160.182.41)  143.139 ms
    133.160.182.33 (133.160.182.33)  174.666 ms
 6  210.173.176.245 (210.173.176.245)  43.980 ms  131.435 ms  37.133 ms
 7  108.170.242.193 (108.170.242.193)  137.539 ms  38.798 ms
    108.170.242.97 (108.170.242.97)  135.910 ms
 8  209.85.255.33 (209.85.255.33)  177.034 ms
    72.14.236.129 (72.14.236.129)  41.840 ms
    209.85.255.173 (209.85.255.173)  37.989 ms
 9  google-public-dns-a.google.com (8.8.8.8)  44.316 ms  49.897 ms  49.448 ms

IPoEも使用可能

ZOOT NATIVEはDS-LiteとともにIPoE方式でのIPv6ネイティブ通信もサポートしている。そのため、こちらの記事で書いたCisco ASA 5505 での IPv6 NAPT方式によるIPv6インターネットアクセスも可能。

designetwork.hatenablog.com

まとめ - ZOOT NATIVE & CentOSでDS-Lite (IPv4 over IPv6) インターネット接続する

CentOS ( Linux ) を使用してZOOT NATIVE経由で transix (インターネットマルチフィード) へ DS-Lite (IPv4 over IPv6) インターネット接続した。これにより、IPv4インターネット網への通信速度が10倍程度向上した。引き続き無料期間はDS-Liteを使用し、ZOOT NATIVEを継続利用するか検討する。

Cisco ASA5505でインターネットにIPv6接続しNAPT通信する

f:id:daichi703n:20170826234810p:plain

自宅インターネットの速度が遅く不満が大きくなってきたため、改善を狙ってIPv6を導入してみる。Cisco ASAを継続利用するため制約事項はあるが、最低限のIPv6環境を構築することができた。

設定ポイントはこちら

2017/9/3 追記

ZOOT NATIVEのDS-Liteを使用し始めました。

designetwork.hatenablog.com

自宅ネットワーク概要

自宅ネットワークの概要は以下の通り。従来のPPPoE IPv4接続に加えて、IPv6(IPoE)オプションを追加して使用する。

  • @nifty+フレッツ IPv6接続オプション(無料オプション追加)
  • ASA5505(インターネットPPPoEルータ/FW)
  • Cat2960+AIR1141(PC/サーバ接続)

本当はIPv6プラスを使用して、IPv4 over IPv6 (JPNEなのでMAP-E)接続したいのだが、Cisco ASAでは使用不可…

対応機器リストはこちら

csoption.nifty.com

csoption.nifty.com

Cisco ASA5505のIPv6設定

こちらを参考にIPv6の設定を追加した。

Cisco ASA: IPv6 Quick Start - Cisco Support Community

基本的なフレッツPPPoE設定にIPv6(IPoE)の設定を追加していく。追加部分に+を付けているためコピペしづらいですがご了承ください。

InterfaceでのIPv6有効化・IPv6アドレス取得

Vlan1が自宅内ネットワーク、Vlan99がインターネットとしている。インターネット側はISPからの自動割り当て、内部側はユニークローカルアドレスとする。(ユニークローカル使用理由は後述)

interface Vlan1
 nameif management
 security-level 100
 ip address 192.168.1.5 255.255.255.0 
+ ipv6 address fd00:1::/64 eui-64
+ ipv6 address autoconfig
+ ipv6 enable
+ ipv6 nd ra-interval 30
!
interface Vlan99
 description internet
 nameif outside
 security-level 0
 pppoe client vpdn group nifty
 ip address pppoe setroute 
+ ipv6 address autoconfig
+ ipv6 enable

IPv6アドレス取得確認

上記インタフェース設定でIPv6アドレスが取得できることを確認する。

それぞれリンクローカルアドレスが生成されていることが分かる。また、Vlan1(management)ではユニークローカルアドレスを設定できている。そして、Vlan99(outside)では、ISPから割り当てられたグローバルユニキャストアドレスが取得できている。IPv6アドレスはサブネット単位で割り当てられ、私の環境(@nifty IPv6接続オプション)では/64のIPv6アドレスレンジをもらえている。

ASA5505# sh ipv6 interface
management is up, line protocol is up
  IPv6 is enabled, link-local address is fe80::xxxx:xxxx:xxxx:xxxx
  Global unicast address(es):
    fd00:1::xxxx:xxxx:xxxx:xxxx, subnet is fd00:1::/64
  Joined group address(es):
    ff02::1:xxxx:xxxx
    ff02::2
    ff02::1
  <snip>
outside is up, line protocol is up
  IPv6 is enabled, link-local address is fe80::xxxx:xxxx:xxxx:xxxx
  Global unicast address(es):
    240b:10:XXXX:XXXX:xxxx:xxxx:xxxx:xxxx, subnet is 240b:10:XXXX:XXXX::/64 [AUTOCONFIG]
      valid lifetime 2591870 preferred lifetime 604670
  Joined group address(es):
    ff02::1:xxxx:xxxx
    ff02::2
    ff02::1
  <snip>

AP・SW経由で接続しているMacBookでも、以下の通り、ASAからのRAを元にIPv6アドレスを生成できている。また、netstat -nrで、IPv6ゲートウェイ情報も登録されていることが確認できる。(route addが必要だったかも…記憶とログがあやしい…)

MacBook$ ifconfig en0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether xx:xx:xx:xx:xx:xx
    inet6 fe80::aa:xxxx:xxxx:xxxx%en0 prefixlen 64 secured scopeid 0x4
    inet6 fd00:1::xxxx:xxxx:xxxx:xxxx prefixlen 64 autoconf secured
    inet6 fd00:1::xxxx:xxxx:xxxx:xxxx prefixlen 64 autoconf temporary
    inet 192.168.1.105 netmask 0xffffff00 broadcast 192.168.1.255
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect
    status: active
MacBook$
MacBook$ netstat -rn
Routing tables

Internet6:
Destination    Gateway                         Flags    Netif Expire
default        fe80::xxxx:xxxx:xxxx:xxxx%en0   UGc        en0
default        fe80::%utun0                    UGcI     utun0
::1            ::1                             UHL        lo0

インターネット向けIPv6ルーティング設定

ASAでインターネット向けIPv6ルーティング設定をするために、ISP対向装置のIPv6アドレスを取得する。show ipv6 neighborコマンドでinterface: outsideで認識されているアドレスがISP対向装置のIPv6アドレスになっている。

ASA5505# show ipv6 neighbor 
IPv6 Address               Age Link-layer Addr State Interface
fe80::221:d8ff:fe9a:xxxx     1 0021.d89a.xxxx  STALE outside
fe80::9e5c:f9ff:fe23:xxxx    1 9c5c.f923.xxxx  STALE management

確認したISPIPv6アドレス宛にIPv6デフォルトルートを設定する。

+ ipv6 route outside ::/0 fe80::221:d8ff:fe9a:xxxx

IPv6 NAPT設定

自宅IPv6 LANからインターネットへのアクセスは、従来のIPv4と同様にNAPT(PAT)で通信させる。理由は、通常のセキュリティ対策に加え、ASAの機器仕様でLAN内でISPから割り当てられたグローバルアドレスを使用できないという制約より。

ユニークローカルアドレスレンジからの通信をoutsideインタフェースのIPv6アドレスにNAPTするように設定する。

object-group network Internet-PAT
 description internet
 network-object 192.168.0.0 255.255.0.0
nat (management,outside) source dynamic Internet-PAT interface
+ object network inside_v6
+  subnet fd00:1::/64
+  nat (management,outside) dynamic interface ipv6

(参考) www.cisco.com

Cisco ASAはIPv6ブリッジをサポートしていない

IPv6環境は、本来はNATなしでPCでもグローバルアドレスを使用するように設計されている。ISPからの割り当てを受ける際には、DHCPv6-PD(prefix delegation)を使用することになる。

IPv6アドレッシングに関してはこちらを参照 www.infraexpert.com

このDHCPv6-PDで必要となるIPv6ブリッジをASAではサポートしていない。 supportforums.cisco.com

そのため、代替手段としてインターネットアクセスには従来と同様の考え方でIPv6 NAPTを適用する。

動作確認・スピードテスト

LAN内のPC(MacBook)からIPv6でのインターネットアクセスを確認する。こちらのサイトでIPv6での接続情報を確認する。

test-ipv6.com

以下の通り、IPv6でインターネットにアクセスできている。

f:id:daichi703n:20170823015111p:plain

スピードテストの適切なサイトが分からずアメリカ宛だが、スピードテストではIPv4: 5Mbps, IPv6: 29Mbpsと、約6倍の通信速度となった。

f:id:daichi703n:20170823015012p:plain

(参考)IPv6動作確認先はこちらを参照
DS-Lite 接続確認機種情報 - インターネットマルチフィード

ちなみに、@nifty(フレッツ)のIPv6はIPoEなので、MacBookを直接ONUに接続するだけでIPv6通信が可能となる。

IPv4 over IPv6は未設定

今回の設定はIPv6インターネットに接続する設定のみで、DS-LiteのようなIPv4 over IPv6トンネルの設定はしていないため、高速化対象はIPv6対応サイトのみであまり効果がない…

まとめ - Cisco ASA5505でインターネットにIPv6接続しNAPT通信する

Cisco ASA5505にIPv6の各種設定を追加して、インターネットにIPoEでIPv6接続し、NAPTによりLAN-PCからもIPv6通信ができるようにした。これにより、IPv6対応サイトのみにはなるが、高速インターネットアクセスが可能となった。

追加設定(抜粋)

interface Vlan1
 nameif management
 security-level 100
 ip address 192.168.1.5 255.255.255.0 
+ ipv6 address fd00:1::/64 eui-64
+ ipv6 address autoconfig
+ ipv6 enable
+ ipv6 nd ra-interval 30
!
interface Vlan99
 description internet
 nameif outside
 security-level 0
 pppoe client vpdn group nifty
 ip address pppoe setroute 
+ ipv6 address autoconfig
+ ipv6 enable
!
+ ipv6 route outside ::/0 fe80::221:d8ff:fe9a:xxxx
!
object-group network Internet-PAT
 description internet
 network-object 192.168.0.0 255.255.0.0
nat (management,outside) source dynamic Internet-PAT interface
+ object network inside_v6
+  subnet fd00:1::/64
+  nat (management,outside) dynamic interface ipv6

Kibana6.xのReporting CSV Export機能を試してみる

f:id:daichi703n:20170717192510p:plain

Kibanaで長らく要望されている機能である、Discoverタブでの検索結果をCSVエクスポートする機能が、Version.6からついに実装される。GAリリースが待ち遠しく、Alpha版を試してみた。

github.com

Kibana 6.0.0-alpha2 is released | Elastic

CSV export

Did someone say CSV export? We’re pretty sure we heard someone ask for CSV export. Just to be safe, we built CSV export.

Search for the documents you want to export in the Discover app, and then export matching documents as a CSV file via the reporting menu. CSV export comes with X-Pack basic, which is our free license.

ElasticスタックVer 6.0.0を試す

ElasticスタックVer 6.0.0は2017/7月現在alpha2版がリリースされている。本記事時点でalphaリリースのため画面等は変更になる可能性がありますがご了承ください。

CSVエクスポート機能はX-Pack Reportingのうちの無償範囲で提供される。

検証用にDockerコンテナでKibana + Elasticsearchを構築する。docker-compose.ymlファイルはこちらの通り。設定は環境変数で与え、X-Pack Securityは無効化している。(インストールはElasticのリポジトリ追加によりYumでも可能)

$ sudo vi ./docker-compose.yml
version: '2.1'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.0.0-alpha2
    container_name: els_60
    environment:
      - bootstrap.memory_lock=true
      - xpack.security.enabled=false
      - xpack.monitoring.history.duration=1d
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "network.host=0.0.0.0"
      - "http.host=0.0.0.0"
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    mem_limit: 1g
    memswap_limit: 1g
    volumes:
      - es_data1:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - kibana_net
  kibana:
    image: docker.elastic.co/kibana/kibana:6.0.0-alpha2
    container_name: kibana_60
    environment:
      SERVER_NAME: "kibana.designet.local"
      ELASTICSEARCH_URL: "http://els_60:9200"
      XPACK_MONITORING_ELASTICSEARCH_URL: "http://els_60:9200"
      XPACK_SECURITY_ENABLED: "false"
    ports:
     - 5606:5601
    networks:
      - kibana_net
    depends_on:
      - elasticsearch
    links:
      - elasticsearch
volumes:
  es_data1:
    driver: local
networks:
  kibana_net:

CSV Export動作確認

起動したElasticsearch, Kibanaでindex取り込み設定をすると、DiscoverタブからRepoerting > Generate CSVでSave済みの検索をエクスポートできる。

f:id:daichi703n:20170717185817p:plain

生成されたCSVファイルをダウンロードすると、以下の通りCSV形式のファイルを得られる。

timestamp,"source_node.ip","source_node.name","cluster_state.status","_type"
"2017-07-17T09:54:16.189Z","172.19.0.2",SstbTYy,,"index_stats"
"2017-07-17T09:54:16.189Z","172.19.0.2",SstbTYy,,"index_stats"

これまではPDFでのエクスポートだったが、CSVでのエクスポートが可能になり、外部連携が容易になる。

なお、Discoverタブで単純にindexを開いた状態ではReport機能は使用することができず、以下のメッセージが表示される。

Please save your work before generating a report.

そのため、カラムの選択をしてSaveしてからReporting機能を使用する。

Virtual Memoryのエラー対応

DockerでElasticsearchを動かす場合にはこちらの通りVirtual Memoryの拡張が必要。

www.elastic.co

els_60           | ERROR: [1] bootstrap checks failed
els_60           | [1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

まとめ - Kibana6.xのReporting CSV Export機能を試してみる

Kibana6.xのX-Pack Reportingに含まれるCSV Export機能を試してみた。期待通りの動作が可能だったため、これまでの独自パッチ適用は不要で、X-Packを適用すればよくなる。X-Packではあるが無償範囲で使用可能であるため、ハードルなく使用できる。

Kibana5にパッチ適用しDiscoverタブからCSVエクスポートする

f:id:daichi703n:20170717024455p:plain

こちらの記事でKibanaのDiscoverタブからExportできる機能追加版をビルドしたが、正直かなり手間がかかった。

designetwork.hatenablog.com

時間が経ち、同様機能をパッチとして作成した方がいるようなので、使ってみた。

github.com

Kibana Exportパッチの使い方

作成者から紹介されている使用方法はこちらの通り。内容を確認したところ、パッチはsrcディレクトリの内容となっていた。それを置き換えた上でoptimizeを削除し、起動時に再作成する。(自動的に)

cd ${KIBANA_HOME}
tar -zcvf optimize-backup.tar.gz
rm -rf optimize
wget https://github.com/fbaligand/kibana/releases/download/v5.4.0-csv-export/csv-export-patch.tar.gz
tar -zxvf csv-export-patch.tar.gz
rm -f csv-export-patch.tar.gz
bin/kibana

Dockerでデプロイする

Kibanaは既に動かしている環境があり、競合を避けるために、Dockerコンテナとしてパッチ適用版のKibanaをデプロイする。

Docker-Composeで以下の通りデプロイできるようにした。なお、Elasticseach関連のパラメータは環境変数から読み込むようにはしておらず、configディレクトリをマウントする形にしている。

github.com

$ tree
.
├── README.md
├── docker-compose.yml
└── kibana_5.3
    ├── Dockerfile
    └── config
        └── etc
            ├── kibana.log
            └── kibana.yml

ベースイメージはシンプルにCentOSから作成する。ElasticオフィシャルはX-Packインストールなど、多機能で起動が重いと感じている。なお、既存のElasticsearchがVer.5.3.0のため、Kibanaもバージョンを揃えている。パッチは各バージョン向けにリリースされているので、該当のバージョンを使用する。

$ sudo vi ./kibana_5.3/Dockerfile
FROM centos

RUN rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
RUN echo $'[kibana-5.x]\n\
name=Kibana repository for 5.x packages\n\
baseurl=https://artifacts.elastic.co/packages/5.x/yum\n\
gpgcheck=1\n\
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch\n\
enabled=1\n\
autorefresh=1\n\
type=rpm-md' > /etc/yum.repos.d/elastic.repo

RUN yum install -y kibana-5.3.0-1

WORKDIR /usr/share/kibana
RUN curl -OL https://github.com/fbaligand/kibana/releases/download/v5.3.0-csv-export/csv-export-patch.tar.gz
RUN tar -xzvf ./csv-export-patch.tar.gz
RUN chown kibana:kibana -R ./src
RUN rm -rf ./optimize/*

CMD /usr/share/kibana/bin/kibana

docker-composeファイルはこのようにかなりシンプル。

$ sudo vi ./docker-compose.yml
version: '2.1'
services:
  kibana:
    build: kibana_5.3
    container_name: kibana_5.3_export
    ports:
     - 5605:5601
    networks:
      - kibana_net
    volumes:
      - ./kibana_5.3/config/etc/:/etc/kibana/
networks:
  kibana_net:

設定ファイルは個別に作成して、コンテナ起動時にマウントする。logging設定はマウントディレクトリをひとつにするために同一ディレクトリに出力。

$ sudo vi ./kibana_5.3/config/etc/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
server.name: "kibana.designet.local"
elasticsearch.url: "http://192.168.1.81:9200"
logging.dest: /etc/kibana/kibana.log

起動時に若干時間を要する

起動時にはoptimizeの処理で数分の時間を要する。私の環境では下記の通り90秒程度でKibanaが上がってきた。(logをSTDOUTしている状態)

$ sudo docker-compose up
Starting kibana_5.3_export ...
Starting kibana_5.3_export ... done
Attaching to kibana_5.3_export
kibana_5.3_export | {"type":"log","@timestamp":"2017-07-16T17:17:12Z","tags":["info","optimize"],"pid":1,"message":"Optimizing and caching bundles for kibana, timelion and status_page. This may take a few minutes"}
kibana_5.3_export | {"type":"log","@timestamp":"2017-07-16T17:18:43Z","tags":["info","optimize"],"pid":1,"message":"Optimization of bundles for kibana, timelion and status_page complete in 90.28 seconds"}
kibana_5.3_export | {"type":"log","@timestamp":"2017-07-16T17:18:43Z","tags":["status","plugin:kibana@5.3.0","info"],"pid":1,"state":"green","message":"Status changed from uninitialized to green - Ready","prevState":"uninitialized","prevMsg":"uninitialized"}

エクスポート動作概要

パッチ適用版だと、このようにExportが可能になっている。なお、Discoverタブの中でもカラム選択してSaveしOpenすることでExportが可能となる。そうしないと_sourceのみが表示されてしまう。

f:id:daichi703n:20170717004210p:plain

ここから以下のようにCSVでのエクスポートができる。

"@timestamp",action,"if_src","if_dst",proto,direction,"ip_src","ip_local","port_src",nat,"ip_dst","port_local","port_dst"
"July 17th 2017, 00:40:00.000",Built,outside,management,tcp,outbound,"172.217.27.68"," - ",443," - ","192.168.1.104",,"53,574"
"July 17th 2017, 00:40:00.000",Built,management,outside,tcp," - ","192.168.1.104"," - ","53,574",dynamic,"222.159.141.103",,"53,574"
"July 17th 2017, 00:40:00.000",Built,management,outside,tcp," - ","192.168.1.104"," - ","53,575",dynamic,"222.159.141.103",,"53,575"

まとめ - Kibana5にパッチ適用しDiscoverタブからCSVエクスポートする

Kibana5でパッチを適用しDiscoverタブから検索結果をCSVエクスポートできるようにした。シンプルな操作でエクスポート機能を追加できるため、非常に有用なパッチと評価している。