ことなかれblog 備忘録

何事もなく無事でありますように

EDNS0


○ DNSトラブルシューティング

IPv6,DNSSECなどで、DNSサーバの要件が大きくかわっていました。
ISP運用なら不可避な内容なのでメモを。

□ DNSの512byteの壁
元来、DNS問い合わせ・応答は(ヘッダを除く)データサイズが512byte以下でないといけませんでした。*RFC1035
当時のインターネットの信頼性を考慮した時、1パケットでうけとれるサイズ=576byteに入るようにしていたのでした。*RFC791
*Aレコードのラウンドロビンで8レコード以上を見ないのはこのサイズが限界になるからのようで

IPv6の登場、DNSSEC対応、spam対応のTXTレコード、DomainKeysなどなどDNSデータを使ったやりとりが
ふえてきたことにより、DNS応答のデータサイズが512byteというのは現実的ではなくなってきました。
で、512byteの壁をこえるための手法が

・TCP Fallback
・EDNS0
となります。

□ TCP Fallback
実際にdigコマンドで確認してみます。
512byteより大きいデータで応答が帰ってくるgTLD(.gov)を公開DNSに聞いてみます。

$ dig @4.2.2.1 +dnssec +bufsize=512 gov ;; Truncated, retrying in TCP mode. *1) ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> @4.2.2.1 +dnssec +bufsize=512 gov ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37290 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags: do; udp: 4096 ;; QUESTION SECTION: ;gov. IN A ;; AUTHORITY SECTION: gov. 71114 IN SOA a.usadotgov.net. nstld.verisign-grs.com. 1353927601 3600 900 1814400 86400 gov. 71114 IN RRSIG SOA 7 1 86400 20121201100021 20121126100021 11596 gov. CzGbjEQvgj14d2nXlK5kyZtBTGSf46AKU5Kv1f+yw7Ez7JHOv++88Mih 4nMf/vIB04/zycK2Cv4qmnQZ5cJBuQ5gR3v5Pi0xEDefEjuIZHLFf61F wFkdpamKn/fNA0SRMFZzvvYCJI451ONyGoT/+V6GJr4bkHPvFwPgw1ok gr08mH2hp1Q6h+bfcZkmNrm3LGrDzqpfUsb2Yc+WhO7MV6jTksMPe/0A Wil9cmBZq1dUJYyaxstSvG6Ete53cxGJQBXJ5PONvj0CcVovKITY/CBE Ep5aCP6uaVYjT2H10QXqUSWnbVNF6M+n9n3YzH1xUOu2H1ttUVeEJKDh e+iiuw== 578et16s7ltnsq1t0amm21gl20oj5g76.gov. 71114 IN NSEC3 1 0 8 4C44934802D3 578H5NT2EIQH2T6CETLNEBNTL52T0ET8 NS SOA RRSIG DNSKEY NSEC3PARAM 578et16s7ltnsq1t0amm21gl20oj5g76.gov. 71114 IN RRSIG NSEC3 7 2 86400 20121201100021 20121126100021 11596 gov. oToOjRlj4fMiPWTlbKbPdg0nPhorEAVy319tot3LnbckP/nfBD7G+Fvm yuPUVCTSRcpdKPb+Y8kqJsQVfUz2SyHjiIGVHq0hOIDFPzp/0giWjwfI h/wJ2wqr7TsJqgITsNrFaSBvVjSY3ILZVn5tbeBmHM/JlG0x7CbQ6kHI apokRROyvEB4o3i3OxKWhSGn3scoUyT3lQCIQ6Km/r6vSmQ+GYsNJzTP eo0q1TmCvuxY1bY5euoFqrByoy5k1O1v+9hpn1cHADuHjFDJh8rWNFiz /3Bk1wwXfVIyfdp/HXq0SiNj+WvNhKN8ZfeCyBdctDMBQIhzQI46npJm aqCJ7w== ;; Query time: 111 msec ;; SERVER: 4.2.2.1#53(4.2.2.1) ;; WHEN: Tue Nov 27 00:22:45 2012 ;; MSG SIZE rcvd: 773 *2) *1) TruncatedしたのでTCPでリトライしましたといってます。 *2) MSG SIZEが773(512byte)以上です。

