LGTM

Looks Good To Me

networking

local-as と as-override を併用したときのルーティング

大抵のルーターには、local-as / as-override という機能があります。 local-as 一部のneighborに対し、自分自身のオリジナルAS番号とは別のAS番号としてふるまう as-override 一部のneighborに対し、AS_PATH中の該当peer ASを自分のAS番号に置換して経路広…

PeeringDBの過去データを読む

インターネットルーティングに関わっていると、まれに PeeringDB の過去データを集計したくなります。 https://www.peeringdb.com から現在の情報は取れますが、「過去に遡りたい」「特定の国・地域・事業者に注目して時間推移を見たい」といった要望を満た…

packer で vEOS Vagrant Box を作る

Arista vEOS 4.19 までは Software Download ページから .box をダウンロードできましたが、 現時点で 4.20 ~ 4.27 にはありません。 そこで jerearista/vagrant-veos を使って .vmdk から .box を作ります。 環境 Software version VirtualBox 6.1.26 packe…

日本はアジアのハブになれたのか?

通信キャリアや IX に勤務していたころ、よく「日本をアジアのハブにしよう」と言っていました。 データを整理する機会があったので「実際のところどうなの?」をまとめてみます。 話の背景は文末に回しました。もしご興味あればどうぞ。 「日本をアジアのハ…

inet-henge for large scale network diagrams

