로드하기 전에 브리지 인터페이스가 초기화 될 때까지 기다릴 수 있도록 DHCP3 서버를 나중에 시작하려면 어떻게해야합니까?


8

Ubuntu 10.04 서버가 현재 dhcp3-server 및 가상 머신과 함께 사용하기위한 브리지 인터페이스 (br0)로 설정되어 있습니다. 내가 가진 문제는 서버가 재부팅 될 때 브리지 된 인터페이스를 불러 와서 추가 지연으로 인해 dhcp3-server 가로 드되지 않는다는 것입니다.

기본적으로 br0에는 부팅주기가 늦을 때까지 DHCP3-server가로드를 시도한 후 DHCP3-Server와 함께 사용할 IP 주소가 없습니다.

서버가 부팅되면 아무런 문제없이 '/etc/init.d/dhcp3-server start'를 실행할 수 있습니다.

다음 중 하나를 수행 할 수있는 방법이 있습니까?-dhcp3-server가 인터페이스가로드 될 때까지 기다렸다가로드를 시도합니까? -다른 모든 것이로드 된 후 dhcp3-server를 시작 하시겠습니까?

답변:


9

한 가지 해결책은 dhcp-server가 자동으로 시작되지 않도록 지시 한 다음 /etc/network/interfaces브리지 정의를 위해 다음 두 줄을 파일에 추가하는 것입니다.

post-up /etc/init.d/dhcp3-server start
pre-down /etc/init.d/dhcp3-server stop

그래서 이런 식으로 끝날 것입니다

iface br0 inet static
    bridge_ports eth0 eth1
    address 192.168.1.2
    broadcast 192.168.1.255
    netmask 255.255.255.0
    gateway 192.168.1.1
    post-up /etc/init.d/dhcp3-server start
    pre-down /etc/init.d/dhcp3-server stop

이런 식으로 네트워크 관리 (ifup / ifdown, 네트워크 관리자 아님)는 브리지를 가져온 후 DHCP 서버를 시작하고 브리지를 제거하기 전에 종료합니다.


나는 두 가지 답변을 모두 테스트 했으며이 포스트 업 / 프리 다운 솔루션은 훨씬 깨끗하고 업그레이드 친화적입니다. 좋은 제안에 감사드립니다! 이와 같은 간단한 솔루션을 찾기 위해 높고 낮은 것을 검색했습니다
user2009

내 기쁨;) 항상 감사합니다.
LassePoulsen

2

/etc/init.d/dhcp3-server시작 스크립트를 수정하여 에서 IP 주소를 사용할 수있을 때까지 기다릴 수 있습니다 br0. 예 : (경고 : 테스트되지 않은 코드!)

# wait 5 secs between br0-ready tests
wait_time_between_probes=5
# maximum number of attempts (i.e., timeout)
max_attempts=10

log_progress_msg "Waiting for br0 to get an IP address"
for n in $(seq 1 $max_attempts); do
  if /sbin/ifconfig br0 | egrep -q "inet addr:" ; then
    # IP address ready on br0, exit loop
    break
  else
    sleep $wait_time_between_probes
  fi
done
if [ "$n" = "$max_attempts" ]; then
    log_warning_msg "Maximum number of attempts reached, but br0 has no IP address yet" 
    log_warning_msg "Continuing anyway but DHCP3 server might not start correctly"
fi 

스 니펫은 case ... start)DHCP3 데몬을 시작하기 전에 파트 내에서 시작 스크립트로 이동해야합니다 . 물론 대기 시간과 사용자 환경과 일치하는 시도 횟수를 조정해야합니다 (br0이 IP 주소를 가져 오는 데 시간이 얼마나 걸립니까?)


이것은 확실히 올바른 길에 있습니다. "/etc/init.d/dhcp3-server"에서 "start"case "$ 1" ""바로 뒤에 이것을 배치했지만 "/ sbin / ifconfig br0 | fgrep -q"addr : ""조건이없는 경우에도 성공한 것 같습니다. 브리지 인터페이스 온라인. 터미널에 "/ sbin / ifconfig br0 | fgrep -q"addr : ""를 입력하면 출력이 없습니다.
user2009

또한 스크립트 끝에있는 두 개의 'log_warning_msg'는 성공과 실패에 관계없이 표시됩니다. 실패시 이러한 메시지를 올바르게 표시하기 위해 if (max_attempts = n) 스타일 문으로 로그 내부에 더 좋을까요?
user2009

또한 브리지 인터페이스 정상은 인터페이스로드 후 dhcp3-server가 실패 할만큼 오래 걸리는 데 추가 5-10 초가 걸립니다.
user2009

@ user2009 회선 관련 grep -q: 1. 브리지가 작동하자마자 IPv6 주소를 가져 오기 때문에 일치하지 않습니다. IPv4 주소에만 관심이 있다면, 위 의 grep행을 다음과 grep -q 'inet addr:'같이 바꾸십시오 . 그렇지 않으면 브리지의 가능한 모든 최종 IP 주소 와 일치하는보다 복잡한 정규식을 찾아야 합니다. 2.이 -q옵션은 출력을 억제합니다 ( > /dev/null) 처럼
Riccardo Murri

에 대한 의견 주셔서 감사합니다 @ user2009 log_warning_msg; 당신의 제안에 따라 수정했다고 생각합니다
Riccardo Murri
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.