Linux 네트워크 문제 해결 및 디버깅

Linux 네트워크 문제 해결 및 디버깅

Linux 및 Unix 사용자는 때때로 다양한 네트워크 문제에 직면합니다. 이러한 질문 중 다수는 여기 및 다른 문제 해결 포럼에서 제기되었지만 매우 구체적이고 추가 기술 정보가 많이 포함되어 있어 문제가 있는 시스템 동작의 요점과 실제 원인을 이해하기 어려울 때가 있습니다.

제가 이 질문을 드리는 목적은커뮤니티 위키 만들기페이지에서는 네트워크 문제 해결 및 디버깅 경험을 요약할 수 있습니다. Linux 및 Unix 사용자가 이 페이지를 사용하여 네트워크 문제를 보다 쉽게 ​​식별하고 해결("분할 및 정복")할 수 있기를 바랍니다.

이 페이지의 상위 페이지는 다음과 같아야 합니다.문제 진단을 위한 모범 사례. 하지만 여기서는 문제 해결에 집중해야 합니다.인터넷 문제~에서사용자 공간과 커널 공간.

내 생각에 당신은:

  1. 발견하는 데 도움이 되는 특정 사용 예 및 네트워크 오류 예와 함께 몇 가지 훌륭한 네트워크 진단 도구 사용에 대한 정보를 공유합니다.
  2. 해당 주제에 대한 훌륭한 웹 튜토리얼 링크를 공유하세요.
  3. 특정 유형의 네트워크 문제를 해결할 수 있는 일반적인 방법이나 팁에 대해 알려주십시오.
  4. 네트워크 디버깅 및 문제 해결 도구 세트에 대한 정보 공유

그러면 주제에 딱 맞습니다.


다양한 링크 공유부터 시작하겠습니다진단 도구그리고12세 어린이를 위한 간단한 튜토리얼. 이아치 리눅스 튜토리얼우리 주제에 대한 실제 정보가 있는 것 같습니다. Linux 네트워킹에 대해 더 깊이 이해하려면 다음을 방문해야 합니다.리눅스 네트워크-HOWTO.

답변1

제 생각에는 네트워크 문제 해결의 일반적인 원칙은 다음과 같습니다.

  1. 당신의 레벨이 어느 정도인지 확인하세요TCP/IP 프로토콜 스택(또는 다른 스택) 뭔가 잘못되었습니다.
  2. 올바른 시스템 동작이 무엇인지, 정상적인 시스템 상태에서 벗어난 것이 무엇인지 이해합니다.
  3. 질문을 한 문장이나 몇 단어로 표현해 보세요.
  4. 결함이 있는 시스템에서 얻은 정보와 자신의 경험, 타인의 경험(구글, 각종 포럼 등)을 활용하여 성공(또는 실패)할 때까지 문제를 해결하려고 노력하세요.
  5. 그래도 실패하면 다른 사람에게 도움이나 조언을 구하십시오.

나는 대개 필요한 모든 정보를 얻고 그 정보를 내 경험과 일치시키기 위해 필요한 모든 도구를 사용합니다. 네트워크 스택의 어느 수준에 오류가 포함되어 있는지 확인하면 가능성이 낮은 변형을 제거하는 데 도움이 될 수 있습니다. 다른 사람의 경험을 활용하면 문제를 빠르게 해결하는 데 도움이 되지만, 이해하지 못한 채 문제를 해결할 수 있는 상황이 자주 발생하고, 문제가 다시 발생하면 인터넷 없이는 다시 해결할 수 있는 방법이 없습니다.

일반적으로 네트워크 문제를 해결하는 방법을 모르겠습니다. 내 두뇌에는 이라는 마법의 기능이 있는 것 같습니다 SolveNetworkProblem(information_about_system_state, my_experience, people_experience). 이 기능은 때로는 정확히 정답을 반환할 수도 있고 때로는 실패할 수도 있습니다(여기처럼).Linux 노트북에서 TCP가 작동하지 않음).

