การแก้ไขปัญหาเครือข่าย Linux และการดีบัก


80

ในบางครั้งผู้ใช้ Linux และ Unix ต้องเผชิญกับปัญหาเครือข่ายต่างๆ ปัญหาเหล่านี้ส่วนใหญ่มีการนำเสนอที่นี่และที่ฟอรัมการแก้ไขปัญหาอื่น ๆ แต่ปัญหาเหล่านี้เป็นรูปธรรมและมีข้อมูลทางเทคนิคเพิ่มเติมมากมายและบางครั้งก็ค่อนข้างยากที่จะเข้าใจประเด็นหลักและสาเหตุที่แท้จริงของพฤติกรรมของระบบบั๊ก

ด้วยการถามคำถามนี้ความตั้งใจของฉันคือการเริ่มต้นเพจวิกิชุมชนซึ่งอนุญาตให้ใช้งานการแก้ไขปัญหาเครือข่ายทั่วไปและประสบการณ์การดีบัก ฉันหวังว่าผู้ใช้ Linux และ Unix สามารถจดจำและแก้ไขปัญหาได้ง่ายขึ้น ("หารและพิชิต") โดยใช้หน้านี้

ผู้ปกครองของหน้านี้ควรจะ ปฏิบัติที่ดีที่สุดในการวินิจฉัยปัญหา แต่ที่นี่เราควรเน้นการแก้ไขปัญหาเครือข่ายจากผู้ใช้และเคอร์เนลพื้นที่

ฉันคิดว่าถ้าคุณ:

  1. แบ่งปันข้อมูลเกี่ยวกับการใช้เครื่องมือวิเคราะห์เครือข่ายที่ยอดเยี่ยมพร้อมตัวอย่างการใช้งานที่เป็นรูปธรรมและตัวอย่างข้อบกพร่องของเครือข่ายซึ่งช่วยในการตรวจจับ
  2. แบ่งปันลิงก์ไปยังบทช่วยสอนเครือข่ายที่ยอดเยี่ยมซึ่งเชื่อมต่อกับหัวข้อนี้
  3. บอกวิธีการทั่วไปหรือสูตรอาหารที่อนุญาตให้แก้ไขปัญหาเครือข่ายบางระดับ
  4. แบ่งปันข้อมูลเกี่ยวกับชุดเครื่องมือของคุณสำหรับการดีบักเครือข่ายและการแก้ไขปัญหา

มันจะเหมาะที่สุดสำหรับหัวข้อนี้


ฉันจะเริ่มต้นจากการแบ่งปันการเชื่อมโยงไป varios เครื่องมือวินิจฉัยและง่ายกวดวิชาอายุ 12 ปี นอกจากนี้ยังมีการกวดวิชา Archlinuxดูเหมือนว่าจะมีข้อมูลจริงเกี่ยวกับเรื่องของเรา และสำหรับการดำน้ำในเครือข่ายลินุกซ์เราจำเป็นต้องเยี่ยมชมLinux Networking-HOWTOอย่างแน่นอน


Q & A นี้มีสิ่งหนึ่งที่อื่นที่จะต้องพิจารณา 2 เครื่องในเครือข่ายที่กำหนดค่ากับที่อยู่ IP เดียวกัน: unix.stackexchange.com/questions/85887/...
slm

คู่มือการแก้ไขปัญหาเครือข่ายที่มีประโยชน์อื่น ๆ : cisco.com/en/US/docs/internetworking/troubleshooting/guide/…
Ryne Everett

คำตอบ:


118

ฉันคิดว่าหลักการทั่วไปของการแก้ไขปัญหาเครือข่ายคือ:

  1. ค้นหาว่าสแต็ก TCP / IP ระดับใด (หรือสแต็กอื่น) เกิดปัญหา
  2. ทำความเข้าใจกับพฤติกรรมของระบบที่ถูกต้องคืออะไรและอะไรคือความเบี่ยงเบนจากสถานะระบบปกติ
  3. พยายามอธิบายปัญหาด้วยประโยคเดียวหรือหลายคำ
  4. การใช้ข้อมูลที่ได้รับจากระบบบั๊กกี้ประสบการณ์และประสบการณ์ของผู้อื่น (google ฟอรัมต่าง ๆ ฯลฯ ) พยายามแก้ปัญหาจนสำเร็จ (หรือล้มเหลว)
  5. หากคุณล้มเหลวให้ถามคนอื่นเกี่ยวกับความช่วยเหลือหรือคำแนะนำ

