나가는 네트워크 인터페이스(RTLINK 응답에 "RTA_OIF"가 누락됨)가 없는 Linux IP 경로는 무엇이며 테스트용으로 만드는 방법은 무엇입니까?

나가는 네트워크 인터페이스(RTLINK 응답에 "RTA_OIF"가 누락됨)가 없는 Linux IP 경로는 무엇이며 테스트용으로 만드는 방법은 무엇입니까?

RTLINK를 사용하여 Linux 커널(네트워크 네임스페이스)에서 사용 가능한 IP 경로를 쿼리할 때 한 테스트 시스템에서 RTLINK가 속성이 없는 경로 RTA_OIF, 즉 나가는 네트워크 인터페이스가 지정되지 않은 경로를 반환한 것을 발견했습니다.

불행하게도 나는 명령을 사용하여 (테스트를 위해) 이 상황을 재현하는 방법을 알지 못하며 ip route add, 지금까지 내 손이 닿는 곳에 있는 누구도 네트워크의 외부 표시 없이 처음에 이 경로를 생성한 "무엇"을 설명할 수 없습니다. 상호 작용. Linux 커널 소스 코드를 살펴보면 나가는 네트워크 인터페이스 속성이 실제로 선택 사항이라는 것을 알았습니다. 그러나 내 시도는 항상 ip route add나가는 네트워크 인터페이스가 커널에 의해 자동으로 추가되거나 액세스할 수 없는 것으로 끝납니다.

ip route add 1.1.1.1/32 via 1.1.1.2주어진 RTNETLINK answers: Network is unreachable.

다음 (실패한) 시도:

ip addr add 1.1.1.2/32 dev ens33
ip route add 1.1.1.1/32 via 1.1.1.2
ip route show

... 그런 다음 1.1.1.1 via 1.1.1.2 dev ens33커널이 자동으로 적합한 나가는 네트워크 인터페이스를 삽입합니다(따라서 RTA_OIF처음에 지정하지 않았음에도 불구하고 존재합니다).

"나가는 인터페이스가 없는 linux ip 경로" 또는 유사한 검색은 여기서 중요한 것을 간과하지 않는 한 유용한 결과를 제공하지 않습니다.

그렇다면 나가는 네트워크 인터페이스 없이 IP 경로가 있는 (테스트) 케이스를 어떻게 생성합니까? 내가 여기서 무엇을 간과하고 있습니까?

답변1

나가는 네트워크 인터페이스(라우팅 관련 규칙 아님)가 없는 라우팅은 최소한 세 가지 사용 사례에 유용하다는 것이 밝혀졌습니다.

  1. 소위블랙홀경로가 지정되면 IP 스택은 해당 경로와 일치하는 모든 트래픽을 자동으로 삭제합니다.
  2. 접근할 수 없음IP 스택이 해당 경로로 향하는 모든 트래픽을 삭제하고 추가로 ICMP(v6) 연결할 수 없는 응답을 트리거하는 경로입니다.
  3. 금지하다IP 스택은 다시 모든 트래픽에 대한 경로를 삭제하고 ICMP(v6) 응답도 보내지만 이번에는 "접근할 수 없음" 대신 "금지됨"입니다.

이러한 경로는 다음과 같이 쉽게 만들 수 있습니다.

# ip route add blackhole 1.2.3.4
# ip route add unreachable 1.2.3.5
# ip route add prohibit 1.2.3.6

그런 다음 ip route show다음 경로에 대해 나가는 네트워크 인터페이스가 없는지 확인합니다.

$ ip route show
...
blackhole 1.2.3.4
unreachable 1.2.3.5
prohibit 1.2.3.6

관련 정보