나는 일반적으로 네트워크 디버깅을 위해 다음 도구 세트를 사용합니다.

  • ifconfig(또는 ip link, ip addr) - 네트워크 인터페이스에 대한 정보를 얻는 데 사용됩니다.
  • ping- 내 컴퓨터에서 대상 호스트에 접근할 수 있는지 확인하는데 사용됩니다. ping기본적인 DNS 진단에도 유용합니다. IP 주소나 호스트 이름으로 호스트를 핑하고 DNS가 제대로 작동하는지 확인할 수 있습니다. 그런 다음 거기에서 무슨 일이 일어나는지 확인 traceroute하십시오 .tracepathmtr
  • dig- 모든 DNS 진단
  • dmesg | less또는 dmesg | tail- dmesg | grep -i errorLinux 커널의 아이디어를 이해하는 데 어려움이 있습니다.
  • netstat -antp+ | grep smth- 가장 일반적으로 사용되는 netstat 명령은 TCP 연결에 대한 정보를 표시합니다. 나는 종종 grep을 사용하여 필터링을 수행합니다. 새 ss명령도 참조하세요( iproute2새 명령에서기준Linux 네트워킹 도구 제품군) 및 lsof예:lsof -ai tcp -c some-cmd
  • telnet <host> <port>- 다양한 TCP 서비스(예: SMTP, HTTP 프로토콜)와 통신하는 데 매우 유용하며 특정 TCP 포트에 연결할 수 있는 일반적인 가능성도 확인할 수 있습니다.
  • iptables-save(Linux에서) - 덤프가득한iptables 테이블
  • ethtool- 모든 네트워크 인터페이스 카드 매개변수 가져오기(링크 상태, 속도, 오프로드 매개변수...)
  • socat- 모든 네트워크 프로토콜(UDP, 멀티캐스트, SCTP...)을 테스트하기 위한 스위스 군용 도구입니다. 특히 유용하며(텔넷보다 더 유용함) 몇 가지 옵션이 있습니다 -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카운터를 0으로 지움). 방화벽 체인에 대상을 삽입하는 것은 LOG어떤 패킷이 해당 대상에 도달했는지, 도착할 때까지 어떻게 변환되었는지 확인하는 데 유용합니다. 더 자세한 이해를 위해 전체 패킷이 기록됩니다 NFLOG(상대적으로 ).ulogd

답변2

놀랍게도 많은 "네트워크 문제"는 일종의 DNS 문제로 인해 추적될 수 있습니다. 초기 문제 해결에서는 ping -n w.x.y.z호스트 이름의 DNS 확인을 무시하고 IP 연결만 확인해야 합니다. 나중에 route -nDNS 확인 없이 기본 IP 경로를 확인하는 데 사용됩니다.

IP 연결 및 라우팅을 확인한 후 nslookup, host및 은 dig메시지를 생성할 수 있습니다. "잠금"은 DNS 시간 초과를 나타낼 수 있다는 점에 유의하세요.

현재 상태와 콘텐츠를 확인하는 것을 잊지 마세요 /etc/resolv.conf. DHCP 클라이언트는 임대할 때마다 이 파일을 변경하며 때로는 오류가 발생하거나 디스크 공간이 부족한 경우 업데이트가 발생하지 않을 수 있습니다.

답변3

배선 문제가 있을 수 있습니다. 하드웨어에 접근할 수 있는 경우 모든 케이블이 연결되어 있고 기계적으로 연결되어 있는지 확인하세요. 라우터나 이더넷 인터페이스가 보이면 링크 표시등이 켜져 있는지 확인하세요.

ethtool원격에서는 및 에 의존해야 합니다 mii-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

"링크 감지됨: 예"는 좋지만 이 컴퓨터의 NIC가 더 잘 작동할 수 있으므로 10Mb/s 및 반이중은 좋지 않습니다. 네트워크 카드인지 케이블인지 알아내야 합니다. 동일한 라우터에 연결된 다른 컴퓨터에서는 전이중 100Mb/s가 표시됩니다.

관련 정보