สำหรับฉันฉันมักจะได้รับข้อมูลที่จำเป็นทั้งหมดโดยใช้เครื่องมือที่จำเป็นทั้งหมดและพยายามจับคู่ข้อมูลนี้กับประสบการณ์ของฉัน การตัดสินใจระดับของสแต็กเครือข่ายที่มีข้อบกพร่องช่วยในการตัดสายพันธุ์ที่ไม่น่าเป็นไปได้ การใช้ประสบการณ์ของคนอื่นช่วยในการแก้ปัญหาอย่างรวดเร็ว แต่บ่อยครั้งมันนำไปสู่สถานการณ์ที่ฉันสามารถแก้ไขปัญหาบางอย่างได้โดยไม่ต้องเข้าใจและหากปัญหานี้เกิดขึ้นอีกครั้ง

และโดยทั่วไปฉันไม่รู้ว่าฉันจะแก้ปัญหาเครือข่ายได้อย่างไร ดูเหมือนว่ามีฟังก์ชั่นเวทมนต์บางอย่างในสมองของฉันชื่อSolveNetworkProblem(information_about_system_state, my_experience, people_experience)ซึ่งบางครั้งสามารถตอบกลับคำตอบที่ถูกต้องและบางครั้งก็อาจล้มเหลว (เช่นที่นี่TCP ตายบนแล็ปท็อป Linux )

ฉันมักจะใช้ประโยชน์จากชุดนี้สำหรับการแก้จุดบกพร่องเครือข่าย:

  • ifconfig(หรือip link, ip addr) - เพื่อรับข้อมูลเกี่ยวกับอินเทอร์เฟซเครือข่าย
  • ping- สำหรับการตรวจสอบหากโฮสต์เป้าหมายสามารถเข้าถึงได้จากเครื่องของฉัน pingสามารถใช้สำหรับการวินิจฉัย DNS ขั้นพื้นฐานได้เราสามารถ ping โฮสต์ด้วยที่อยู่ IP หรือชื่อโฮสต์แล้วตัดสินใจว่า DNS ใช้งานได้หรือไม่ และแล้วtracerouteหรือtracepathหรือmtrจะมองสิ่งที่เกิดขึ้นในทางมี
  • dig - วินิจฉัยทุกอย่าง DNS
  • dmesg | lessหรือdmesg | tailหรือdmesg | grep -i error- สำหรับการทำความเข้าใจสิ่งที่เคอร์เนลคิดเกี่ยวกับปัญหาบางอย่าง
  • netstat -antp+ | grep smth- การใช้คำสั่ง netstat ที่เป็นที่นิยมมากที่สุดของฉันซึ่งแสดงข้อมูลเกี่ยวกับการเชื่อมต่อ TCP ฉันมักจะทำการกรองบางอย่างโดยใช้ grep ดูเพิ่มเติมใหม่ssคำสั่ง (จากiproute2ใหม่มาตรฐานชุดเครื่องมือเครือข่าย Linux) และในขณะที่lsoflsof -ai tcp -c some-cmd
  • telnet <host> <port> - มีประโยชน์อย่างมากสำหรับการสื่อสารกับบริการ TCP ต่างๆ (เช่น SMTP, โปรโตคอล HTTP) และเราสามารถตรวจสอบโอกาสทั่วไปในการเชื่อมต่อกับพอร์ต TCP
  • iptables-save(บน Linux) - เพื่อดัมพ์ตาราง iptables แบบเต็ม
  • ethtool - รับพารามิเตอร์การ์ดอินเทอร์เฟซเครือข่ายทั้งหมด (สถานะของลิงก์ความเร็วพารามิเตอร์ offload ... )
  • socat- เครื่องมือกองทัพสวิสเพื่อทดสอบโปรโตคอลเครือข่ายทั้งหมด (UDP, มัลติคาสต์, SCTP ... ) มีประโยชน์อย่างยิ่ง (มากกว่า telnet) โดยมี-dตัวเลือกน้อย
  • iperf - เพื่อทดสอบความพร้อมใช้งานแบนด์วิดท์
  • openssl( s_client, ocsp, x509... ) เพื่อแก้ปัญหาปัญหา SSL / TLS / PKI ทั้งหมด
  • wireshark - เครื่องมืออันทรงพลังสำหรับจับและวิเคราะห์ปริมาณการใช้เครือข่ายซึ่งช่วยให้คุณวิเคราะห์และตรวจจับข้อบกพร่องของเครือข่ายจำนวนมาก
  • iftop - แสดงผู้ใช้รายใหญ่บนเครือข่าย / เราเตอร์
  • iptstate (บน Linux) - มุมมองปัจจุบันของการติดตามการเชื่อมต่อของไฟร์วอลล์
  • arp(หรือใหม่ (Linux) ip neigh) - แสดงสถานะตาราง ARP
  • routeหรือใหม่กว่า (บน Linux) ip route- แสดงสถานะตารางเส้นทาง
  • strace(หรือtruss, dtraceหรือtuscขึ้นอยู่กับระบบ) - เป็นเครื่องมือที่มีประโยชน์ซึ่งแสดงให้เห็นว่าสิ่งที่สายระบบไม่กระบวนการปัญหาก็ยังแสดงให้เห็นรหัสข้อผิดพลาด (errno) เมื่อสายระบบล้มเหลว ข้อมูลนี้มักจะบอกว่าเพียงพอสำหรับการทำความเข้าใจพฤติกรรมของระบบและการแก้ปัญหา อีกวิธีหนึ่งคือการใช้เบรกพอยต์ในฟังก์ชั่นเครือข่ายบางอย่างในgdbช่วยให้คุณทราบเมื่อมีการทำและข้อโต้แย้งที่
  • เพื่อตรวจสอบปัญหาไฟร์วอลล์บน Linux: iptables -nvLแสดงจำนวนการจับคู่แพ็คเก็ตโดยแต่ละกฎ ( iptables -Zเป็นศูนย์ตัวนับ) LOGเป้าหมายที่แทรกอยู่ในโซ่ไฟร์วอลล์จะเป็นประโยชน์เพื่อดูว่าแพ็กเก็ตเข้าถึงพวกเขาและวิธีการที่พวกเขาได้แล้วเปลี่ยนเมื่อพวกเขาได้รับมี เพื่อรับเพิ่มเติมNFLOG(เกี่ยวข้องกับulogd) จะเข้าสู่ระบบแพ็คเก็ตเต็มรูปแบบ

