/etc/network/interfaces가 인터페이스를 시작할 수 있는지 확인하는 방법은 무엇입니까?

/etc/network/interfaces가 인터페이스를 시작할 수 있는지 확인하는 방법은 무엇입니까?

데비안 기반 헤드리스 상자가 있습니다. 웹 인터페이스를 통해 액세스할 수 있도록 설계되었습니다. 네트워크가 통과했습니다 /etc/network/interfaces. 파일이 실제로 유효한지 확인하려고 합니다. 내 생각은 파일에 오류가 있는지 확인하고 이 경우 기본 파일로 돌아가는 것입니다.

내 질문은 질문의 첫 번째 부분인 discover error in files 에 관한 것입니다 interfaces.

명령 사용에 관해 많은 질문을 찾았 ifup --no-act지만 실제로 본 것은 이 접근 방식이 내 상황에 충분히 강력하지 않다는 것입니다. 예를 들어:

root@arm:~# ifup --no-act --interfaces=/etc/network/interfaces eth0
run-parts  /etc/network/if-pre-up.d
ip addr add 1s23.123.123.123/255.255.255.192 broadcast +          dev eth0 label eth0
ip link set dev eth0   up
 ip route add default via 123.123.123.122  dev eth0
run-parts  /etc/network/if-up.d

유효하지 않은 IP 주소 세트(첫 번째 옥텟에 추가 "s")를 기록해 두십시오. 이 명령은 오류를 제공하지 않으며(어쨌든 볼 수 있음) 이 상태의 파일로 컴퓨터를 다시 시작하면 네트워크 기능이 손실됩니다. 작동하는 interfaces결과는 매우 유사합니다(부분 제외 broadcast +).

root@arm:~# ifup --no-act --interfaces=/etc/network/interfaces eth0
run-parts  /etc/network/if-pre-up.d
ip addr add 123.123.123.123/255.255.255.192 broadcast 123.123.123.127     dev eth0 label eth0
ip link set dev eth0   up
 ip route add default via 123.123.123.122  dev eth0
run-parts  /etc/network/if-up.d

이것은 주로 내가 피하고 싶은 문제입니다. 내 질문은 /etc/network/interfaces파일에서 잘못된 구성을 감지하는 방법입니다 . 더하기 기호는 오류를 나타냅니까? 무슨 뜻이에요? 이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

답변1

짧은 대답: ifup --no-act네트워크 구성을 사용하여 전화를 걸어 반환 코드를 테스트하고 확인합니다.

긴 답변: 저는 임베디드 장치에 대해 매우 유사한 작업을 수행해 왔습니다. 여기에는 networking부팅하기 전에 실행되어 시스템이 유효한 이더넷 설정을 갖도록 보장하기 위해 만든 init 스크립트의 관련 부분이 있습니다.

ETH0_CUSTOM=/var/myproject/etc/interfaces.eth0 
result=1

if [ -f "${ETH0_CUSTOM}" ]; then
    ifup -n -i "${ETH0_CUSTOM}" eth0
    if [ $? -eq 0 ]; then
        ln -sf "${ETH0_CUSTOM}" /etc/network/interfaces.eth0
        result=0
    else
        echo "Validating ${ETH0_CUSTOM} failed"
    fi
fi

if [ ${result} -ne 0 ]; then
    ln -sf /etc/network/interfaces.eth0.default /etc/network/interfaces.eth0
fi

원본 버전에서는 /etc/network/interfaces유효한 설정이

source /etc/network/interfaces.eth0

답변2

여기에는 두 가지 문제/접근 방식이 있다고 생각합니다.

  • 사용자가 실수하지 않도록 보호합니다.
  • 수정된 구성을 영구적으로 만들기 전에 테스트할 수 있는 방법이 있습니까?

첫 번째 경우 모든 구성은 스마트 도구를 통해 수행됩니다 $EDITOR /etc/foobar. 이 경우 IP 주소가 유효한지, 기본 경로가 동일한 네트워크에 있는지 등을 확인할 수 있습니다. 도구는 일부 스크립트이거나 그래픽/웹 기반 관리 인터페이스(예: OpenWRT 등)일 수 있습니다.

또 다른 점은 많은 시스템에서 사용자가 디스플레이 설정(해상도 등)을 확인하고 사용자가 아무 작업도 하지 않을 경우 마지막 작업 구성으로 대체하는 것처럼 네트워크 구성이 적용된 후 사용자가 이를 확인하도록 하는 것입니다.

따라서 다음과 같습니다.

  • 시작 구성을 새 구성과 분리하여 사용자가 변경할 수 있도록 허용새로운구성만 해당됩니다(시작 구성이 아님!).
  • 사용자가 새 구성을 적용하려면 shutdown -r +5약 5분 동안 재부팅( )을 예약한 후 새 구성을 로드합니다.

  • 이제 사용자가 시스템에 계속 액세스할 수 있는지 확인하도록 합니다(새 SSH 세션 열기 포함).

  • 가능한 경우 변경 사항을 확인하고 재부팅을 취소한 후 새 구성을 시작 구성에 복사할 수 있습니다.

  • 수정 사항이 적용된 후 시스템에 액세스할 수 없으면 변경 사항을 확인할 수 없으며 재부팅하면 다시 시작됩니다(부팅 구성이 정상이라고 가정하면 시스템이 사용을 시작했기 때문에 그럴 것입니다). 전에요.)

이 아이디어는 네트워크 인터페이스 구성, 방화벽 구성 등의 변경에 적용되어야 합니다. 그러나 이전에 유효한 시작 구성(일부 중요한 규칙 포함)으로 인해 새 구성이 작동하는 상황이 발생하지 않도록 구성이 독립적이어야 합니다.

(물론 실제로 시스템을 재부팅할 필요는 없으며 구성만 재설정하면 됩니다.)


물론, 이 중 어느 것도 루트 사용자가 다리에 총을 쏘는 것을 막을 수는 없지만 최소한 안전 스위치가 있는 일부 도구를 제공할 수는 있습니다.

콘솔/직렬 포트 등을 통한 백업 액세스가 여전히 가장 좋습니다.


/etc/network/interfaces이 특별한 경우, 사용자가 를 편집 하고 실행하는 데 익숙하다면 ifup이를 제거하는 방법을 가르쳐야 하는데 이는 어려울 수 있습니다. 또는 실제 구성이 실제로 다른 곳에 있도록 시스템을 변경하여 오래된 습관으로 인해 문제가 발생하지 않도록 할 수도 있습니다.

관련 정보