これもRFCの仕様ですが、DNS Request QueryはかならずUDPで問い合わせしなければなりませんので、 1.UDPで問いあわせ 2.Resposeのデータサイズが512byteをこえるとき、権限サーバは、TCbit=1(Truncated) をつけて返す 3.Truncatedを受け取った問い合わせサーバは、TCPで問いあわせしなおす これがTCP FallBackです。 □ EDNS0 TCP Fallbackで512byteの壁を越えることができましたが、 そもそもDNSの応答速度はユーザアプリケーションのRTTに直結するので、 返すだけならUDPのほうがはやくてよいです。 ネットワークの信頼性、データを処理するCPUの処理能力向上より、 UDPで大きいサイズも扱いましょうとしたのが、EDNS0です。

$ dig @4.2.2.1 +dnssec gov ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.2 <<>> @4.2.2.1 +dnssec gov ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49273 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 4, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags: do; udp: 4096 *1) ;; QUESTION SECTION: ;gov. IN A ;; AUTHORITY SECTION: gov. 70843 IN SOA a.usadotgov.net. nstld.verisign-grs.com. 1353927601 3600 900 1814400 86400 gov. 70843 IN RRSIG SOA 7 1 86400 20121201100021 20121126100021 11596 gov. CzGbjEQvgj14d2nXlK5kyZtBTGSf46AKU5Kv1f+yw7Ez7JHOv++88Mih 4nMf/vIB04/zycK2Cv4qmnQZ5cJBuQ5gR3v5Pi0xEDefEjuIZHLFf61F wFkdpamKn/fNA0SRMFZzvvYCJI451ONyGoT/+V6GJr4bkHPvFwPgw1ok gr08mH2hp1Q6h+bfcZkmNrm3LGrDzqpfUsb2Yc+WhO7MV6jTksMPe/0A Wil9cmBZq1dUJYyaxstSvG6Ete53cxGJQBXJ5PONvj0CcVovKITY/CBE Ep5aCP6uaVYjT2H10QXqUSWnbVNF6M+n9n3YzH1xUOu2H1ttUVeEJKDh e+iiuw== 578et16s7ltnsq1t0amm21gl20oj5g76.gov. 70843 IN NSEC3 1 0 8 4C44934802D3 578H5NT2EIQH2T6CETLNEBNTL52T0ET8 NS SOA RRSIG DNSKEY NSEC3PARAM 578et16s7ltnsq1t0amm21gl20oj5g76.gov. 70843 IN RRSIG NSEC3 7 2 86400 20121201100021 20121126100021 11596 gov. oToOjRlj4fMiPWTlbKbPdg0nPhorEAVy319tot3LnbckP/nfBD7G+Fvm yuPUVCTSRcpdKPb+Y8kqJsQVfUz2SyHjiIGVHq0hOIDFPzp/0giWjwfI h/wJ2wqr7TsJqgITsNrFaSBvVjSY3ILZVn5tbeBmHM/JlG0x7CbQ6kHI apokRROyvEB4o3i3OxKWhSGn3scoUyT3lQCIQ6Km/r6vSmQ+GYsNJzTP eo0q1TmCvuxY1bY5euoFqrByoy5k1O1v+9hpn1cHADuHjFDJh8rWNFiz /3Bk1wwXfVIyfdp/HXq0SiNj+WvNhKN8ZfeCyBdctDMBQIhzQI46npJm aqCJ7w== ;; Query time: 141 msec ;; SERVER: 4.2.2.1#53(4.2.2.1) ;; WHEN: Tue Nov 27 00:25:30 2012 ;; MSG SIZE rcvd: 773 *1) EDNSversionが0,udp 4096byteまで拡張されているといってます。

* digのoptionで +dnssecとすれば自動的にEDNS0が有効になります。 1.はじめの問い合わせでOPTレコードを使用して、EDNSに対応していることを伝えます。 2.正しい応答がかえってくれば、キャッシュして、次回より、RequestにEDS0を使用します。 ちなみにBind9からdefaultで EDNS0が有効なのでdisableにするには、named.confに

options { edns no; } or server 192.168.0.1 { edns no; }

とする必要があります。 □ ネットワークインフラ側のEDNS0対応 DNSの要件がかわっているので、途中にレガシーなF/WやLSBがあればDropする危険性があるので注意が必要です。 F/W → 512byte以上は不正なDNSパケットとしてしまう SLB → UDPのセッションtableの飽和を防ぐため、DNSのflagmentpacketが通らない     1.UDPはFINがないので、セッションをある程度保持しておかなくてはならない     2.DNSクエリはセッションが多くなる性質のぱけっとなので、セッションtableの飽和はパフォーマンスに直結する     3.DNSは512byte以下→1packetなのでレスポンスパケットがきたら、即セッションtableを削除してしまおう BIND9以降、EDNS0がデフォルト有効なので、キャッシュサーバであっても 上記のような仕様で動作されると思わぬところでdropされる場合があります。 DNSSECチェックリストが公開されているので、チェックしてみてください。 (追記) ISPにいるならばDNSはMUSTなのはずですが、はまりました。 参考になった、解説リンクを紹介しておきます。 JPRS解説 DNSOPS解説 これを機にDNSOPSのMLに登録しようかと思います。