Geez พูดคุยอย่างละเอียด!
mVChr

7
nmapฉันต้องการเพิ่ม โปรไฟล์ของพอร์ตที่เปิดอยู่บนเครื่องสามารถให้คำแนะนำได้อย่างรวดเร็วว่าคุณกำลังดูเซิร์ฟเวอร์ Linux หรือ Windows หรือไม่
Adam Monsen

7
tcpdumpฉันต้องการเพิ่ม เป็นตัววิเคราะห์แพ็คเก็ตมาตรฐานสำหรับ TCP
jhvaras

14

จำนวน "ปัญหาเครือข่าย" ที่น่าประหลาดใจนั้นทำให้เกิดปัญหา DNS ไม่ว่าจะเป็นประเภทใดปัญหาหนึ่ง การแก้ไขปัญหาเบื้องต้นควรใช้ping -n w.x.y.zเพื่อแก้ไขปัญหาDNS ของชื่อโฮสต์และเพียงตรวจสอบการเชื่อมต่อ IP หลังจากนั้นใช้route -nเพื่อตรวจสอบเส้นทาง IP เริ่มต้นโดยไม่มีการแก้ไข DNS

หลังจากตรวจสอบการเชื่อมต่อ IP และเส้นทางnslookup, hostและdigสามารถให้ผลผลิตข้อมูล โปรดจำไว้ว่า "การล็อก" สามารถระบุได้ว่าการหมดเวลา DNS เกิดขึ้น

/etc/resolv.confอย่าลืมที่จะตรวจสอบการดำรงอยู่และเนื้อหาของ ไคลเอนต์ DHCP เปลี่ยนไฟล์นั้นด้วยการเช่าซื้อทุกครั้งและบางครั้งพวกเขาเข้าใจผิดหรือหากพื้นที่ดิสก์ไม่แน่นการอัพเดตอาจไม่เกิดขึ้น


8

ปัญหาการเดินสายสามารถมีอยู่ได้ หากคุณสามารถเข้าถึงฮาร์ดแวร์ตรวจสอบให้แน่ใจว่าได้เสียบสายเคเบิลทั้งหมดแล้วและใช้งานกลไก หากคุณสามารถเห็นเราเตอร์หรืออีเธอร์เน็ตอินเตอร์เฟสตรวจสอบให้แน่ใจว่าไฟลิงค์เปิดอยู่

จากระยะไกลคุณต้องขึ้นอยู่กับและethtoolmii-tool

[root@flask ~]# ethtool eth0
Settings for eth0:
        Supported ports: [ TP MII ]
        Supported link modes:   10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
        Supported pause frame use: No
        Supports auto-negotiation: Yes
        Advertised link modes:  10baseT/Half 10baseT/Full 
                                100baseT/Half 100baseT/Full 
        Advertised pause frame use: Symmetric
        Advertised auto-negotiation: Yes
        Speed: 10Mb/s
        Duplex: Half
        Port: MII
        PHYAD: 24
        Transceiver: internal
        Auto-negotiation: on
        Supports Wake-on: g
        Wake-on: d
        Current message level: 0x00000001 (1)
                               drv
        Link detected: yes

"ตรวจพบลิงก์: ใช่" ดี แต่ 10Mb / s และ Half duplex ไม่ดีเนื่องจาก NIC ในคอมพิวเตอร์เครื่องนั้นสามารถทำได้ดีกว่า ฉันต้องคิดออกว่า NIC โง่หรือสายเคเบิล คอมพิวเตอร์เครื่องอื่นที่ต่อเข้ากับเราเตอร์เครื่องเดิมบอกว่า 100Mb / s Full duplex

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.