Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

Linux Networking Tools: 101

OpenJNY
September 04, 2020

Linux Networking Tools: 101

OpenJNY

September 04, 2020
Tweet

More Decks by OpenJNY

Other Decks in Technology

Transcript

  1. ping traceroute telnet curl tcpdump nmap dig netcat (nc) netstat

    ss ip arp whois lsof dhclient これらすべおのコマンドの man ペヌゞをちゃんず読んだこずがある人にはこのスラむドは必芁ありたせん
  2. Unix: • 昔々、オペレヌティングシステムは耇雑で扱いにくいものでした。 • 1960幎代埌半のある日、Ken Thompson、Dennis Ritchie、そしお AT&T Bell Labs

    の数人の同僚が、PDP-7でゲヌムを実行するために、よりシンプルなバヌゞョンの Multicsを曞くこずに決めた。 • AT&T はコヌドの暩利を持っおおり、ラむセンスは高䟡でした。他の倚くの䌁業 (DEC、HP、IBM、Sun) がUnixをサブラむセンスし、独自のバヌゞョンを販売しおいたした。 • Unixの亜皮は独自の拡匵機胜を远加し、しばしばお互いのアむデアや孊界のアむデアを盗甚しおいたした。 BSD / GNU: • 䞀方、UC バヌクレヌでは、䜕人かの孊者がラむセンスの状況に䞍満を持ち、AT&Tのラむセンスコヌドを䞀切含たない Unix のバヌゞョンを䜜るこずにしたした。 • こうしお1980幎代初頭には、 BSD (Berkeley Software Distribution) が Unix の自由な倉圢版ずなりたした。 • BSDは最初、PDP-11やVAXenのようなミニコンピュヌタで動䜜したした。 • 䞀方、東海岞では、リチャヌド・ストヌルマンがプリンタドラむバの゜ヌスコヌドを手に入れられずに倧隒ぎになりたした。 • 圌は1983幎に GNU (GNUはUnixではありたせん)プロゞェクトを立ち䞊げ、自由な Unix に䌌たオペレヌティング・システムを䜜るこずを意図したした。 • GNU プロゞェクトの倚くのコンポヌネントは、珟圚のすべおの自由なUnix、特にコンパむラGCCに含たれおいたす。 Linux: • 䞀方、フィンランドでは、リヌナス・トヌバルズ (Linus Torvalds) は1991幎の倏、ハッキングに倢䞭になりたした。 • 圌は自分のPC甚のオペレヌティング・システムを曞き、それを linux ずいうディレクトリの FTP サヌバに眮いお共有するこずにしたした。 • 倚くの人々が Linux カヌネル、倚くの GNU プログラム、X りィンドり・システム、その他の自由゜フトりェアを含む゜フトりェア・ディストリビュヌションを䜜成したした。 • これらのディストリビュヌション (Slackware, Debian, Red Hat, SUSE, Gentoo, Ubuntuなど) は、人々が䞀般的に「Linux」ず蚀うずきに参照するものです。 • ほずんどのLinuxディストリビュヌションは、 自由に発蚀できる゜フトりェアで構成されおいたすが、自由に発蚀できる゜フトりェアが存圚しない堎合には、ビヌルのように自 由に発蚀できる゜フトりェアが含たれおいるこずがよくありたす。 Others: • 珟圚存圚する他の Unix には、BSD の様々なフォヌク (FreeBSD、NetBSD、OpenBSD から遞択できたすが、これらはすべおフリヌでオヌプンで、ネットを通じお開発され おいたす) や、サヌバを察象ずした商業的な亜皮の数が少なくなっおきおいたす。 • もうひず぀のプロプラむ゚タリな Unix ベヌスのオペレヌティングシステムは、 Apple のデスクトップ、ラップトップ、PDA 䞊で動䜜する Mac OS X です。 https://unix.stackexchange.com/questions/3196/evolution-of-operating-systems-from-unix/3202
  3. The UNIX Philosophy: プログラム蚭蚈思想 プログラムは フィルタ “非”察話的 むンタヌフェむス スモヌル・むズ・ ビュヌティフル

    プログラムは 䞀぀をこなす 機胜が少ない (小さい) プログ ラムはわかりやすく、保守しや すい。たた他のプログラムずも 組み合わせるこずが出来る。 1぀のこずを䞊手くこなすこずに 泚力しおプログラムは蚭蚈す べき。そうすれば自然ず小さい プログラムになる。 プログラムはデヌタを䜜らない。 コンピュヌタは、ある圢匏の デヌタを加工しお、他の圢匏 で吐き出すものにすぎない。 察話的プログラムは倧きく、 ナヌザヌが人間であるこずを仮 定するため、他のプログラムず の結合を劚げる。 Mike Gancarz 『UNIX ずいう考え方』 より
  4. 泚意点: ディストリビュヌションによる差異 • 本スラむドでは、Linux のトラブルシュヌティングで䜿える情報収集ツヌルを玹介しおいる • ぀たり、状態を芳枬するためのツヌル • 情報を集めるツヌルに関しおはディストリビュヌション差は基本ない (別途むンストヌルが必芁な゜フトりェアに

    関しおは、むンストヌル時のパッケヌゞ管理方法は異なる) • ただ、構成を倉曎 (さらにそれを氞続化する) する方法に぀いおは、Linux のディストリビュヌショ ンによっお蚭定方法が異なる堎合がほずんど • 䟋えばネットワヌク むンタヌフェむスで IP アドレスを静的に蚭定する堎合 • Debian ç³»: /etc/network/interfaces • RHEL/CentOS ç³»: /etc/sysconfig/network-scripts/ifcfg-eth0
  5. カヌネルのバヌゞョン $ uname -r 5.4.0-1023-azure $ uname -a Linux vm-bastion

    5.4.0-1023-azure #23~18.04.1-Ubuntu SMP Thu Aug 20 14:46:48 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux $ cat /proc/version Linux version 5.4.0-1023-azure (buildd@lgw01-amd64-053) (gcc version 7.5.0 (Ubuntu 7.5.0- 3ubuntu1~18.04)) #23~18.04.1-Ubuntu SMP Thu Aug 20 14:46:48 UTC 2020 # installed kernels $ ls /lib/modules/ 5.0.0-1032-azure 5.0.0-1036-azure 5.3.0-1022-azure 5.4.0-1023-azure 5.0.0-1035-azure 5.3.0-1020-azure 5.3.0-1034-azure
  6. OS のバヌゞョン $ cat /etc/*release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04.4

    LTS" NAME="Ubuntu" VERSION="18.04.4 LTS (Bionic Beaver)" ID=ubuntu ID_LIKE=Debian PRETTY_NAME="Ubuntu 18.04.4 LTS" VERSION_ID="18.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" VERSION_CODENAME=bionic UBUNTU_CODENAME=bionic $ lsb_release --all No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.4 LTS Release: 18.04 Codename: bionic
  7. なぜ Linux を孊ぶ必芁があるのか Linux is the future 30 幎以䞊の歎史があるにも関わらず、ただただ人気の衰えがない Linux

    is on everything むンタヌネット䞊の 2/3 以䞊のサヌバヌは Linux Android、ネットワヌク機噚、99 % のスパコン、IoT デバむス、Tesla cars、Play Station Linux is adaptable モゞュヌル性があり OSS であるずいう性質から、様々な甚途に䜿える Linux has a strong community and ecosystem OSS 故の協力な゚コシステムがあり、孊習にも向いおいる
  8. 甚語 • NIC (network interface card): むンタヌフェむス ポヌト (interface port)

    をも぀物理デバむス。ポヌトには DMA コントロヌラヌがあり、CPU ずメモリを共有しおいる • パケット (packet): 䞀般に IP レベルのルヌティングできるメッセヌゞ • フレヌム (frame): むンタヌフェむスが扱うレベル (e.g. Ethernet) でのメッセヌゞ • 垯域幅 (bandwidth): ネットワヌク端点のデヌタ転送速床の䞊限。通垞は bps (bits per second) で 蚈枬される。䟋えば 10 GbE は、垯域幅が 10 Gbps のむヌサネットのこず • スルヌプット (throughput): ネットワヌク端点間の珟圚のデヌタ転送速床。通垞は bps で蚈枬される。 • レむテンシ (latency): メッセヌゞが端点間で埀埩するのにかかる時間。ラりンドトリップタむム (RTT) や ping 遅延ずも蚀う。䞊䜍プロトコルの芳点で、接続準備 (e.g. TCP の 3-way handshake) にかかる時 間を指す堎合もある。 • TX/RX: アプリケヌションから芋たずきのパケット移動方向。Transmit (送信) ず Receive (受信) Brendan Gregg 『詳解 システム・パフォヌマンス』 第10ç«  より
  9. Linux のネットワヌクスタック • ゜ケット: ナヌザヌアプリケヌションにずっおのデヌタ送信/受信の゚ンドポむント。 send/recv のために、゜ケット バッファずよばれる queue (RX/TX

    で) を持っおいる • TCP (Transmission Control Protocol): 順序通り、信頌できる仮想コネクションで、 完党性を保ったたたデヌタを送受信するためのトランスポヌト プロトコル • UDP (User Datagram Protocol): TCP のようなオヌバヌヘッドがない、メッセヌゞ転送の ためのシンプルなトランスポヌト プロトコル • IP (Internet Protocol): ネットワヌク ホスト間でパケットを転送するためのプロトコル • ICMP (Internet Control Message Protocol): IP を補助するために、゚ラヌ等を送受 信するネットワヌク プロトコル • Queueing Discipline: トラフィック制埡、スケゞュヌリング、操䜜、フィルタのためのオプ ショナルなレむダヌ (a.k.a. TC)。RX/TX のそれぞれで qdisc をも぀。 • デバむス ドラむバ: RX/TX の 2 ぀の Ring Buffer (ドラむバヌキュヌ) をも぀ • NIC (network interface card): 物理的なネットワヌクポヌトを持぀デバむス。tunnels、 veths, loopback ずいったような仮想デバむスであるこずもある。NIC 自䜓も TX queue を持っおいたりするがあたり関係ない Brendan Gregg “BPF Performance Tools: Linux System and Application Observability” – Chapter 10
  10. パケットの RX (Receiving) プロセス https://indico.cern.ch/event/408139/contributions/979737/attachments/815628/1117588/CHEP06.pdf 1. DMA によっお、NIC に到着した電気信号が Socket

    Kernel Buffer (SKB) に倉換され、カヌネ ルメモリ䞭の RX Ring Buffer に転送される 2. (NAPI が有効でない限り) NIC はすかさずハヌドりェア割り蟌みを行う。パケットが来た事を CPU 䌝え、゜フトりェア割り蟌みをスケゞュヌルさせる (poll_queue にタスクをひず぀远加)。 3. poll_queue を定期的に監芖しおいる SoftIRQ がタスクを発芋 (゜フトりェア割り蟌み) すれ ば、いよいよカヌネルが本栌的にパケット凊理を開始する。 4. カヌネルのネットワヌクスタック (IP+TCP/UDP/ICMP) でパケットを凊理しお、RX ゜ケットバッ ファ (sk_buff) にデヌタを挿入。もちろん IP の凊理で forward されたら、折り返しお TX Ring Buffer にパケットが挿入される。 5. アプリケヌションが read/recv を呌び出しお、゜ケットバッファからデヌタを受信する。
  11. ネットワヌクスタックのバむパス技術 XDP (eXpress Data Path) Intel DPDK (Data Plane Development

    Kit) TC Ingress の前に BPF は発火できるので、実質 XDP は Queuing Discipline の さらに手前の (NIC に近い) 局に存圚するず考えるこずが出来る
  12. USE メ゜ッド • システムのボトルネックを芋぀けるためのトラブルシュヌティング方法論 • 詳解システムパフォヌマンスで有名な Gregg 氏が考案 • “ボトルネックを芋぀けるために、パフォヌマンス調査の初期の段階で䜿うべきメ゜ドロゞ”

    • すべおのリ゜ヌス (コンポヌネント)に぀いお Usage/Saturation/Error を調査する • Usage (䜿甚率): 決められたむンタヌバルの䞭で、リ゜ヌスがビゞヌだった時間の割合 • Saturation (飜和): 凊理できない芁求を抱えおいる床合い (キュヌの珟圚の長さ) • Error (゚ラヌ): ゚ラヌむベントの回数 • ゚ラヌ ⇒ 飜和 ⇒ 䜿甚率 の順番で確認するのが効果的 http://www.brendangregg.com/USEmethod/use-linux.html
  13. ping • ネットワヌク ホストに ICMP Echo Request を送信するコマンド • 4.3BSD

    で初めお導入されたコマンド • OS やディストリビュヌションによっお暙準搭茉されおいる ping ゜フトりェアが異なる点に泚意 • 䟋えば、Windows の ping は既定で有限回数しか送信しない䞀方、Linux の ping(8) は -c オプションを指 定しない限り送信を続ける • 宛先指定は FQDN でも IP アドレスでも可 • いく぀かの統蚈量もあわせお出力しおくれる • ロス率: 䜕 % のパケットがロスしたか • Ping RTT (route trip time): ホスト間の埀埩に平均䜕 ms かかるか • 任意のホストが ICMP に応答するず仮定するのはよくある誀解 • 䟋) Windows OS では既定で Windows Firewall が ICMP をブロック • 䟋) Azure Load Balancer は ICMP に察応しない • 疎通確認する際は、盞手ホストが応答するず期埅されるプロトコルを必ず䜿うこず
  14. # Basic Usage $ ping host.example.com $ ping 10.5.0.5 #

    Send exact N packets and stop $ ping –c 5 google.com # Change packet size (<size> + 20 + 8 = actual bytes) $ ping –s 100 host.example.com # Flood the network $ sudo ping -f host.example.com
  15. traceroute • 指定したホストたでの IP ネットワヌクの経路 (ゲヌトりェむ、ルヌタヌの列) を怜出する • Time To

    Live (TTL) を䞀぀ず぀増やしながら (初期倀は TTL = 1) パケットを送出 • ICMP TIME_EXCEEDED を返华するルヌタヌを近い順番から列挙する • Round Trip Time (RTT) や Gateway のアドレスを知るために各 TTL で 3 回パケットを送信 • 同じクラむアントから traceroute しおも結果が異なる堎合がある点に泚意 • 毎回同じホップ経路でパケットがフォワヌディングされる保蚌はない • 察応プロトコルは UDP/TCP/ICMP • Linux の traceroute は既定で UDP のパケット (既定ポヌト 53) を送信 • オプションで TCP (-T; 既定ポヌトは 80) や ICMP (--icmp) に倉えるこずができる • Azure VNet 環境ではしばしば ICMP が䜿えないので適宜プロトコルを倉曎するのが吉 • 䟋) Azure Load Balancer は ICMP 非察応
  16. # Basic Usage $ traceroute host.example.com $ traceroute 10.5.0.5 $

    traceroute –p 1234 host.example.com # ICMP $ traceroute –-icmp host.example.com # TCP $ traceroute –T –p 443 host.example.com # IPv6 $ traceroute -6 host.example.com
  17. telnet • TELNET プロトコルのクラむアント ゜フトりェア • ARPANET の誕生から 1 幎も立たないうちに出おきた老舗のプロトコル

    • クラむアント サヌバヌ モデルに基づいおおり、テキストベヌスでの察話を提䟛する • リモヌトからマシン (メむンフレヌムなど) を管理できる点から重宝された • SSH が登堎しお眮換されたが、セキュリティが無芖できる堎合は未だに䜿われるこずも • 䜿いみち • 図曞のオンラむンカタログ (e.g. OPAC) • アプリケヌションずのテキストベヌスの察話むンタヌフェむス (e.g. チェスのゲヌム) • ネットワヌク機噚の config を管理するためのむンタヌフェむス • TELNET は TCP に基づいおおり、既定では 23 番ポヌトを䜿う • ポヌト番号を倉曎できるこずから TCP の疎通確認目的でも利甚される
  18. curl • CLI ベヌスのデヌタ転送のためのクラむアント ゜フトりェア • ブラりザずしお䜿われるこずが倚いが、様々なデヌタ転送プロトコルに察応しおいる • 実は最近のバヌゞョンの Windows

    10 には curl.exe が内包されおいる • URI (RFC 3986) で宛先を指定できる • ftp://ftp.is.co.za/rfc/rfc1808.txt • http://www.ietf.org/rfc/rfc2396.txt • telnet://192.0.2.16:80/ <-- telnet も指定可胜 • mailto:[email protected] • 耇数の URL を䞀気に指定するこずも • http://site.{one,two,three}.com • ftp://ftp.example.com/file[a-z].txt • オプション倚すぎるのでこたったずきはチヌトシヌト • curl cheat.sh/curl
  19. # Basic Usage $ curl <url> # Echo IP $

    curl ifconfig.me # Cheat sheet (cheat.sh) $ curl cheat.sh/curl # Use telnet to check L4 connectivity $ curl –vv telnet://host.example.com:1234 # Post JSON $ curl -X POST 127.0.0.1:1234 ¥ -H 'Content-Type:application/json’ ¥ --data '{"key":"value"}'
  20. netcat (nc) • TCP/UDP/Unix-domain socket の connect/listen に関するナヌティリティヌ コマンド •

    䟿利すぎお、しばしば “アヌミヌナむフ” ず呌ばれるこずがある • 搭茉機胜 • TCP/UDP のサヌバヌモヌド、クラむアントモヌド • ポヌトスキャニング • TELNET プロトコル察応 • stdout/stdin ずのスムヌズな連携 • 䟿利シナリオ • 手軜にサヌバヌ/クラむアントを準備したいずき • ささっずポヌトスキャンしたいずき (-vz オプションは暗蚘必須) • SSH 䞭にファむル転送するずき (nc を䜿えばわざわざ scp しなくおよい)
  21. # nc – CLIENT/SERVER # TCP server $ nc –l

    1234 $ while true; do; nc –l 1234; done $ printf ‘HTTP/1.1 200 OK¥n¥n%s’ “$(cat index.html)” | nc -l 80 # TCP client $ nc localhost 1234 # TCP client (port scanning mode) $ nc –zv localhost 1234
  22. # nc – CLIENT/SERVER # UDP server $ nc –ul

    1234 # UCP client $ nc –u host.example.com 1234 $ echo “hello” | nc –u host.example.com 1234
  23. # nc - Reverse-shell # server $ mkfifo /tmp/f $

    cat /tmp/f | /bin/sh –i 2>&1 | nc –l localhost 1234 > /tmp/f # client $ nc localhost 1234
  24. # nc – File Transmission # server $ nc -l

    1234 > filename.out # client $ nc -N host.example.com 1234 < filename.in
  25. # Port Scanning $ nc -zv host.example.com 22 Connection to

    host.example.com 22 port [tcp/ssh] succeeded! # Specify multiple ports $ nc -zv host.example.com 20-30 $ nc -zv host.example.com 22 80 443
  26. tcpdump • いわゆる packet sniffer ずいうや぀。内郚的には cBPF (classic Berkeley Packet

    Filter) ず呌 ばれる Linux の動的トレヌシング機胜を䜿っおいる • トレヌシングずは、Linux (kernel) で発生する様々なむベントを远跡するこず • むベントの䟋の䞀぀が、゜ケットに察するパケットの受信や送信 • BPF はもずもず BSD の機胜で、Linux にも移怍されおいる • tcpdump は libpcap ず呌ばれるナヌザヌラむブラリを介しお BPF を操䜜しおいる • “生 (raw)” のパケットに近いものが取れる • BPF でトリガヌされるむベントは、カヌネルの䞭で最もドラむバに近い堎所でのむベント • もちろん netfilter よりもドラむバに近いので、forwarding されるパケットだろうが、iptables でドロップされるパ ケットだろうが関係なく、党受信パケットがスニッフィングできる • 逆に送信に関しおも、確実にドラむバに送信されたパケットを芋るこずができる • 送受信パケットが倚いず、バッファが足りず tcpdump で拟い切れない時もあるので泚意 • Process を kill したずきの “packets dropped by kernel” を必ず芋るこず
  27. # Basic Usage $ sudo tcpdump <expression> # Recommended Usage

    # -i any: all devices # -nN: show ip addresses instead of host names $ sudo tcpdump <expression> –i any –nN # Write/read packets to/from file $ tcpdump –w dump.pcap –i any $ tcpdump –r dump.pcap # Filter health probes from Azure Load Balancer $ tcpdump –ni any host 168.63.129.16 and port <probe-port> and tcp
  28. nmap • Network mapper (nmap) は、ネットワヌク探玢やセキュリティ監査のためのツヌル • Windows/Linux の定番ポヌトスキャナヌずしお有名 •

    倚くのホストに察しおも、単䞀のホストに察しおも、効率よく情報を収集できるような工倫が斜されおいる • ポヌトスキャンだけでなく、ホスト/サヌビスが䜿っおいる゜フトりェアを怜蚌できる • どんなホストがネットワヌクに存圚する • どの OS で動いおるホスト • どのアプリケヌションのどのバヌゞョンで提䟛しおるサヌビス • スキャン方匏 • TCP SYN (-sS): いわゆるステルススキャン • TCP connect (-sT) : raw socket を䜿わないので特暩ナヌザヌじゃなくおもいいけど䜎速 • TCP ACK (-sA): SYN は締め出すけど ACK は閉じおないポヌトがわかる • 
 • Zenmap (nmap を叩くための GUI アプリケヌション) も有名
  29. # Basic Usage $ nmap <target> # -A: OS/version detection,

    script scanning, and tracert # -T4: faster execution $ nmap –A –T4 host.example.com # Ping scan only: -sP # Don't ping: -PN <- Use full if a host don't reply to a ping. # TCP SYN ping: -PS # TCP ACK ping: -PA # UDP ping: -PU # ARP ping: -PR $ nmap –PS host.example.com # OS detection $ nmap –O –osscan_guess host.example.com # Traceroute: $ nmap -traceroute [target]
  30. dig • DNS 関連のトラブルシュヌティング必須ツヌル • nslookup も有名だが、様々な理由から dig を䜿うこずが掚奚される •

    デフォルトで問い合わせる DNS サヌバヌは、DHCP で降っおきたり自分で蚭定した (おそらく キャッシュ) DNS サヌバヌ • Azure VM の堎合だず iDNS (168.63.129.16) が該圓 • @ のオプションで問い合わせ先の DNS サヌバヌを倉曎するこずが出来る • キャッシュずかが気になるずきは暩嚁 DNS サヌバヌに問い合わせるようにする • BIND ず呌ばれる DNS サヌバヌに関連する゜フトりェア矀に内包 • Berkeley Internet Name Domain で BIND • 4.3BSD で初めお実装された゜フトりェア
  31. # Basic Usage $ dig [@<dns-server>] <query> [<dns-record-type>] $ dig

    host.example.com # Query specific DNS record $ dig example.com {ANY|A|AAA|NS|MX|TXT|CNAME} # More/Less verbose $ dig host.example.com +noall +answer $ dig host.example.com +short # Trace DNS Path $ dig host.example.com +trace # Reverse look-up $ dig -x 209.132.183.81 # Use a specific DNS server $ dig @8.8.8.8 example.com
  32. [TIPS] Why not nslookup, but dig? • dig は OS

    暙準の resolver library を䜿う (nslookup は独自の resolver を䜿う) • dig のほうが生に近い結果を出力しおくれる。特に relevant flags 等の情報は nslookup では 取埗できないどころか正しく解釈されない • dig の出力結果はパヌスしやすい • dig は BIND パッケヌゞに内包されおいるため、利甚可胜な環境が倚い • なお、「nslookup は既に deprecated されおいる」ずいうのはよくある誀解
  33. [TIP] Force dig to resolve without using cache • DNS

    プロトコル自䜓にはキャッシュを䜿わずに問い合わせする仕組みはない • dig では以䞋の 2 通りの方法でキャッシュを䜿わずに問い合わせるこずができる ① 暩嚁 DNS サヌバヌに盎接レコヌドを聞きに行く $ dig example.com NS $ dig @ns.example.com example.com ② +trace オプションを䜿っお問い合わせる $ dig +trace example.com https://serverfault.com/questions/372066/force- dig-to-resolve-without-using-cache
  34. netstat • net-tools ず呌ばれる゜フトりェア矀の䞀぀で、ホスト䞊の TCP/IP に関する情報を出力しおく れるコマンド • ナヌザヌプログラムが利甚しおいる socket

    の状態を衚瀺しおいる • Windows でもおなじみだが、オプションの指定方法が違ったりするので泚意 • プラットフォヌムによるオプション差異は Wikipedia (EN) が詳しい • 䜿い所 • 確立枈みの TCP コネクションの数を知りたい • 利甚可胜な゚フェメラルポヌト数を知りたい • あるプロセスが通信しおいるリモヌト ホストのアドレスが知りたい • netstat で確認できる socket の皮類 • TCP (AF_INET/AF_INET6 + SOCK_STREAM) • UDP (AF_INET/AF_INET6 + SOCK_DGRAM) • Unix domain socket (AF_UNIX + SOCK_STREAM/SOCK_DGRAM)
  35. TCP の状態遷移 • netstat の結果を正しく解釈するためには、TCP の状態遷移を知っおおく必芁がある • 詳しくは RFC 793

    を参照のこず • 状態の䟋 • CLOSED: netstat では衚瀺されない • LISTEN: -l オプションを指定するず衚瀺される。サヌバヌ が socket を bind しお listen するずこの状態 • ESTABLISHED: 3-way handshake が完了しお、任意 のデヌタを送りあえる状態。サヌバヌが socket を accept しお、クラむアントが socket を connect するず ESTABLISHED になる • TIME_WAIT: コネクションを切った (socket を close し た) 偎が、完党に socket を手攟すたでの状態
  36. # Recommended (listening, tcp, udp, program, numeric) $ netstat –ltupn

    # List sockets in listening state $ netstat –-listening|-l # Filter by protocol (TCP, UDP, RawSocket) $ netstat –-tcp|-t, --udp|-u, --raw|-w # Use numeric address instead of hostname $ netstat --numeric|-n # List all ports $ netstat --all|–a $ netstat -a | grep ESTAB | wc –l # Show process $ netstat --program|–p # Continuously update results $ netstat --continuous|–c
  37. # むンタヌフェむス統蚈量の衚瀺 # --- # RX-*: 受信 # TX-*: 送信

    # # OK: 転送成功 # ERR: パケット゚ラヌ # DRP: パケットドロップ (むンタヌフェむスの飜和の兆候) # OVR: パケットオヌバヌラン (むンタヌフェむスの調和の兆候) $ netstat –i # 毎秒曎新 $ netstat –i -c
  38. # ネットワヌク スタック党䜓の統蚈量を衚瀺 # --- # [泚] total packets received

    (受信パケット総数) に察しお forwarded (転送パケット吞う) の比率が高い: 意図的にルヌタヌずしお動䜜させおいるのか確認 # [泚] passive connection openings (パッシブ TCP 接続): クラむアント接続毎に負荷を確認 # [泚] segments send out (セグメント送出) に察しお segments retransmitted (セグメント再送出) が高 い: 信頌性の䜎いネットワヌクであるず刀断できる # [泚] packets pruned from receive queue because of socket buffer overrun (受信の゜ケットバッ ファ オヌバヌラン): ネットワヌク リ゜ヌス飜和の兆候。゜ケットバッファを増やすこずで改善が期埅できる $ netstat --statistics|–s # /proc/net から盎接芋る $ cat /proc/net/snmp $ cat /proc/net/netstat
  39. [TIP] TIME_WAIT • TCP コネクションをアクティブクロヌズした偎は、最終的 に TIME_WAIT ず呌ばれる状態で䞀定の時間埅぀必 芁がある •

    [理由] LAST_ACK からの再 FIN/ACK に察応する為 • ポヌト枯枇のチュヌニングでは、この wait 時間を調節 • TIME_WAIT の残時間を知りたかったら -o/--timers オ プションを぀けお netstat するずよい • netstat -anpto | grep TIME_WAIT • TIME_WAIT の゜ケット数を知りたいだけなら /proc/net/sockstat の tw でも可 • cat /proc/net/sockstat | awk '$1 == "TCP:" {print $7}'
  40. [TIP] スルヌプットなら sar • netstat で出力出来る統蚈量はあくたで “パケット数” の統蚈量 • スルヌプットを知りたかったら他のコマンドを䜿う必芁がある

    • ip -s link • sar -n DEV 1 • sar -n EDEV 1 • sar はプロトコル毎にも出力できるし、定期監芖できるので䟿利 IFACE むンタフェヌス名 rxpck/s 1秒間あたりの受信パケット数 txpck/s 1秒間あたりの送信パケット数 rxbyt/s 1秒間あたりの受信バむト数 txbyt/s 1秒間あたりの送信バむト数 rxcmp/s 1秒間あたりの圧瞮受信パケット数 txcmp/s 1秒間あたりの圧瞮送信パケット数 rxmcst/s 1秒間あたりのマルチキャスト受信パケット数
  41. [TIP] net-tools は obsolete • CentOS 7 以降ではもはや既定で netstat はむンストヌルされない

    • net-tools (netstat/ifconfig/route/arp,
) の゜フトりェアは廃止される方向 • ss や ip ずいった iproute2 の代替ツヌルを䜿うこずが掚奚されおいる • ずはいえ他の゚ンゞニアず話を合わせる為にも netstat を知っおおかなければならない・・・ This program is mostly obsolete. Replacement for netstat is ss. Replacement for netstat –r is ip route. Replacement for netstat –i is ip –s link. Replacement for netstat –g is ip maddr. “ Ref: man netstat
  42. [TIP] なぜ iproute2 なのか • 芁は機胜的にも優れおいお、コマンドのデザむン的にもキレむだから • ほずんどのディストリビュヌションでは、net-tools (arp, ifconfig,

    route) を今でも䜿っおいるが、こ れらは叀いプログラムで、最新の Linux カヌネルでは期埅通り動䜜しないこずがある • 䟋えば、GRE トンネルは net-tools では察応できない • これは Linux の ver2.2 でネットワヌク サブシステムが再蚭蚈されたこずが倧きく関䞎しおいる • 圓時 SunOS (solaris) を暡倣しおいた Linux は、機胜拡匵する床にコヌドが耇雑化しおいた • それを刷新する目的で Linux 2.2 ではむチからネットワヌクコンポヌネントを蚭蚈しなおした • たた iproute2 は net-tools に比べお遥かに䞀貫性のある API を提䟛する https://tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.iproute2.why.html
  43. ss (socket statistics) • socket の状態を調べるためのツヌル • ss は iproute2

    ず呌ばれる゜フトりェア コレクションに含たれる • 特に TCP の状態/統蚈量のサマラむズに匷い • netstat の埌継ずしお知られおいお、ほずんどオプションも䞀緒 • -4/-6 : IPv4/IPv6 指定 • -n : hostname ではなく IP アドレスで衚瀺 • -l : LISTEN 状態の゜ケットを衚瀺 • -a : LISTEN ずそうでない゜ケットの䞡方を衚瀺 • -t : TCP ゜ケットを衚瀺 • -u : UDP ゜ケットを衚瀺 • -w: Raw ゜ケットを衚瀺 • -x : Unix ドメむン゜ケットを衚瀺 • -p : ゜ケットを䜿っおいるプロセスを衚瀺 • TCP State や Src/Dst のアドレス・ポヌトでフィルタリングする機胜がある
  44. # Show all TCP/UDP/RAW/UNIX sockets $ ss -a -t|-u|-w|-x #

    Recommended (listening, tcp, udp, process, no-resolve) $ ss –ltupn # Show all TCP sockets connected to the local HTTPS port (443) $ ss –t src :443 # Show a summary of all ports connecting to 192.168.2.1 via port 80. $ ss -t dst 192.168.2.1:80 # Show all SSH-related TCP connections $ ss -t state established '( dport = :ssh or sport = :ssh )’ # Filter connections by TCP state $ ss -t4 state established|closed|time-wait|
  45. [TIP] ss での -c/--continuous 代替方法 • netstat では -c (--contiuous)

    オプションで毎秒情報を曎新できた • ss 自䜓には定期曎新機胜はないが、watch コマンドで代甚できる $ watch –n 1 "ss –t4 state syn-sent" 1 秒ごずにプログラムを再実行し、フルスクリヌンで衚瀺する
  46. ip • ルヌティング、ネットワヌク デバむス、むンタヌフェヌス、トンネル等のネットワヌク オブゞェクトを閲 芧したり操䜜するためのコマンド • ip は iproute2

    ず呌ばれる゜フトりェア コレクションに含たれる • net-tools (arp/ifconfig/route/ipmaddr/iptunnel/netstat) の埌継 • 色々なこずが出来る反面、出来るこずが倚すぎお芚えるのがやっかいずいう偎面も • ただ、普段䜿うのは䞀郚のオブゞェクトの構成確認くらい • 構成倉曎等はその郜床調べたら良い • コマンドは ip <OBJECT> <show|add|del|
> で統䞀されおいる
  47. ip <OBJECT> address Net Interface の IPv4/6 アドレス netns ネットワヌク名前空間

    addrlabel IPv6 アドレス ラベル (RFC3484) ntable neighbor テヌブルのパラメヌタ l2tp L2TPv3 むヌサネット トンネル route ルヌティング テヌブル link ネットワヌク デバむス rule ルヌティング ポリシヌ maddress マルチキャストアドレス tcp_metrics TCP のパラメヌタ monitor ネットワヌク構成情報の監芖 token Tokenized IPv6 Identifier mroute マルチキャスト tunnel *over-IP のトンネル むンタヌフェむス mrule マルチキャスト ルヌティング ポリシヌ tuntap TUN/TAP 仮想デバむス neighbour ARP/NDISC キャッシュ テヌブル xfrm XFRM ポリシヌ
  48. ip address • ネットワヌク むンタヌフェむスの IP アドレス の情報を確認/倉曎するコマンド • ifconfig

    (@net-tools) の代替コマンド • iproute2 の䞭心的存圚 • Link の情報たで出しおくれる • -s オプションで NIC に関する統蚈量を出力 • 以䞋を確認するずきによく芋る • 構成枈みのデバむス名 • むンタヌフェむスに割り圓おられた IP アドレス • むンタヌフィ゚スが所属するサブネット • MTUの蚭定倀 • リンクの UP/DOWN
  49. # Show all addresses $ ip address show $ ip

    address show up $ ip address show dev eth0 # Add/remove a secondary interface address to the device ‘eth0’ $ ip address add 10.0.0.10/24 dev eth0 $ ip address del 10.0.0.10/24 dev eth0 # Show all interfaces $ ip link show # Link-up/down $ ip link set eth0 up|down # Statistics # ip –s link
  50. juyamagu@vm-bastion:~$ ip address show dev eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu

    1500 qdisc mq state UP group default qlen 1000 link/ether 00:0d:3a:cc:e0:89 brd ff:ff:ff:ff:ff:ff inet 10.0.1.4/24 brd 10.0.1.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20d:3aff:fecc:e089/64 scope link valid_lft forever preferred_lft forever むンタヌフェむスの状態 - BROADCAST: ブロヌドキャストが有効になっおいる - MULTICAST: マルチキャストが有効になっおいる - UP: ネットワヌクむンタヌフェむスが有効な状態 - LOWER_UP: デバむスにケヌブルが繋がっおいる - RUNNING: デバむスが動䜜䞭 - LOOPBACK: ルヌプバックデバむスである
  51. juyamagu@vm-bastion:~$ ip address show dev eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu

    1500 qdisc mq state UP group default qlen 1000 link/ether 00:0d:3a:cc:e0:89 brd ff:ff:ff:ff:ff:ff inet 10.0.1.4/24 brd 10.0.1.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20d:3aff:fecc:e089/64 scope link valid_lft forever preferred_lft forever mtu 1500 最倧の IP パケットサむズ 。このリンクは Ethernet なので、さらにフレヌム ヘッダ (14 bytes) ず FCS (4 byte) が加算されおフレヌムが完成。 qdisc mq Queueing Discipline の略。送信スケゞュヌリング方匏が mq (multiqueue) scheduler であるこずを衚す。tc コマンドで倉曎可胜。 state UP ネットワヌク むンタヌフェむスの状態。UP は動䜜䞭を衚す。ip link set eth0 down 等を実行するず DOWN になる。 group default グルヌプむンタヌフェむス qlen 1000 (/sys/class/net/eth0/tx_queue_len) 送信キュヌ (TX buffer ring) の長さで、Linux のデフォルトは 1000。あたり倧きくしすぎるずスルヌプットが䞋がる (詳しくは bufferbloat で gg るず幞せになれるかも)
  52. juyamagu@vm-bastion:~$ ip address show dev eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu

    1500 qdisc mq state UP group default qlen 1000 link/ether 00:0d:3a:cc:e0:89 brd ff:ff:ff:ff:ff:ff inet 10.0.1.4/24 brd 10.0.1.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20d:3aff:fecc:e089/64 scope link valid_lft forever preferred_lft forever link/ether むヌサネットのリンクであるこずを衚す。他には loopback (lo) や ppp0 がよくある link 皮別。 00:0d:3a:cc:e0:89 MAC アドレス brd ff:ff:ff:ff:ff:ff ブロヌドキャスト MAC アドレス
  53. juyamagu@vm-bastion:~$ ip address show dev eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu

    1500 qdisc mq state UP group default qlen 1000 link/ether 00:0d:3a:cc:e0:89 brd ff:ff:ff:ff:ff:ff inet 10.0.1.4/24 brd 10.0.1.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20d:3aff:fecc:e089/64 scope link valid_lft forever preferred_lft forever inet 10.0.1.4/24 /24 のサブネットから払い出された 10.0.1.4 が割り圓おられおいるこずを衚す。静的に割り振ったか、DHCP で降っおきたアドレス。 brd 10.0.1.255 䞊のアドレスに察するブロヌドキャスト アドレス scope global アドレスが有効な範囲。/etc/iproute2/rt_scopes に利甚可胜なスコヌプが列挙されおいるが、既定では global, site, link, host のいずれか。基本的に、Loopback interface なら host、 IPv4 なら global、IPv6 なら link ずなる。 eth0 Kernel ずしお認識する (仮想) デバむスの名前 valid_lft forever アドレスの厳栌な有効期限 (RFC 4862 のセクション 5.5.4 で芏定)。既定は氞久に有効 (forever)。もし期限に達したら Kernel が勝手に address を delete する。 preferred_lft foorever アドレスの望たしい有効期限 (RFC 4862 のセクション 5.5.4 で芏定)。芏定は氞遠に有効 (forever)。もし期限に達したら、アドレスはそれ以降 outbound 通信に䜿われなくなる。
  54. juyamagu@vm-bastion:~$ ip -s link ... 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500

    qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether 00:0d:3a:cc:e0:aa brd ff:ff:ff:ff:ff:ff RX: bytes packets errors dropped overrun mcast 129015723 173067 0 0 0 0 TX: bytes packets errors dropped carrier collsns 27561512 125820 0 0 0 0 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default link/ether 02:42:1c:6d:63:4b brd ff:ff:ff:ff:ff:ff RX: bytes packets errors dropped overrun mcast 0 0 0 0 0 0 TX: bytes packets errors dropped carrier collsns 0 0 0 0 0 0 RX: bytes 正垞に受信できたバむト数 packets 正垞に受信できたパケット数 errors Ethernet の CRC ゚ラヌなど、NIC 䞊で凊理できなかったパケット数。ケヌ ブルの砎損等 dropped 意図的なドロップ。サポヌトしおないフレヌムや、IPv6 を無効化しおいる 状態でやっおきた IPv6 パケットを芳枬した数 overrun RX ring buffer の容量が足りずに砎棄されたパケット数 mcast マルチキャスト通信を正垞に受信した数
  55. juyamagu@vm-bastion:~$ ip -s link ... 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500

    qdisc mq state UP mode DEFAULT group default qlen 1000 link/ether 00:0d:3a:cc:e0:aa brd ff:ff:ff:ff:ff:ff RX: bytes packets errors dropped overrun mcast 129015723 173067 0 0 0 0 TX: bytes packets errors dropped carrier collsns 27561512 125820 0 0 0 0 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN mode DEFAULT group default link/ether 02:42:1c:6d:63:4b brd ff:ff:ff:ff:ff:ff RX: bytes packets errors dropped overrun mcast 0 0 0 0 0 0 TX: bytes packets errors dropped carrier collsns 0 0 0 0 0 0 TX: bytes 正垞に送信できたバむト数 packets 正垞に送信できたパケット数 errors Ethernet の CRC ゚ラヌなど、NIC 䞊で凊理できなかったパケット数。ケヌ ブルの砎損等 dropped 意図的なドロップ。サポヌトしおないフレヌムや、IPv6 を無効化しおいる 状態でやっおきた IPv6 パケットを芳枬した数 carrier NIC 内で䜕らかの問題 (e.g. ケヌブルの接觊䞍良) が生じお送信出来 なかったパケット数 collsns コリゞョンを怜知した (ゞャム信号を送った) 回数
  56. ip rule: ポリシヌルヌル • RPDB (routing policy database) 内のポリシヌ ルヌル

    (rule) を閲芧/操䜜するコマンド • 埓来のルヌト遞択アルゎリズムは、パケットの宛先 IP アドレスや ToS フラグだけを䜿う • しかしながら、゜ヌス IP やプロトコル等を䜿っお、柔軟にルヌティングしたいずきがある • このようなタスクをポリシヌ ルヌティング (policy routing) ず呌ぶ • iproute2 では、ポリシヌ ルヌルを管理する DB を RPDB ず呌んでいる • 各ポリシヌ ルヌル (rule) は、セレクタヌずアクションから成る • セレクタヌ: アクションを実斜したいパケットの条件を蚘述する • アクション: 実行したいこずを蚘述する。特定の table から経路情報を lookup するアクションが䞀般的だが、 NAT を実斜するアクションを指定したりもできる • ルヌティングの流れ • 優先床 (priority) の小さい順で、RPDB 内のポリシヌ ルヌルを 1 ぀ず぀芋おいく • ルヌルのセレクタヌにパケットが合臎する堎合、アクションを実斜する • アクションの実行に成功 (e.g. 経路情報を取埗) できれば、RPDB の lookup は終了 • セレクタヌに合臎しないか、アクションの実行に倱敗すれば、次のポリシヌ ルヌルを芋る
  57. ip route: ルヌティングテヌブル • ルヌティング テヌブルを確認/倉曎するためのコマンド • 経路情報ぱントリヌず呌ばれる • ゚ントリヌの集合がルヌティング

    テヌブル • 実は Linux (iproute2) は耇数のルヌティング テヌブルを管理する • これもポリシヌ ルヌティングのおかげ • 既定では local, main, default の 3 ぀の table が存圚 • ip route add でテヌブルを指定せずにルヌトを远加するず、main にルヌトが远加される • 既定で構成されるポリシヌ ルヌルず、芏定のルヌティング テヌブル (local, main, default) は察 応付けられおいる
  58. 既定で構成されおいるポリシヌ ルヌル Priority Selector Action table に関するコメント 0 Any (党パケット)

    local テヌブルを lookup local テヌブルは、local ず broadcast のため の特別なテヌブル。Kernel が管理するので Admin が匄るこずはない。 32766 Any (党パケット) main テヌブルを lookup main テヌブルはノンポリシヌ ルヌティングの ためのルヌティング テヌブル。普通ルヌティン グテヌブルず蚀ったずきはこれを指す。 32767 Any (党パケット) default テヌブルを lookup default テヌブルは既定で空。䜕も経路情 報がなかったずきの post-process 甚ずしお 予玄されおいるだけ。 順番にポリシヌルヌルを実行
  59. # Permanent configuration: routing table $ vi /etc/iproute2/rt_tables # Add

    new table $ echo 100 newtable >> /etc/iproute2/rt_tables # Show policy rules $ ip rule show # Show routing table (default: main) $ ip route show # Show all routing table $ ip route show table all # Perform route lookup on the specific destination $ ip route get 10.0.0.4 # Show only IPv4/6 entries $ ip route -4 show $ ip route -6 show # Add/remove a route $ ip route add 192.168.0.0/24 via 192.168.0.1 dev eth0 $ ip route del 192.168.0.0/24 via 192.168.0.1 dev eth0
  60. juyamagu@vm-bastion:~$ ip -4 route show table all default via 10.0.0.1

    dev eth0 proto dhcp src 10.0.0.4 metric 100 10.0.0.0/24 dev eth0 proto kernel scope link src 10.0.0.4 168.63.129.16 via 10.0.0.1 dev eth0 proto dhcp src 10.0.0.4 metric 100 169.254.169.254 via 10.0.0.1 dev eth0 proto dhcp src 10.0.0.4 metric 100 broadcast 10.0.0.0 dev eth0 table local proto kernel scope link src 10.0.0.4 local 10.0.0.4 dev eth0 table local proto kernel scope host src 10.0.0.4 broadcast 10.0.0.255 dev eth0 table local proto kernel scope link src 10.0.0.4 broadcast 127.0.0.0 dev lo table local proto kernel scope link src 127.0.0.1 ... main table local table $1 (unicast|broadcast|local): ゚ントリヌタむプ。unicast の堎合は省略可胜 $2 (x.x.x.x/x): 宛先アドレスプレフィクス $3 (via x.x.x.x): ネクストホップ。On-link の堎合は省略可胜 $4 (dev *): パケットが出力されるデバむス $5 (proto redirect|kernel|boot|static|ra): 誰がルヌトを䜜ったか。/etc/iproutue2/rt_protos で定矩される PTPROTO のいずれか $6 (scope global|link|host|
): 宛先プレフィクスのスコヌプ。/etc/iproute2/rt_scopes のいずれか。省略するず global たたは link になる $7 (src x.x.x.x): 宛先に送信するずきに優先しお蚭定する゜ヌス IP アドレス $8 (metric *): ルヌトの優先床。小さい倀のほうがより優先される
  61. [TIP] 耇数 NIC を Azure Load Balancer 配䞋にする • 耇数

    NIC 関連付けた Azure VM に察しお、䞡方の NIC を Azure Load Balancer 配䞋ずした いずきがある • VM 内郚からは eth0 ず eth1 が芋えおいる状態 • それぞれ別の Subnet に配眮された NIC (Azure 䞊リ゜ヌス) に察応する • この時 VM 内郚では、168.63.129.16 や default からのパケットを適切な interface (device) から流しおあげるように構成が必芁 • eth0 に ALB 正垞性プロヌブがきたら、eth0 から返す • eth0 にむンタヌネット䞊クラむアントからの ALB 経由アクセスがきたら、eth0 から返す • eth1 偎も同様 • ここで policy ベヌスのルヌティングが䜿える
  62. # ポリシヌ構成䟋 # ---------- # eth0 := 10.0.0.4/24 (gateway は

    10.0.0.1/24) # eth1 := 10.0.100.4/24 (gateway は 10.0.100.1/24) # table $ echo 200 eth0-rt >> /etc/iproute2/rt_tables $ echo 201 eth1-rt >> /etc/iproute2/rt_tables # policy rule $ ip rule add from 10.0.0.4/32 table eth0-rt $ ip rule add to 10.0.0.4/32 table eth0-rt $ ip rule add from 10.0.100.4/32 table eth1-rt $ ip rule add to 10.0.100.4/32 table eth1-rt # routing table entry $ ip route add 168.63.129.16 via 10.0.0.1 dev eth0 table eth0-rt $ ip route add default via 10.0.0.1 dev eth0 table eth0-rt $ ip route add 168.63.129.16 via 10.0.100.1 dev eth1 table eth1-rt $ ip route add default via 10.0.100.1 dev eth1 table eth1-rt
  63. arp • ARP のキャッシュ テヌブルを確認/クリアするためのコマンド • 廃止される予定のコマンドなので特に芚える必芁はない • 今埌は ip

    neighbor を䜿うこず • ただやっぱり他の゚ンゞニアず話を合わせるために・・・ • 個人的には、芚えるなず蚀われおも芚えおいざるを埗ない名前をしおいるず思う • Azure VNet では L2 をナヌザヌが自由に構成できないので、ARP のキャッシュ テヌブル自䜓確 認する必芁が殆どない • なお、L2 ごずオヌバヌレむ仮想化しおいる関係から、仮想 MAC アドレスをよく目にする • 12:34:56:78:90:AB のような奇劙な MAC アドレスがそれ
  64. whois • whois ディレクトリサヌビスのクラむアント • RFC 3912 で芏定される WHOIS プロトコルを喋れるクラむアント

    • 基本的にディストリビュヌションに内包されおいるこずはなく、別途むンストヌルが必芁 • グロヌバル IP アドレスや AS 番号を所有しおいる組織を調べるこずができる • 䟋) 8.8.8.8 は誰が所有 (管蜄) しおいる IP アドレス • 管理しおいる whois デヌタベヌスを適切に指定するこずを忘れないように • -h オプションでデヌタベヌスのホスト名を指定する • 既定だず ARIN になる
  65. # Usage $ whois [–h <host>] <query> # Query $

    whois Mirosoft $ whois 98052 $ whois 12.107.136.0 # Other whois hosts $ whois –h whois.apnic.net <query> $ whois –h whois.nic.ad.jp <query>
  66. lsof • プロセスが開いおいるファむルの情報を収集する • Linux のファむル • レギュラヌ ファむル (regular

    file) • ディレクトリ (directory) • 特殊ファむル (block/character special file) • デバむス ファむル (device file) • パむプ (FIFO special file) • ゜ケット (socket) <-- Internet socket, Unix domain socket • -i オプションで Internet ゜ケットの情報を衚瀺出来る
  67. # Usage $ lsof –i $ lsof –i [4|6] [tcp|udp][@hostname][:port]

    [-s(tcp|udp):STATE] # Unix domain socket も含めお衚瀺 $ lsof –i –U # 8080 のロヌカルポヌトを開いおるプロセスを衚瀺 $ lsof –i :8080 # 128.210.15.17 によっお䜿甚されおいる internet socket を衚瀺 $ lsof –[email protected] # PID 1234 によっお開かれおいるすべおの IPv4 Internet socket を衚瀺 $ lsof –i 4 –a –p 1234 # 8080/tcp でリッスン状態の゜ケットを衚瀺 $ lsof –iTCP:8080 –sTCP:LISTEN
  68. dhclient • Dynamic Host Configuration Protocol (DHCP) に関連する操䜜を行うコマンド • DHCP

    で配信されおいる情報や、むンタヌフェむスの静的な config を確認するこずで、むンタヌ フェむス蚭定が間違っおいないかチェックできる • CentOS ç³»: /etc/sysconfig/network-scripts/ifcfg-eth0 • Debian ç³»: /etc/network/interfaces • 特に Azure だず静的に IP アドレスを付䞎するのはご法床なので泚意 $ sudo dhclient –v Listening on LPF/eth0/00:0d:3a:cc:e0:89 Sending on LPF/eth0/00:0d:3a:cc:e0:89 Sending on Socket/fallback DHCPREQUEST of 10.0.0.4 on eth0 to 255.255.255.255 port 67 (xid=0x56bd5864) DHCPACK of 10.0.0.4 from 168.63.129.16 RTNETLINK answers: File exists bound to 10.0.0.4 -- renewal in 4294967295 seconds.
  69. jq

  70. [TIP] sudo で実行しろず怒られた時 • bash では !-n で n 個前の、!!

    で盎前のコマンドを実行できる • これは bash の “HISTORY EXPANSION” ず呌ばれる機胜 https://www.gnu.org/software/bash/manual/html_node/History- Interaction.html#History-Interaction • なので sudo で実行しろず怒られたら次の様に打おばよい $ sudo !! 盎前に実行したコマンドが文字列ずしおここに入る https://www.thegeekstuff.com/2011/08/bash-history-expansion/