데비안 기반 헤드리스 상자가 있습니다. 웹 인터페이스를 통해 액세스할 수 있도록 설계되었습니다. 네트워크가 통과했습니다 /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
이를 제거하는 방법을 가르쳐야 하는데 이는 어려울 수 있습니다. 또는 실제 구성이 실제로 다른 곳에 있도록 시스템을 변경하여 오래된 습관으로 인해 문제가 발생하지 않도록 할 수도 있습니다.