Brocadeがvyattaを買収

○Brocadeがvyattaを買収

なんとBrocadeがvyattaを買収してしまいました。プレスリリース


ハードウェアメインのネットワークアプライアンスベンダがソフトウェアルータを買収するなんて。

しかしながら、両者には明らかな共通項がリアルタイムにある。
"DataCenter NetWorking"

このキーワードだと、ともに、Frontierで、MainCastであるかと。

PublicKeyの記事でも指摘されていますが、
物理、論理を問わず統合管理フレームワークを提供する
"DataCenter NetWorking"の総合アーキテクチャを提供するベンダとなるための
ピースを手に入れたと考えるのが自然です。

SDNのパラダイムシフトが最大限に行われたとき、"DataCenter Networking"のアーキテクチャが
そのまま、LAN全体に普及する可能性を含んでいると思います。
そうなると、市場規模が爆発的に広がります。

(追記)
ethernetのことを中心に書くつもりがずるずるいらんことばっかり書いてます。
リアルタイムな現場では、EthernetFablicがpeakをむかえていると思うので
その辺もがんばります。
VDX,Nexusなどなど。。


Cisco と SDN的な

○ CiscoがOpenStackディストリビューション
記事はこちら

VMWare+Nexus+Cisco UCS みたいなベンダロックインな思想ですね。
ですが、
OpenStackディストリビューションでやってしまうのがさすが!Cisco!な感がでています。

SDNな人たちが目指すNWパラダイムシフトは、

・DataPlaneとContorolPlaneを分離する。 ・DataPlaneを意識することなくプログラマブルにパケットを制御する。

結果、DataPlaneに役割を大幅にけずられたNW機器ベンダは差別化ができなくなります。(openな仕様なほど重宝される?) OpenStackAPIを使ってNW機器を制御するInterfaceを提供することで、データセンター的なニーズに回答していますが、 上記のとおり、SDNな人たちが目指すアプローチに対して真逆(+パラダイムシフトを拒む)ものとなっています。 (追記) そもそも、SDNについて ○だれのために ○どんな目的で 必要とされているものなのかをわかりやすく、明確な解答をだれもだしてくれていないように思えます。 ○だれのために → データセンターな人々、ソフトウェアな人々 ○どんな目的で → NWな(ベンダ)固有言語なんていやだ。Openな仕様でプログラマブルに制御したい。 だと解釈しているので、 API,InterfaceはLinuxディストリビューションでつくられるくらいでないと普及しないように思います。

Ethernetのクロック偏差

○ethernetのクロック偏差

検証構成を複数台のEth機器で構成し、テスタを使ってaging試験をした。
どれもワイヤレートなEth機器なので、テストケースのLink 1Gbps fullrateを
テスタから流したんだんけど、・・・・パケlossが発生する。

この原因がehternetのクロック偏差です。

そもそもな話ですが、ethernetってSonet,SDH等のようにクロックを同期しているわけではないですが、
それぞれ自分勝手なクロックにしたがって通信(送受信)しています。
で、この誤差がクロック偏差です。

802.3/ethernetでは、

・125Mhzのクロック信号で、 ・±100ppm の誤差を許容しています。 *(ppmはparts per millionで0.01%)

と規定されています。 なので、隣接機器同士で最大200ppm(0.02%)の誤差が生まれてしまいます。 よって理論上は、fullrateの99.98%までしか許容できません。 そもそも、クロック差異がある時点でlossなしでパケット受け取れないんではないかとかんがえますが、 ある程度までバッファで許容して転送します。バッファがあふれそうになると、 IFG(Inter Frame Gap)で調整します。 *ここからFrame Formatの復習

*ethernetのframe format +-------+-------+-----+------------------+-----+ |dst-mac|src-mac|type | data | FCS | +-------+-------+-----+------------------+-----+ <- 6 -> <- 6 -> < 4 > <- 46~15000 -> < 4 > <---byte <- 64 ~ 1518 byte ->

64~1518byteのehternet frameです。 (ちなみにMTUはehternet frameでいうところのdata部分のことです。) これは、Layer2の範囲なので、Layre1のframeがつきます。

