IP 링크 설정위/아래: 스크립트를 호출하는 방법은 무엇입니까?

IP 링크 설정위/아래: 스크립트를 호출하는 방법은 무엇입니까?

배포판에 따라 호출 ip link set <iface> up(또는 아래로, ifup/ifdown도)은 다양한 구성 파일(내 생각에는 Debian의 경우 /etc/network/interfaces, Gentoo의 경우 /etc/conf.d/net...)을 살펴보고 Make 변경(예: DHCP와의 상호 작용 등)

내가 아는 한 strace, 이 ip명령은 커널과 직접 대화합니다(그렇습니까?). 그러나 결국 누군가가 이러한 쉘 스크립트를 실행하거나 구성을 읽습니다. 이것의 메커니즘은 무엇입니까? 초기화 시스템이 일부 커널 인터페이스의 작동/작동 중지 상태 변경을 수신하고 이러한 스크립트를 실행합니까? 아니면 차이가 있나요?

답변1

설명했듯이 호출은 다음을 ip link set <iface> up통해 커널과 최소한으로 통신합니다.rtnetlink응용 프로그래밍 인터페이스(이것은 라우팅뿐만 아니라 링크, 주소 등에 관한 것입니다. 여기 있습니다. RTM_NEWLINK) 관리 모드에서 인터페이스를 시작하십시오. 이전 도구는 ifconfig더 이상 사용되지 않는(네트워킹용) ioctl API(여기)를 사용하여 SIOCGIFFLAGS커널에 동일한 요청을 보냅니다 .

이러한 명령은 필요한 작업만 수행하는 하위 수준 명령입니다.

ifup(데비안에서)의 일부입니다위 아래라면(또는 대안위아래 2인 경우) 제품군이며 다양한 Linux 배포판에서 서로 다르게 구현됩니다. 그것들은 스스로를 호출할 수 있는 스크립트 세트일 뿐이며 ip link set ..., 아마도 그들 중 일부는 다른 사용 가능한 도구(예:네트워크 관리자). 그러므로 그것들을 같은 수준에 놓을 수는 없습니다. 전혀 ip link set ... up그렇지 않습니다 ifup ....

이제 다른 웹 도구는 어떻게 되나요?네트워크 관리자상호 작용하고 무슨 일이 일어나고 있는지 알고 있습니까? 그들은 커널에 대해 묻고 있기 때문에rtnetlink, 관심 있는 일부 네트워크 이벤트에 대한 알림을 받으세요.인터넷 연결API 구현은 멀티캐스트를 지원합니다. 즉, 여러 관련 당사자(사용자 공간 또는 커널에 속함)가 단일 메시지를 효과적으로 수신할 수 있으므로 이벤트 구현이 단순화됩니다.

일반적으로 무언가(여기 ip link set ... up)가 커널에 메시지를 보내면 커널은 관심 있는 당사자에게 멀티캐스트되는 메시지로 응답합니다. 명령은 ip link이 메시지를 수신하고 이제 대기 중인 모든 도구는 "인터페이스가 방금 시작되었습니다"라는 사실을 알게 됩니다. 관리 상태 시작과 작동 상태 시작의 차이점)

명령 출력으로 구동되는 이벤트 루프를 사용하여 스크립트에서 동일한 작업을 수행할 수 있습니다.ip monitor커널에서 네트워크 이벤트를 기다리고 있습니다. 물론 실제로 구문 분석 가능한 출력이 더 좋을 것입니다. 불행하게도 다른 많은 출력은IP 경로 2하위 명령은 JSON 출력을 지원합니다 -json( ip monitor.

이것은기초적인셸 예제는 ip monitor link해당 인터페이스가 변경될 때마다(작동 상태와 관련이 없더라도) 인터페이스의 작동 상태를 표시하는 데 기반을 두고 있습니다.기초적인예). 신뢰할 수 없는 출력을 구문 분석하므로 일부 경우에는 실패할 수 있습니다.

#!/bin/sh

ip -o monitor link | while read -r index interface status remaining; do
    iface=$(printf '%s\n' "$interface" | sed -E 's/(@.*)?:$//')
    operstate=$(printf '%s\n' "$remaining" | grep -Eo ' state [^ ]+' | sed 's/^ state //')
    printf '%s %s\n' "$iface" "$operstate"
done

위 스크립트가 실행되는 동안 다른 곳에서 다음 명령을 시도해 보세요.

# ip link add test1 type veth peer name test2
# ip link set test1 up
# ip link set test2 up
# ip link delete test1 # script doesn't handle correctly lines starting with Deleted

주소, 방향 등도 마찬가지입니다. 이것은네트워크 관리자명령에 반응합니다 ip link set <iface> up.

관련 정보