인터페이스가 다운되었을 때 `ip`와 `ifconfig`의 동작이 다른 이유는 무엇입니까?

인터페이스가 다운되었을 때 `ip`와 `ifconfig`의 동작이 다른 이유는 무엇입니까?

먼저 인터페이스를 종료합니다.

# Shutdown the interfaces
ip link set enp2s0f0 down
ip link set enp2s0f1 down

사용 ifconfig:

# Set subnets to interfaces
ifconfig enp2s0f0 10.0.0.1/24
ifconfig enp2s0f1 10.0.1.1/24

# Add two routes
ip route add 10.11.1.1 dev enp2s0f0
ip route add 10.11.0.1 dev enp2s0f1

# Result => NO PROBLEM, my routes are here even tho the interfaces are down
$ip route
10.0.0.0/24 dev enp2s0f0 proto kernel scope link src 10.0.0.1 
10.0.1.0/24 dev enp2s0f1 proto kernel scope link src 10.0.1.1 
10.11.0.1 dev enp2s0f1 scope link 
10.11.1.1 dev enp2s0f0 scope link 

사용 ip:

# Set subnets to interfaces
ip addr add 10.0.0.1/24 dev enp2s0f0
ip addr add 10.0.1.1/24 dev enp2s0f1

$ip route
#NOTHING => Where are the routes?!

# Add two routes
ip route add 10.11.1.1 dev enp2s0f0
ip route add 10.11.0.1 dev enp2s0f1

$ip route
#NOTHING => Where are my routes?!

ip link set enp2s0f0 up
ip link set enp2s0f1 up

# Result => WOW only two routes appeared miraculously
$ip route
10.0.0.0/24 dev enp2s0f0 proto kernel scope link src 10.0.0.1 
10.0.1.0/24 dev enp2s0f1 proto kernel scope link src 10.0.1.1 
# => Where are my 10.11.*.* routes?
  1. ip route내 경로가 표시되지 않는 이유는 무엇입니까 ?
  2. 인터페이스를 활성화한 후 내 경로가 기적적으로 추가된 위치는 어디입니까? 왜 전에는 볼 수 없나요?
  3. 인터페이스를 불러온 후 내 경로가 표시되지 않는 이유는 무엇입니까?

인터페이스를 활성화하기 전에 모든 경로를 설정하고 싶습니다. 그렇게 해도 아무런 문제가 없습니다 ifconfig. 다음에는 어떤 놀라움이 찾아올지 궁금합니다.

나는 호환 가능하다고 생각했고 ifconfigifconfig ip에서 ip로의 이동이 그렇게 쉽지 않을 것이라고 생각했습니다.

답변1

세 가지 질문 모두 하나의 오해에서 비롯됩니다.

ifconfig인터페이스와 주소는 up옵션을 의미합니다., 따라서 귀하의 ifconfig예에서는 주소를 지정하는 동시에 인터페이스가 나타납니다.

이는 다음을 의미합니다.

ifconfig enp2s0f0 10.0.0.1/24
ifconfig enp2s0f1 10.0.1.1/24

실제로는 짧습니다

ifconfig enp2s0f0 10.0.0.1/24 up
ifconfig enp2s0f1 10.0.1.1/24 up

ip~에서iproute2다음 작업을 보다 깔끔하게 구성합니다.

  • 가져오는상호 작용올리고 내리고( ip link),
  • IP 할당주소네트워크 장치( ip address) 에 연결
  • 커널 구성라우팅테이블( ip route).

ifconfig이러한 서로 다른 개념을 혼합하여 더 혼란스럽거나 덜 직관적입니다.


경로, 네트워크 장치, 인터페이스 및 터널의 상태를 관리하는 편리한 방법을 원한다면 네트워크 구성 관리 도구 사용을 고려해야 합니다. 이를 통해 편리한 선언적 구문으로 네트워크를 정의할 수 있으며, 명령 하나로 빠르게 시작하거나 종료할 수 있습니다.

다음은 일반적인 Linux 배포판에 포함된 일부 도구입니다.

  • 데비안 –ifupdown( /etc/network/interfaces, /etc/network/interfaces.d/)
  • 우분투 –netplan.io( /etc/netplan/)
  • 레드햇 엔터프라이즈 리눅스/CentOS –ifcfg( /etc/sysconfig/network-scripts/)
  • 일반적으로 데스크톱 환경의 배포판 –네트워크매니저( /etc/NetworkManager/)

완전성을 위해 귀하의 질문에 대한 답변은 다음과 같습니다.

  1. ip route내 경로가 표시되지 않는 이유는 무엇입니까 ?

해당 링크가 다운되면 경로가 기본 테이블에 저장되지 않습니다. 명령 ip시퀀스는 관련 인터페이스를 먼저 불러오지 않습니다.

  1. 인터페이스를 활성화한 후 내 경로가 기적적으로 추가된 위치는 어디입니까? 왜 전에는 볼 수 없나요?

인터페이스가 다운되면 디바이스의 경로가 라우팅 테이블에 등록되지 않습니다.

  1. 인터페이스를 불러온 후 내 경로가 표시되지 않는 이유는 무엇입니까?

해당 인터페이스가 먼저 작동되어야 하므로 경로가 추가되지 않았습니다. 다운된 인터페이스에서 경로 추가를 시도한 경우 RTNETLINK answers: Network is down또는 같은 오류 메시지가 표시되었을 것입니다 . Error: Device for nexthop is not up.반환 코드( $?)도 0이 아니어야 합니다.

인터페이스를 활성화하기 전에 모든 경로를 설정하고 싶습니다.

내가 아는 한, 이는 ifconfig. ifconfig경로를 추가하기 전에 명령이 실제로 인터페이스를 불러온다는 점을 기억하세요 .

다음에는 어떤 놀라움이 찾아올지 궁금합니다.

바라건대 아무도 없습니다. ip의 관심사 분리는 다음과 같은 경우에 많은 의미가 있습니다.그것을 알아가다.

생각 ifconfig하고 ip궁합이 맞았다

두 명령은 일부 겹치는 부분이 있지만 서로 바꿔 사용할 수는 없습니다.

관련 정보