前回の記事はこちらです。この記事は前回の記事のリマスターみたいなものとなっております。 読む必要はありませんが、この記事よりも詳しく用語の説明をしている部分もあるため、読んだ方が問題が解消できるかもしれません。 Oracle Cloudの無料枠だけでKubernetes(k3s)クラスタを構築する この記事にて、Kubernetesクラスタを作成してから1年と半年ほど・・・ 1年くらいはノーメンテで動作していることを確認していました。 しかし・・・1年を超えたくらいで動作しなくなってしまいまして、やはりスペック に関しては非常に厳しいものがあったようです。 kubectl打ってタイムアウトになってしまうこともしばしばあり、当然ながら実用的にアプリケーションを動作させるのは無理だな、ということでそのまま放置しちゃっていました。 そして時が過ぎて、いきなりすごいニュースが自分のTLに流れてきま
2020/01/14: 実際に動くのを確認しました asnokaze.hatenablog.com (2020/09/17 注釈: Raw SocketsからDirect Socketsに名称が変更されました) ブラウザでTCP, DUPソケットを操作可能にする「Direct Sockets API」という仕様がW3CのWICGで議論されている。 また、blink-devでも「Intent to Prototype: Raw Sockets API」とプロトタイプの議論が行われている。 多くの方がセキュリティ上の懸念を抱くと思うが、ドキュメントでも慎重に検討すると書かれている。GithubでIssueを立てることも可能なので、思うことがある方は、まだまだ議論は始まったばかりでもあるので是非フィードバックされると良いと思う。(割と普通に聞いてもらえます) なお、Raw Socketsという名
図1: QUICコネクションを振り分けるロードバランサはじめに本記事では、バックエンドのWebサーバへリクエストを振り分ける装置の意味でのロードバランサ(図1)について、QUIC対応の議論状況を紹介します。方式編と実装編にわけて二編を予定しており、本稿は方式についての解説です。 IETFでは、F5 Networksとマイクロソフトから提案されたロードバランシング方式が議論されています。本稿では下記のインターネットドラフトをQUIC-LBと表記します。 QUIC-LB: Generating Routable QUIC Connection IDs https://datatracker.ietf.org/doc/html/draft-ietf-quic-load-balancers 執筆時点の -07 をベースとしますが、ドラフトですので今後の議論次第で改版が続きます。あらかじめご承知おき
連載 LinuxサーバーのTCPネットワークのパフォーマンスを決定するカーネルパラメータ- 1編 LinuxサーバーのTCPネットワークのパフォーマンスを決定するカーネルパラメータ- 2編 5. TIME_WAIT socket TIME_WAIT状態のソケットは、利用可能なlocal port数を軽減させて同時に保有できるクライアントソケットの数を制限します。 5.1 TIME_WAIT socketとは? TIME_WAIT状態のソケットは、いつ発生するでしょうか? まず、TCPソケットの状態フローを見てみましょう。 上図から分かるように、active closingするソケットの最後の終着地がTIME_WAITの状態です。 言い換えれば、クライアントソケットであれ、サーバーソケットであれ、close()システムコールを先に呼び出した側(active closing)が最終的にそうなり
ブルース・デイヴィーのブログより。 TCPの新しい決定的な仕様(RFC 9293)の公開は、私たちの世界ではとても大きな出来事で、このトピックに関する2回目の投稿をせずにはいられませんでした。特に、QUICとTCPを比較した議論に興味をそそられ、今週のニュースレターを書くきっかけとなりました。 TCPの過去と未来に関する前回の投稿では、QUICがTCPを置き換え始めるかも知れないという可能性について触れました。今週は、QUICは実際にはTCPが解決する問題とは異なる問題を解決しているので、TCPの置き換えとは別のものとして見るべきであると主張したいと思います。一部の(あるいはほとんどの)アプリケーションでは、QUICがデフォルトのトランスポートになるかも知れませんが、それはTCPが本来意図されていなかった役割に押しやられたからだと思います。なぜ私がそのような主張をするのか、一歩下がって考え
インターネット関連技術の標準化を手掛けるIETF(Internet Engineering Task Force)は2022年6月6日(米国時間)、通信プロトコル「HTTP/3(HyperText Transport Protocol/3)」を「RFC 9114」として勧告した。HTTP/3はインターネット通信の多くを占めるWebにおける通信プロトコルの最新版である。 最大の特徴は、トランスポートのプロトコルに「QUIC(Quick UDP Internet Connections)」を採用した点。QUICは2021年にIETFで「RFC 9000」として勧告された。その名前が示すように、TCP(Transmission Control Protocol)ではなく、UDP(User Datagram Protocol)に基づくプロトコルだ。TCPが備えていた再送制御の仕組みや、TLS(Tr
HTTP/3はどうやってWebを加速するか? TCP、TLS、HTTP/2の問題とHTTP/3での解決策~Fastly奥氏が解説(後編) Webの世界では新しいHTTPの標準として「HTTP/3」の策定が進み、現在最終段階にあります。このHTTP/3はこれまでのHTTPをどのように改善し、高速化を実現していくのでしょうか。 2020年11月25日と26日にオンラインで開催されたFastly Japan主催のイベント「Yamagoya Traverse 2020」のセッション「Webを加速するHTTP/3」で、同社の奥一穂氏がHTTP/3の解説を行っています。 本記事では奥氏のセッションをダイジェストで紹介します。(本記事は「HTTP/3はどうやってWebを加速するか? TCP、TLS、HTTP/2の問題とHTTP/3での解決策~Fastly奥氏が解説(前編)」の続きです) サーバプッシュの
Introducing a Technology Preview of NGINX Support for QUIC and HTTP/3 We are pleased to announce the technology preview of QUIC+HTTP/3 for NGINX at a special open source repository. This is pre‑release software, based on the IETF QUIC draft and is maintained in a development branch, isolated from the stable and mainline branches. The release is the culmination of several months of initial developm
はじめに アクセス数がすごい環境は大抵高負荷環境でもあるので対策としてApacheの設定やサーバ構成のセオリーをすぐ見つけられて実際試しても目に見えて良くなります。 アクセス数の多さで起こる問題は実際に負荷をかけてみないと表面化しません。 問題が分かったら設定やパラメータを調整して現状がましになるようにするだけです。 ですが限りあるリソースの中でTCPセッションを十分にコントロールしようとするとすぐ手詰まりです。 WEBサーバがしているやりとりの基礎が足りていないそんな気がしていたのでTCPに目を向けてみました。 行き着いた結果は 待ち受け側とリクエスト側ではボトルネックが違う リクエスト時はTCPのエフェメラルポートが上限 待ち受け時はTCPよりもファイルディスクリプタが上限 になりやすい という良く見かける設定を見直すということになりましたが、どうやってそうなっているのかが今回の成果だ
Haskellコミュニティでは、ネットワーク関連を担当。 4児の父であり、家庭では子供たちと、ジョギング、サッカー、スキー、釣り、クワガタ採集をして過ごす。 前回の説明では、「Initial パケット」や「Version Negotiation パケット」といった用語を未定義で使いました。今回は、こういった「パケット」や「フレーム」が、どのような構造を持っているかについて説明します。 古典的なパケット IP、UDP、およびTCPでデータをやり取りする基本単位は、すべて「ヘッダ+ペイロード」という構造を持っています。このヘッダ+ペイロードという単位は、それぞれ以下のように呼ぶのが慣習です。 IP – パケット UDP – データグラム TCP – セグメント すべてパケットと呼んでも間違いではありません。UDPの場合、IPペイロードが「UDPデータグラム(UDPヘッダ+UDPペイロード)」に
Recent posts: 29 Oct 2024 » AI Flame Graphs 22 Jul 2024 » No More Blue Fridays 24 Mar 2024 » Linux Crisis Tools 17 Mar 2024 » The Return of the Frame Pointers 10 Mar 2024 » eBPF Documentary 28 Apr 2023 » eBPF Observability Tools Are Not Security Tools 01 Mar 2023 » USENIX SREcon APAC 2022: Computing Performance: What's on the Horizon 17 Feb 2023 » USENIX SREcon APAC 2023: CFP 02 May 2022 » Brendan
インターネット上のIPアドレスやドメイン名などの管理や調整を行っているICANN(Internet Corporation for Assigned Names and Numbers)は、プライベートネットワークやホームネットワークのためのトップレベルドメインとして「.INTERNAL」を予約語として割り当てるという提案を1月24日付で公開しました。 プライベートネットワークには、「192.168.xx.xx」などの専用のIPアドレス空間が公式に割り当てられており、このIPアドレス空間はインターネット上のIPアドレスと衝突しないことが約束されています。 しかし、このIPアドレス空間で管理されているプライベートネットワークのために公式に割り当てられたドメイン名の名前空間は、現時点ではありません。 そのため、プライベートネットワークの運用者がプライベートネットワーク内で何らかのドメイン名を運
はじめに 前回自作でTCPIP+HTTPを実装して動作を確認することができました。 しかしご覧頂いた方はおわかりのように、通信はHTTP=平文でやり取りされておりパスワードなど機密情報が用意に見れてしまう状態です。 普段我々がブラウザに安心してパスワードを入力しているのは通信がTLSで暗号化されているからです。ではそのTLSの仕組みはどうなっているのでしょう? 恥ずかしい限りですが僕はわかりません。😇😇😇 ということで以下を読みながらTLSプロトコルを自作してみてその仕組みを学ぶことにします。 マスタリングTCP/IP情報セキュリティ編 RFC5246 プロフェッショナルSSL/TLS 今回の実装方針です。 TLS1.2プロトコルを自作する 暗号化などの処理はcryptパッケージの関数を適時利用する tcp接続にはconnectを使う 鍵交換はまずRSAで作成する TLS_RSA_W
eBPFでcommit logを調べてみるといろいろと面白そうなものが出てくるな。例えば、TCP-BPF [netdev 2.2]。TCPコネクションのパラメータをBPFで操作できる。さらに最近(バージョン5.5以降)では、輻輳制御もeBPFで実装できるようになっているようだ。eBPFによりカーネルからどんどん機能を追い出してLinuxはマイクロカーネル化するのだという鼻息荒い発表も見かけるが(「eBPF - Rethinking the Linux Kernel」[QCon2020])、正直これが正しい方向性なのかよくわからない。面白いけど。 eBPFを使っているわけではないが、輻輳制御をユーザレベルで実装するという研究はいくつかある(「Restructuring Endpoint Congestion Control」 [SIGCOMM2018]、「Deploying Safe Use
IP制限しているTCP 22(sshd)や3306(MySQL)のようなポートが空いていないかチェックするツールを作りました。 たとえば設定ミスで22番ポートがすべてのIPを許可している状態になってしまっていたというケースがありそうで、サーバ台数が数百台になってくるといちいち気にしているのが面倒なのでチェックする簡易ポートスキャナーを作りました。 github.com 外部監視ツールだとポートが空いてるか、任意の文字列が返るかなどのチェックはできますが、ポートが閉じられてることというのを簡単に管理するのが意外と手間だと感じたのがきっかけです。 Go言語で作ってるのでバイナリにして実行もできます。 使い方 goが動く環境を用意して、 echo "example.com\nexample.net" | go run aite9 -tcp 22,3306 のようにすると次のように一気にポートをス
本稿では、初めて実際に独自プロトコルのDissectorを作る人が最初にぶつかるであろう壁を乗り越える方法を紹介します。 Dissectorって何?という人は、先に↓こちらを読んでください。 WiresharkのDissectorを使った独自プロトコル解析をやさしく解説してみました - DARK MATTER 本稿では、基本的なDissectorの作り方と、Dissectorを活用したパケット解析方法を紹介します。WiresharkのDissectorをご存知でしょうか?DissectorはWireshar ... できるようになること 複数のパケットに分割されたパケットのDissectorの作成 TCPのパケット分割について(いちおう書いておきます) TCPはストリーム型の通信であり、送信サイズや通信環境によりTCPの仕組みでパケットが分割されて送信される場合があります。このため一般に公
2021/01/29 NAT Slipstreaming v2が公開されたので、追加記事を書きました https://asnokaze.hatenablog.com/entry/2021/01/29/014759 2020年10月31日に「NAT Slipstreaming」という攻撃手法が発見されてます samy.pl これは簡単に言うと 罠サイトを踏ませることで、SIPのApplication Level Gateway機能を持つNATの内側に居るクライアントに対して、外側からそのクライアントの任意のTCP/UDPポートに接続できる。という攻撃のようです。 この攻撃はさまざなテクニックを使用しており大変面白いです。調査過程も含め詳細は上記のサイトに書かれているので、そちらを読むことを強く推奨します。 ざっくり 登場人物 victim(攻撃対象): ブラウザで攻撃者のサイトにアクセスすr
LinuxにおけるSegmentation OffloadとはTCPなどのトランスポートレイヤのプロトコルが送信するデータをMTUに収まるように分割する処理(Segmentation)をNICのレイヤにオフロードすることによってスループットを向上させる技術です. Segmentation Offloadを使った場合, トランスポートレイヤのプロトコルはIPレイヤで許容される最大のサイズ(64KB程度)までのデータを1つのIPパケットで送信することができます. 受信側は逆にネットワークから入ってきたSegmentation済みのパケットをNICのレイヤで1つの大きなIPパケットに集約した上でプロトコルスタックの処理にかけます. これによってプロトコルスタックで処理されるパケットの個数を減らすことができるため, スループットが上がるという仕組みです. Linuxには仮想ネットワークデバイスとい
メイン コンテンツにスキップキーボード ショートカットユーザー補助に関するフィードバックドライブ名前オーナー最終更新ファイルサイズ その他の並べ替えオプションフォルダKLab Expert Camp 3オーナーは非公開です2022/03/10—ダウンロードKLab Expert Camp 5オーナーは非公開です2023/08/31—ダウンロードファイルKLab Expert Camp 6 - Day1オーナーは非公開です2023/11/04350 KBダウンロード詳細(Alt+→)KLab Expert Camp 6 - Day2オーナーは非公開です2023/10/01243 KBダウンロード詳細(Alt+→)KLab Expert Camp 6 - Day3オーナーは非公開です2023/08/29681 KBダウンロード詳細(Alt+→)KLab Expert Camp 6 - Day4
TCP Ruby Jesse Storimer 2024-09-23 i ii API iii Web HTTP API REST JSON API API TCP API Twitter API API TCP JSON XML API 2 API C API iv Web Unix Unix Ruby Ruby Ruby Ruby 1.9 3 1 2 Hello, World v 3 API API API 1983 BSD 4.2 TCP API API API API API 1983 API API 1 API API 2 API API C C API Ruby API vi Ruby API 1 API UDP TCP API API TCP HTTP FTP TCP/IP Vol.1 *1 *1 http://www.amazon.co.jp/dp/4894713209/
こんにちは、滝澤です。 筆者の趣味として調べているDNSのプロトコルのここ数年のトピックについて紹介してみます。 ほぼ毎年、DNSに関連する新しいRFC(インターネットに関する技術仕様)が公開され、仕様が更新されたり、新しい仕様が追加されたりしています。 ここ数年のトピックについてまとめてみたいと思い立ち、この記事を書きました。 なお、この記事は2020年8月時点での情報となります。すべてを網羅しているわけではありません。 ちなみに、筆者は次のサイトを公開している人でもあります。 DNS RFCs ANYクエリーに対してRRsetをすべて返すわけではない 2019年1月に「RFC 8482 Providing Minimal-Sized Responses to DNS Queries That Have QTYPE=ANY」が公開されました。 このRFCでは、DNSレスポンダー(DNSレ
アプリケーションの高度化やデータ通信量の増加に対応するため、TCP/IP(Transmission Control Protocol/Internet Protocol)の後継となる技術の検討も始まっている。その代表格が「QUIC」というプロトコルだ。TCPに取って代わる可能性があるとして注目されている。 QUICは、米グーグルが自社のWebサービスで大量のアクセスを高速に処理するために開発した独自プロトコルをベースにしている。同社はこのプロトコルを2015年にIETF(Internet Engineering Task Force)へ提出。その後、TLS(Transport Layer Security)の機能を取り込み、HTTP以外にも使えるようにするなどの変更を加えて標準化へと至った。 UDPでTCP相当の信頼性を確保 QUICの主な特徴は、「TCPと同等の再送制御や輻輳制御を備える
TCP ソケットと `SO_REUSEPORT` オプションに関する問題を解決するために Linux カーネル v5.14 から取り込まれる予定のパッチセットについて 2 回に分けて解説します。 - https://lore.kernel.org/bpf/[email protected]/ - https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git/commit/?id=1f26622b791b6a1b346d1dfd9d04450e20af0f41 Part 1 では `SO_REUSEPORT` オプション、カーネルの挙動と問題点、パッチセットの効果について解説し、 Part 2 ではカーネルの実装と修正方法、追加した eBPF の機能について解説します。 ##
Linux 5.6から Multipath TCP(mptcp)が使えるようになった。複数インターフェースを使ってTCPコネクションをはり効率のよく通信を行う仕組みです。mptcp v0がRFC 6824で、mptcp v1がRFC 8684で標準化されています。 すでに、iOSでは利用が始まっています。 asnokaze.hatenablog.com 来月リリース予定である、Ubuntu 20.10 は Kernel 5.8 が入っており、mptcpが使えるのか試してみようと思いました。 有効になってることを確認 イメージを公式サイトから落としてきて起動します。 $ uname -a Linux y 5.8.0-19-generic #20-Ubuntu SMP Fri Sep 11 09:08:26 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux $ s
今回はオープンソースでマルチプラットフォームなリモートデスクトップソフトウェアであるRustDeskを紹介します。 RustDeskとは RustDeskはオープンソースでマルチプラットフォームなリモートデスクトップソフトウェアです。あけすけな表現をするとセルフホストできるTeamViewerやAnyDeskのようなものです。 使い勝手もおおむね同じで、今回構築する中継サーバーに接続することによりルーター等の設定を変更しなくてもすいすい繋がるリモートデスクトップ環境を構築できます。 サーバーはUbuntuやDebianとWindowsが想定されていますが、クライアントはUbuntu/Debian/Windows/macOS/Android/iOSなど、何にでも対応しています。ただし今回はUbuntuとWindowsしか取り上げません。 TeamViewerやAnyDeskを使用したことがあ
ついさっき、ついにHTTP/3対応のブランチが本家のnginxにmergeされました。 このまま何事もなければ次のMainline versionである1.25.0がリリースされたタイミングで使えるようになるはずです。 検索するとnginxでHTTP/3を使う方法を解説しているサイトがいくつかヒットしますが、実はmergeするちょっと前くらいから非互換な変更をいくつも入れていたので、そのままだと動かないはずです。なので簡単に使い方を解説しておきます。 なお分かっていると思いますが、こちらの記事は記事執筆時点(2023/05/20)の内容です。 OpenSSLの代わりを選ぶ HTTP/3を使うには自分でbuildする必要があります。いずれpackageが配布されるだろうと思っている人がいるかもしれませんが、nginxのHTTP/3対応はBoringSSLのAPIで対応されています。OpenS
※本記事は筆者RyotaKが英語で執筆した記事を、弊社セキュリティエンジニアShion1305が日本語に翻訳したものになります。 はじめに こんにちは、Flatt SecurityでセキュリティエンジニアをしているRyotaK(@ryotkak)です。 2023年にPortSwigger社のJames Kettle氏は、同社の記事でSingle-packet attackという新しい攻撃手法を提案しました。これはネットワークのジッター値に関係なくレースコンディションを悪用できるというものです。 Smashing the state machine: the true potential of web race conditionsより引用 最近私は、同時に約10,000件のリクエストを送信することで安定して成立するレースコンディションを発見し、Single-packet attackを適用
以前 .NET ラボで 「C# と HTTP/2 と gRPC」というタイトルで登壇しました。その時のスライドがこちらなのですが、ちらほら反応を頂きました。その結果、HTTP/2 や gRPC について勘違いしている人がちょこちょこいる事が分かったので、少し補足を書こうと思います。 blog.neno.dev 1. HTTP/2 で向上するのはスループットであって、1リクエストあたりの応答時間ではないよ。 HTTP/2 を使うからといって、1 リクエストあたりの応答時間が短くなるわけではないのです。 まず、1 HTTP リクエストあたりにかかる時間を、RTT とかいったりします。 1 RTT の内訳はだいたいこんな感じになります。 1 RTT = ネットワーク上で往路にかかる時間 + サーバの処理時間 + ネットワーク上で復路にかかる時間 HTTP/2 になったからといって、ネットワークを
/proc/net/netstatを頑張って理解していく。ドキュメントないものをどうやって調べていくかはちょっと悩む... netstat グラフに出てくる項目 概要 TcpExtSyncookiesSent tcp.syncookies.sent 送信されるSYNクッキーの数 TcpExtSyncookiesRecv tcp.syncookies.recv TCPスタックが受信するSYNCookieの応答パケットの数 TcpExtSyncookiesFailed tcp.syncookies.failed SYNCookieからデコードされたMSSが無効 TcpExtEmbryonicRsts tcp.misc_errors.embryonic_rsts SYN_RECV状態の接続に対して受信された無効なパケット TcpExtPruneCalled tcp.misc_errors.pru
Nature Remo には、ローカル用の API が用意されています。 サーバ障害時やインターネット接続障害時でも、Local API 経由であれば利用可能です。 ※以前の記事で触れた Cloud API とは別物 公式サイトの Swagger に詳細が記載されています。 https://local-swagger.nature.global/ Remo で登録済みのリモコン信号はサーバ側に保存されているらしく、今回使用するローカルから呼び出すことはできません。個別に赤外線信号を指定する必要があります。 IP アドレスを調べるRemo の持つ IP が分かっていればスキップ可能。(ルータの管理画面で調べるのが楽) まずはじめに、Remo が利用しているホスト名を確認。dns-sd -B _remo._tcp で検索できます。 $ dns-sd -B _remo._tcp Browsing
Amazon Web Services ブログ VPC ネットワーク内での長時間稼働 TCP 接続の実装 本投稿は Implementing long-running TCP Connections within VPC networking (記事公開日: 2022 年 11 月 28 日) を翻訳したものです。 多くのネットワークアプライアンスは、アイドル接続タイムアウトを定義して、非アクティブ期間が経過すると接続を終了します。たとえば、NAT Gateway、 Amazon Virtual Private Cloud (Amazon VPC) エンドポイント、Network Load Balancer (NLB) などのアプライアンスのアイドルタイムアウトは、現在 350 秒に固定されています。アイドルタイムアウトの期限が切れた後に送信されたパケットは、ターゲットに配信されません。
Haskellコミュニティでは、ネットワーク関連を担当。 4児の父であり、家庭では子供たちと、ジョギング、サッカー、スキー、釣り、クワガタ採集をして過ごす。 お久しぶりです。一家の引っ越しでバタバタしておりました。ようやく落ち着いてきましたので、「硬直化」をテーマとしてQUICに関して3つほど記事を書いてみようと思います。 硬直化 硬直化とは、中間装置が想定外の動作をすることによって、新しい機能の普及が困難になることです。硬直化の例としては、TCP Fast Openが完全に普及できないことが挙げられます。 TCPでは、コネクションを確立するために、いわゆる3WAYハンドシェイクが実行されます。通常は、クライアントがSYNパケットを送信し、サーバがSYN/ACKパケットを返し、その後クライアントがACKを返す際に初めてデータを送信できます。 もし最初のSYNパケットにデータを乗せることがで
まずは公式ドキュメントをご覧ください。 docs.docker.com IPv6 is only supported on Docker daemons running on Linux hosts. 残念! Docker Desktop for Macなどでローカル開発をしているときに、ローカルで立ち上げたプロセスからDocker内にあるコンテナに通信したいことは割りとよくあるユースケースだと思う。 こういうときは、基本的には宛先をIPv4のLoopback Addressである127.0.0.1に向けてあげて、 IPv6を使わないようにしてあげるとよい。 localhostを使ってしまうと、名前解決でIPv6のLoopback Addressに名前解決されるケースがあり、そうなればIPv6に対して接続しようとしてしかしIPv4でしかlisten(2)されていないのでコケる。 しかし、世
The 16th of April 1971 is not only the date when the Rolling Stone first released Brown Sugar, it is also marked with the publication of RFC 114 marking the birthday of FTP. Back in those days, the Vietnam war is at the forefront of the news, TCP/IP didn’t exist yet, Jimi Hendrix died 6 months ago, telnet was the new cool kid and some of the most influential rock n roll artists were about to relea
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く