일시적인 인터넷 연결 끊김을 프로그래밍 방식으로 시뮬레이션

일시적인 인터넷 연결 끊김을 프로그래밍 방식으로 시뮬레이션

케이블 연결을 끊거나 연결하거나 인터페이스를 닫거나 여는 것 외에 프로그램이 인터넷 연결을 끊었다가 다시 복구할 수 있는 다른 방법이 있습니까?

이는 프로그램이 이 상황에 어떻게 반응하는지 이해하는 데 필요합니다.

이 경우에는 한 프로그램의 동작에 관심이 있으므로 한 응용 프로그램만 연결이 끊어지면 충분하지만, 반면에 모든 프로그램의 연결이 끊어지는 솔루션도 좋을 것입니다.

제가 시뮬레이션하고 싶은 프로그래밍 외의 예는 컴퓨터와 "인터넷이 나오는 곳" 사이에 스위치가 있고 인터넷과 스위치 사이의 케이블을 분리하는 경우입니다. 이 경우 컴퓨터의 연결이 끊어지지만 컴퓨터나 응용 프로그램은 정확히 무슨 일이 일어났는지 감지할 수 없습니다.

답변1

프로그램이 통신해야 하는 IP 주소와 포트 번호를 알고 있는 경우 가능한 해결책은 로컬 방화벽 규칙을 사용하여 애플리케이션과 관련된 모든 네트워크 패킷을 삭제하거나 --reject-with사용자 정의 유형을 사용하는 것입니다.

iptables아래 예에서는 본질적으로 큰 변경 없이 적용되어야 하는 용어를 사용 firewalld하지만 동일한 개념이 nftables모든 방화벽 관리 시스템에 적용되어야 합니다.

  • 모든 항목을 제거하세요. 로컬 게이트웨이 외부 어딘가에서 네트워크 중단을 시뮬레이션합니다. 즉, 로컬 세그먼트 및 게이트웨이에 대한 연결은 여전히 ​​유효하지만 해당 영역 외부의 패킷은 시스템에 전혀 도달하지 않습니다. 이로 인해 네트워크 연결 시간이 초과됩니다. 실제로 오류 시나리오 중 라우터 등이 오류 감지를 시작하면 이는 결국 다음과 같은 상황으로 바뀔 수 있습니다.

  • REJECT 사용 --reject-with icmp-[host|net]-unreachable: 이전과 동일하지만 이제 시뮬레이션된 라우터가 연결 손실을 감지하고 실패한 링크를 통해 연결을 시도하는 모든 호스트에 오류를 보고했습니다. 이로 인해 애플리케이션은 연결 끊김을 감지하고 시간 초과 상황보다 더 빨리 사용자에게 오류를 보고하게 됩니다. (물론 누군가 오류가 발생한 것으로 추정되는 위치와 시스템 간의 ICMP 오류 응답을 차단했을 수 있으므로 연결 오류는 "모든 것을 삭제"하는 상황과 유사합니다.)

다른 가능한 시나리오:

  • 구성된 DNS 확인자 서버의 포트 53에서 들어오는 응답(TCP 및 UDP)을 모두 삭제합니다. 이는 DNS 서버 오류를 시뮬레이션합니다. 기존 연결은 작동하고 알려진 IP 주소에 대한 연결은 계속 작동하지만 호스트 이름을 통한 연결은 실패합니다.

  • 애플리케이션과 연결된 TCP 포트에서: REJECT --reject-with tcp-reset애플리케이션에 필요한 서비스가 원격 호스트에서 실행되고 있지 않지만 원격 호스트 자체는 정상적으로 작동하는 상황을 시뮬레이션하는 데 사용됩니다. (즉, 이는 원격 호스트가 재부팅 중이거나 일종의 유지 관리를 받고 있으며 애플리케이션 관련 서비스를 종료하는 중임을 시뮬레이션합니다.)

관련 정보