eBPFには BPF_PROG_TEST_RUN と呼ばれる機能がある。これを活用すると、XDPやtc-bpf(8)向けに実装したパケット処理プログラムの挙動をテストすることができる。 BPF_PROG_TEST_RUN? BPF_PROG_TEST_RUNはbpf syscall経由で使用できる1機能。テストしたいeBPF…
最近のNICの中にはTCハードウェアオフロード機能を持っているものがあり、これを使えばNICハードウェア上でパケット転送処理に手を加えられることは以前のエントリで簡単に紹介した。 yunazuno.hatenablog.com 今回はこれを応用し、NICハードウェア上でL3ス…
Pythonなコードから ethtool -S 相当のNIC統計情報を取得する必要に迫られたときどうするか。ただし ethtool コマンドの出力結果をパースする方法は使用しないものとする。 $ python -V Python 3.6.5 $ uname -a Linux laptop 4.16.12-200.fc27.x86_64 #1 SM…
Linuxのtcには、指定した条件にマッチしたパケットをドロップしたりヘッダを書き換えたりするためのflowerフィルタが存在する。 tc-flower(8) - Linux manual page 最近のNICの中にはこの処理をハードウェアにオフロードできるものがあり、通常のソフトウェ…
FRRouging (FRR)という、Quaggaからフォークしたルーティングデーモンがある。 github.com FRRはRFC 5549に対応しており、bgpdで受信したIPv6ネクストホップを持つIPv4経路をzebra経由でLinuxカーネルのルーティングテーブルへインストールすることができる…
Linuxのネットワークスタックでmultipathを使用する場合の設定方法と挙動に関するメモ。 設定方法 設定自体は ip route add コマンドで nexthop を複数指定するだけ。src の指定は必要に応じて。 # ip route add 10.1.1.0/24 src 10.0.0.3 \ nexthop via 192…
Linux kernel 4.4から登場した、L3 Master Device (l3mdev) によるVirtual Routing and Forwading (VRF) を軽く触ってみたメモ。 そもそも何をするためのものなのか Linuxのネットワーク廻りを触っていると、たまに「特定のネットワークインタフェースから入…
XDP (eXpress Data Path) ネタ。 パフォーマンス上の理由から、XDPのパケット処理はskbが割り当てられる前にNICドライバから直接呼び出させる。そのため、XDPプログラムの動作にはNICドライバ側でのサポートが必要となる。 5月時点での対応ドライバリストは…
自宅マンションで光配線方式のフレッツが使えるようになったので、これを機にルータの入れ替えとv6プラス(IPv6 IPoE)化を実施したメモ。 結論から言うと、IPv4 PPPoE時代に発生していた夜間帯の輻輳が解消され、かなり快適になった。 構成変更前の環境 現住…
4月に開催されたnetdev 2.1で面白いセッションがあったのでメモ。 Facebookが使用しているレイヤ4のロードバランサに関する発表で、従来はIPVS (LVS) を使用していたが、XDPベースで自ら開発したものに移行しつつある、という内容。 XDP Production Usage: D…
eBPFにはtail callと呼ばれるプログラム呼び出し方法が存在する。 これは、ある実行中のBPFプログラムから別のBPFプログラムにジャンプするものである。あくまでジャンプであって、通常の関数呼び出しと違って呼び出し元に処理は戻らない。ユースケースとし…
Linuxカーネル4.10からvirtio_netがXDPをサポートするようになった。だが、動作させるには少しオプション変更が必要となる。 Qemuの起動オプションに下記を渡すことでここに記載のあるオフロード機能が無効になり、XDPが動作するようになる: gso=off,guest_t…
Linux kernel 4.4以降には,eBPF map/programを"永続化"する仕組みが実装されている.ここではその概要を説明しつつ,iovisor/bccを使って実際にその動作を確かめてみる. Background: eBPF objectを複数プロセスで共有したい eBPFにmapというデータ構造があ…
今更ながら,GoogleのMaglev論文で提案されているMaglev Hashingを手元で実装してみた. Maglev: A Fast and Reliable Software Network Load Balancer Maglev Hashingとは 所謂Consitent Hashの一種.Maglevロードバランサにおけるリアルサーバ選択に使用さ…
先日netdev 1.2に参加してみたところ,XDP(eXpress Data Path)の話題で持ち切りといった感じだった. というわけで,XDPについて一通り調べつつ,実際に触ってみた. XDPとは何か? 誤解を恐れずに一言で言うと,「Intel DPDKのような高速パケット処理基盤を…
少し前に,Facebookのロードバランサが話題になっていた. blog.stanaka.org このエントリを読んで,各種Webサービス事業者がどういったロードバランスアーキテクチャを採用しているのか気になったので調べてみた. ざっくり検索した限りだと,Microsoft, Cl…
OS X 10.11 El Capitanのインターネット共有機能を使うと,IPv6インターネット接続性が無い環境であってもIPv6 only networkを作ることができる,とAppleは言っている.どういう仕組みなのか少し調べてみたところ,AAAA filterに似た仕組みをDNS64に組み込ん…
去年のJANOGで別の方が発表された内容とダダ被りではあるものの,折角なのでメモ程度に書いておく. 概要 データセンタネットワークやバックボーンネットワークの運用をやっていると,インターネットに出入りするトラフィックの内訳 (どのISP向けのトラフィ…
実は一般的に知られている問題なのかもしれないものの,最近知ったのでメモ. 概要 一部のロードバランサアプライアンスにおいて,搭載されているHTTPSクライアントが所謂"モダンな"暗号スイートに対応していないものが存在する このため,特定条件下におい…
気付けば石狩から帰ってきて1週間も経ってしまったものの、まだなんとか記憶に残っているうちに「さくら石狩DC見学ツアー」に参加してきたレポートを。 今回のツアーの応募理由 「他所のデータセンターの中がどうなっているか見てみたい」というのがツアーに…
NetFlowまわりの諸々を触りたいとき,VyOSだとハードウェアを別途用意しなくても手軽に色々試せて便利. VyOSの設定 PlixerとManageEngineの記事を見つつ,下の設定さえあればとりあえず動く.Timeout値まわりは環境に合わせて要調整.バージョンはVyOS 1.0.…
先日googleとakamaiは仲良し?というエントリを読んだとき,恐らくEDNS Client Subnet Optionだろうとは思った*1ものの,EDNS Client Subnet Optionの動作をきちんと把握してはいなかったので,この機会にdraftを読んでみた. 概要 DNS権威サーバの中には,…
あるファイルに含まれるIPアドレスをgrepしたいとき,/32なり/128なりのIPアドレスそのものではなく,サブネットでgrepできると便利な場面が多々ある.それらしき物が無いか探したところ,grepcidrというツールがあったのでメモ. 導入 単純にソースコードを…
PythonのXMLパーサモジュールであるlxmlのxpathにおいて,正規表現を使って検索をする方法のメモ. いま,下のようなXMLがあるとする. <rrd> <rra> <cf>AVERAGE</cf> <pdp_per_row>1</pdp_per_row> </rra> <rra> <cf> AVERAGE </cf> <pdp_per_row>5</pdp_per_row> </rra> <rra> <cf>MAX</cf> <pdp_per_row>1</pdp_per_row> </rra> <rra> <cf> MAX </cf> <pdp_per_row>5</pdp_per_row></rra></rrd>
BINDやNSDといったDNSサーバのゾーンファイルをpythonで扱うライブラリは幾つかある.その中でもdnspythonはある程度メンテされていて,かつ使いやすそう. インストール pipでインストール可能.ただしPython 2.xと3.xとでパッケージが分かれているので注意…
ISC DHCP serverでDHCPサーバを運用するとき,IPアドレスをリースするタイミングで任意のコマンドを実行したいことがある.例えば,クライアントのMACアドレスとリースしたIPアドレスのペアをデータベースに入れておきたい,といった場合. こういった場合,…
最近Norikraを触っていて,ある程度使い方が分かってきたのと,丁度v1.0.0もリリースされたので,忘れないうちにこのタイミングでメモしておく. 本来Norikraはリアルタイムなログ等に対して処理をするものであるけども,今回は過去に蓄積されたログに対して…
いくつか躓いた箇所があったのでメモ. 正しく動作する導入方法 Launchpad上のオフィシャルページからPython 3.x向けのパッケージをダウンロードし,展開する. $ wget https://launchpad.net/oursql/py3k/py3k-0.9.3/+download/oursql-0.9.3.zip $ unzip ou…
タイトル通り. URI v6linklocal = new URI("http://[fe80::1%9]/foo"); を呼ぶとURISyntaxExceptionが返ってくる. scope_idについては,RFC 4007で文書化されている.しかしAndroid Developersに A Uniform Resource Identifier that identifies an abstra…
すぐ忘れるのでメモ.随時追加. 環境 Fedora 17 x86_64 ThinkPad x200 7454-CTO 4GB * 2 メモリ 250GB SSD (Samsung MZ-7TD250B/IT) /boot : 1GB, ext4 / : 残り全部, ext4 OSインストール直後 MIN_UID / MIN_GIDの変更 Fedora 16から,一般ユーザのUID/GID…