*L1送信 Frame <--- L1 ---> < ----------------- L2 --------------------> +--------+---+-------+-------+-----+------------------+-----+ |preamble|SFD|dst-mac|src-mac|type | data | FCS | +--------+---+-------+-------+-----+------------------+-----+ <- 7 -> <1> <- 64 ~ 1518 -> <---byte

このFrameをクロックにしたがって送信しますが、 Frameの送信間隔を96bit(12byte分)時間以上あけることにきめられています。 これがIFG(Inter Frame Gap)です。 IFGは12byte分とられていますが、受信側では、最低5byteあればいいよ。とされています。 この差分を使って調整します。 <おまけ> ユーザの立場で試験する場合、fullrateの99.4-7%くらいで試験することがおおいようです。 単体試験ならば、わざと、fullrateを流して、loss率を比べることで、バッファの大きさを比較することも可能です。 あわせてlatencyについても評価できます。

cisco simulator – 経路情報でload-balance

○cisco simulator再び

業務で同一経路情報のあて先をコントロールするという構成を相談されたので、route load-balanceを試す。
今回はそんな難しくない。
ecmp,lagを使わずにload-balance(L3)するんだったらこうなるだろうと想像できる。

構成図はこちら

(前提)
・R1 -> R5のtrafficを経路(172.16.0.0/24, 172.16.1.0/24)に分割して分散する
 (もちろんmain経路がきれたらbackupするよう設計)
・R1-R2-R3間はospfで経路情報交換

*分割はlongestmatchを使用します。
・R2 ->R4 172.16.0.0/23,172.16.0.0/24
・R3 ->R4 172.16.0.0/23,172.16.1.0/24
片方の経路がなくなっても /23で救済します。

○R12の設定

*172.16.0.0/24を優先 ip route 172.16.0.0 255.255.254.0 192.168.24.14 ip route 172.16.0.0 255.255.255.0 192.168.24.14

○R13の設定

*172.16.1.0/24を優先 ip route 172.16.0.0 255.255.254.0 192.168.34.14 ip route 172.16.1.0 255.255.255.0 192.168.34.14

○R11の確認

*経路を確認 R11# show ip route O E2 172.16.0.0/23 [110/20] via 192.168.13.13, 00:03:56, FastEthernet0/1 [110/20] via 192.168.12.12, 00:47:40, FastEthernet0/0 O E2 172.16.0.0/24 [110/20] via 192.168.12.12, 00:47:36, FastEthernet0/0 O E2 172.16.1.0/24 [110/20] via 192.168.13.13, 00:03:56, FastEthernet0/1 * traceでhopを確認します。 R11#traceroute 172.16.0.1 Type escape sequence to abort. Tracing the route to 172.16.0.1 1 192.168.12.12 320 msec 16 msec 40 msec 2 192.168.24.14 68 msec 40 msec 48 msec 3 192.168.45.15 392 msec * 48 msec R11#traceroute 172.16.1.1 Type escape sequence to abort. Tracing the route to 172.16.1.1 1 192.168.13.13 284 msec 12 msec 8 msec 2 192.168.34.14 24 msec 20 msec 8 msec 3 192.168.45.15 44 msec * 40 msec

*この状態で、R12 <-->R14間のlinkを落として、172.16.0.0/24がR13<-->R14経由で救済されるかを確認します。

R14(config t)# int serial 1/0 R14(config-if)# shutdown R11# show ip route O E2 172.16.0.0/23 [110/20] via 192.168.13.13, 00:14:42, FastEthernet0/1 O E2 172.16.1.0/24 [110/20] via 192.168.13.13, 00:14:42, FastEthernet0/1 R11# traceroute 172.16.0.1 Type escape sequence to abort. Tracing the route to 172.16.0.1 1 192.168.13.13 920 msec 84 msec 12 msec 2 192.168.34.14 480 msec 64 msec 20 msec 3 192.168.45.15 648 msec * 60 msec R11# traceroute 172.16.1.1 Type escape sequence to abort. Tracing the route to 172.16.1.1 1 192.168.13.13 48 msec 16 msec 32 msec 2 192.168.34.14 52 msec 44 msec 16 msec 3 192.168.45.15 24 msec * 32 msec

/23の経路がactiveになることで救済されています。 経路情報を使ったなんちゃってDRバックアップができそうです。 帰りパケットはNATするなりすれば、バックエンドの接続もアドレス重複せずできます。 longest matchなのでrouting-protcolに依存しません。 config-sampleを R11 R12 R13 R14 R15