inet-henge is a d3.js based network diagram generator that calculates node positions automatically. The input is a simple json like below, it requires no position information such as x-y coordinates. { "nodes": [ { "name": "A" }, { "name":…

ネットワーク標準化ギプス

テキストやファイルで設定管理されるようなネットワークの、設定標準化・テンプレート化・Validation について書きます。 経験上、ISP・コンテンツプロバイダなどのネットワークでうまくいった手法ですが、よりよい方法があるかもしれません。ご指摘・コメン…

ネットワークは宣言的になりえるか

2020-07-08 追記 はじめに Kubernetes などのコンテナオーケストレーターとの対比によって、ネットワークの世界でも同じように制御できないか注目されています。Cisco、Apstra、VMWare などが言う "Intent Based Networking" や "Closed Loop Automation" も…

inet-henge が出力する SVG の変更点

TL; DR リンクラベルをノードの上に描画するため、SVG DOM 構造を変えました CSS を適用している場合は、修正する必要があるかもしれません いまさらですがVersioning 始めます 問題: リンクラベルがノードの裏に回ってしまう これまでのinet-hengeには、上…

Vagrant Box の Juniper vQFX を、VMWare ESXi で起動するメモ

Juniper の vQFX10000 トライアル版 は community supported project として Vagrant で利用可能です。ただ VirtualBox provider のみのサポートであり、他ベンダーの VM と組み合わせてテストすることを考えると、ネットワーク設定が簡単な VMWare ESXi な…

EVPN - VLAN Based と VLAN Aware Bundle の相互接続

TL; DR EVPN は仕様が標準化され、Control / Data Plane が分離されているにも関わらず、Service Interface が異なる場合 ふつうは相互接続できません。 これがマルチベンダー EVPN を困難にする一因になっています。 この記事では Juniper vQFX (VLAN Aware…

設定ファイルエディターをつくる方へ

JANOG43 でライトニングトークしてきました speakerdeck.com] NETCONF向けのコマンド(xml) とCLI向けのコマンド(text) が似ているため、XMLスキーマから抽象構文木が作れる 抽象構文木からエディターを作れる ためしにJunos向けの実装をしてみたが、他ベンダ…

libwireshark のdissector を借りて、バイト列をパケットとしてデコードする

Wireshark という強力なプロトコルアナライザーがあります。多くのプロトコルをサポートし、「どんなパケットが流れているか分からないが、プロトコルスタックの深いところまで解析したい」場合には 非常に頼りになります。 この記事では、いくつかのプログ…

プログラムから高速に経路ルックアップするアプローチ

やりたいこと 開発中のプログラム内で、高速に経路ルックアップしたい場合があります。 私の場合、いま直面しているのは「netflow なり sflow なりを収集するとき、collector 側で経路ルックアップして Origin AS を解決したい」です。 デフォルトルートや M…

inet-henge で、好みのネットワーク図を描くヒント

2020-02-25追記: SVG DOM が変更になったため、この記事のCSS ではスタイルが壊れるかもしれません。こちら も参考にしてください。 「構成管理DB から自動でネットワーク図を描く」というコンセプトで、inet-henge というライブラリを開発しています。 ネッ…

JUNOS 17.2 の PEGパーサーで文法チェックする

ネットワーク運用のために、生成した / 手書きしたコンフィグを CIでテストしています。 おおよそ次のような単純なワークフローです。 コンフィグジェネレーターを実行、生成されたコンフィグをGitHub にpush あるいは、手書きしてpush Travis CI、Jenkins …

パブリックデータから経路リークを探る

2017/08/25 12:30 (JST) ごろ、日本国内で大規模な通信障害が観測されました。 通信障害の内容について、とても詳細にまとめられている記事があります。 d.hatena.ne.jp 障害の内容はさておき、このエントリでは障害のしくみについて探ってみようと思います…

sFlow は面倒くさいが、fluent-plugin-sflow を再実装する話

背景 ネットワークデバイスからの xFlow を Fluentd で集めて分析、あるいは可視化するということをよくやります。 ルーター製品であれば fluent-plugin-netflow が使えますが、スイッチ製品はそもそも NetFlow がサポートされていません。代わりに sFlow に…

RIB / FIB コンバージェンスを可視化する方法論

高価なテスターを使わず、なんとかRIB / FIB コンバージェンスを計測することを考えています。 コンバージェンスとは ネットワークにBGP イベントが到着してから、さまざまな計算を行い、イベントを送信し、定常状態に落ち着くまでのプロセスをコンバージェ…

xlogin でコマンド自動投入→手動制御 を繰り返す

コマンド群を入れる 手動制御 別のコマンド群を入れる 手動制御 … を大量デバイス上でやりたい、ということがありました。 codeout.hatenablog.com これを少しいじると便利になります。 # configure.tcl source [file join [file dirname [info script]] jun…

Routing protocols' seed metrics for redistributing

When routes are redistributed into another routing protocol, their metrics are also translated to different values depending on vendor implementation and routing protocol which the routes are being redistributed to. Tables below show what …

inet-henge にいくつか機能を足した

2020-02-25追記: SVG DOM が変更になったため、この記事のCSS ではスタイルが壊れるかもしれません。こちら も参考にしてください。 inet-henge というネットワーク図生成ライブラリーに リンク太さを変えられる リンク両端に加え,中央にラベルを置ける 地…

Large BGP Community がやってくる前に,Community マッチをおさらいしよう

2017 / 02月,BGP Large Communities Attribute (RFC8092) がRFC 化された. これは新たに 4Bytes:4Bytes:4Bytes のBGP Community を使えるようにするもので,既存の BGP Community (RFC1997) - 2Bytes:2Bytes Extended BGP Community (RFC4360) - 4Bytes:2B…

ステルスWiFi AP を駆逐した

macos がステルスWiFi AP に接続したときに脅してくるこれ,しばらく意味が分からなくて放置していた. たぶんこういうことかな,というのを教えてもらって「なるほど,良くないかもしれん」と思い駆逐した. SSIDをstealth設定にしているAPにつなぐと、以後…

BGP Community を透過する事業者がどれくらいいるか調べた

11月末にInternet Week 2016 というイベントで,「BGP Community の基本設計」について発表してきた.内容については 発表スライド をご覧いただければ良いかな と思うが,壇上から挙手アンケートを取ってみてびっくりした. 「顧客から受信したBGP Communit…

xlogin でコマンド自動投入したあと,手動制御にもどす

xlogin -s に渡すexpect スクリプトを書けばよい. 設定投入は自動でやって,温かみのある commit を打ちたい場合などにつかう.( そんなのcommit まで自動でやれよ,という話ではある) jlogin の例 log_user 1 # 既存のrun_commands を参考に proc run { pr…

MRAI とBGP Withdrawn とパケットロス

BGP には,無駄な経路計算を減らすためのMRAI Minimum Route Avertisement Interval) というしくみがあります.BGP Update を送信する前に一定時間待ち,経路変化をバッファリングできる機能です.バッファ中にさらに経路変化があった場合,BGP Update を二…

MRAI の代表的なふるまい

BGP には古くからMRAI (Minimum Route Advertisement Interval) という機能がある. イマイチ理解していなかったが,動作を確認しておく必要があり いくつかの実装を調査した. ざっくり言うと vSRX IOS-XRv Quagga 新しいprefix の追加時 MRAI 待つ MRAI 待…

unicast route の変更により,flowspec validation は走るか

flowspec は forwarding に関するルールをルーター間で伝え合うプロトコルで,「他者から受け取ったルールを適用する前にvalidation しなさい」と仕様で決まっている. では,validation するのはいつだろう? flowspec route を受け取ったとき flowspec rou…

高速にnetflow を吐く

最近 netflow コレクターをさわる機会が多く「コレクターをベンチマークしたい」と思っている. 「netflow v5 なら何 flow/s まで受けられる」「v9 ならこのくらい」など,性能限界を知っておきたい. 2016/02/20 追記: NetFlow-Generator 戦略 いくつか考え…

junoser internals

junoser というRuby gem をメンテしている. これはJUNOS Config のPEG パーサーで,標準入力やファイルを JUNOS Config として構文解析できる.解析後,文法チェックやスタイルの変換もできる. たとえば, 構文チェック.display | set 形式とデフォルトの…