dhclient-script(8)

명칭
dhclient-script - DHCP 클라이언트의 네트워크 설정 스크립트

해설
DHCP 클라이언트의 네트워크 설정 스크립트는, 때 있을 때 마다 dhclient(8) 가 호출합니다. DHCP 클라이언트는, 본스크립트를 사용하는 것으로써, 주소 요구에 앞서는 각 인터페이스의 초기설정과 부여된 주소의 검사와 리스 획득시의 인터페이스의 최종 설정을 실시합니다. 리스가 획득되지 않았던 경우, 정의 끝난 리스가 존재한다면 이것을 검사하기 위해서 본스크립트는 사용되어 유효한 리스가 판명하지 않았던 경우에도 이제(벌써) 1 회 이 스크립트가 불립니다.

본스크립트는, 최종 사용자에 커스터마이즈 되는 것을 의도하고 있지 않습니다. 로컬인 커스터마이즈가 필요한 경우, 이것은 입 (enter)과 출 (exit)이라고 하는 훅을 사용하는 것으로 가능해집니다 (자세한 것은 훅 참조). 이러한 훅은, /etc/resolv.conf 작성시에, 클라이언트의 디폴트 동작을 유저가 오바라이드 할 수 있도록(듯이) 합니다.

특정의 operating system에서는, 클라이언트의 실체는 동작한다고 해도, 표준의 스크립트가 동작하지 않을지도 모릅니다. 선구적인 유저가 신규 스크립트를 작성하거나 기존의 것을 수정하거나 할 필요가 있다 (일)것은 지당한 일입니다. 일반적으로는, 각각의 컴퓨터에 고유의 커스터마이즈는 /etc/dhclient.conf 스크립트로 실시해야 합니다. /etc/dhclient.conf 의 커스터마이즈 없음으로 할 수 없는 커스터마이즈나, 입과 출의 훅의 사용에서는 할 수 없는 커스터마이즈를 눈치챘을 경우에는, 버그 리포트를 보내 주세요.

훅
개시시에, 클라이언트 스크립트는 우선 쉘 함수를 정의합니다. 그 함수는 make_resolv_conf (이어)여, 후에 /etc/resolv.conf 파일을 작성하기 위해서 사용됩니다. 디폴트 동작을 오바라이드 하려면 , 이 함수를 입의 푹스 클립트로 재정의해 주세요.

make_resolv_conf 함수의 정의의 뒤, 클라이언트 스크립트는 실행 가능한 /etc/dhclient-enter-hooks 스크립트의 존재를 검사해, 존재하는 경우에는 Bourne 쉘의 '. '명령을 사용해 본스크립트를 인 라인으로 기동합니다. 조작으로 기술 떠날 수 있어 모든 환경이 본스크립트로 사용 가능하고, 스크립트의 동작의 변경이 필요한 경우에는 환경의 수정이 용서되고 있습니다. 스크립트 실행중에 에러가 발생했을 경우, exit_status 변수를 비 0 치로 설정하는 것이 가능하고, 클라이언트 스크립트 종료 직후에 /sbin/dhclient-script (은)는 그 에러 코드로 종료합니다.

모든 처리의 완료 후에, /sbin/dhclient-script (은)는 실행 가능한 /etc/dhclient-exit-hooks 스크립트의 존재를 검사해, 존재하는 경우에는 '. '명령로 이것을 기동합니다. dhclient-script 의 종료 상태는 dhclient-exit-hooks 의 exit_status 셸 변수에게 건네져 기동된 일에 스크립트가 성공했을 경우에는 값은 항상 0 이 됩니다. dhclient-enter-hooks 의 항으로 전술한 그 외의 환경도 인계됩니다. /etc/dhclient-exit-hooks (은)는 exit_status 에 손봐 dhclient-script 의 반환값을 변경할 수 있습니다.

조작
dhclient 가 클라이언트 설정 스크립트를 기동할 필요가 있을 때, 여러가지 변수를 환경에 정의하고 나서 /sbin/dhclient-script (을)를 기동합니다. 모든 경우에 대해, $reason 에는 스크립트가 기동되는 이유명이 설정됩니다. 다음의 이유가 현재 정의되고 있습니다: MEDIUM, PREINIT, BOUND, RENEW, REBIND, REBOOT, EXPIRE, FAIL, TIMEOUT.

MEDIUM
DHCP 클라이언트는, 인터페이스의 미디어 타입의 설정을 요구하고 있습니다. 인터페이스명은 $interface 로 건네받아 미디어 타입은 $medium 로 건네받습니다.

PREINIT
DHCP 클라이언트는, 실제의 주소를 받기 전에 패킷을 송신하는 목적으로, 요구 대로에 인터페이스가 설정되는 것을 요구하고 있습니다. BSD 의 소켓 프로그램 라이브러리를 사용하는 클라이언트에서는, IP 주소 0.0. 0.0 또한 브로드캐스트 어드레스 255.255. 255.255 로, 인터페이스를 설정하는 것을 의미합니다. 다른 클라이언트에서는, 실제로 IP 주소를 주는 일 없이 단지 인터페이스를 설정하는 것으로 실현되겠지요. 인터페이스명은 $interface 로 건네받아 미디어 타입은 $medium 로 건네받습니다.

IP 앨리어스(alias)가 dhclient.conf 로 선언되고 있는 경우, 이 주소가 $alias_ip_address 로 건네받습니다. 본 IP 주소에의 경로와 함께, 본 IP 주소를 대상 인터페이스로부터 삭제할 필요가 있습니다.

BOUND
DHCP 클라이언트는, 신주소에의 초기의 결합을 완료했습니다. 새로운 IP 주소는 $new_ip_address 로 건네받아 인터페이스명은 $interface 로 건네받습니다. 미디어 타입은 $medium 로 건네받습니다. 서버로부터 획득한 옵션은, dhcp-options 로 선언되고 있다 옵션명으로 건네받습니다. 예외로서 유효한 셸 변수와 하기 위해서 데쉬 ('-')는 언더스코어('_')로 옮겨놓을 수 있어 변수명은 new_ 로 개시합니다. 예를 들면, 새로운 subnet mask는 $new_subnet_mask 로 건네받습니다.

주소를 실제로 설정하기 전에, dhclient-script 는 어떠한 방법으로 그 주소에 대해서 ARP 를 실시해, 대답을 받아들였을 경우에는 비 0 의 값으로 종료해야 합니다. 이 경우 클라이언트는 DHCPDECLINE 메세지를 서버 에 송신해, 다른 주소를 취득합니다. 이 작업은 RENEW, REBIND, REBOOT 상태에서도와 같이 실시합니다만, 반드시 필요하지 않고, 실제 바람직하지 않을 것입니다.

결합이 완료하면(자), 네트워크에 관한 많은 파라미터를 설정할 필요가 있겠지요. $new_domain_name 및 $new_domain_name_servers (이것에는 복수의 서버를 공백에서 단락지어 열거되어 있을지도 모릅니다)(을)를 사용해, 새로운 /etc/resolv.conf 를 작성할 필요가 있습니다. 디폴트 경로는, $new_routers 를 사용해 설정할 필요가 있습니다. 정적 경로는, $new_static_routes 를 사용해 설정할 필요가 있을지도 모릅니다.

IP 앨리어스(alias)가 선언되고 있는 경우, 여기서 설정할 필요가 있습니다. 앨리어스(alias)의 IP 주소는 $alias_ip_address 로서 기술되어 앨리어스(alias)용으로 설정되는 다른 DHCP 옵션 (예를 들면 subnet mask)은 전술과 같이 변수로 건네받습니다만, $new_ 로 개시하는 것이 아니라 $alias_ 로 개시합니다. 앨리어스(alias)의 IP 주소가 결합된 IP 주소 ($new_ip_address)와 같은 경우, 이것을 사용해서는 안 되는 것에 주의해 주세요. 왜냐하면, 이 경우에는 다른 앨리어스(alias)의 파라미터가 올바르지 않을 가능성이 있다 (으)로부터입니다.

RENEW
결합이 갱신되면(자), 스크립트는 BOUND 와 같게 불립니다만, $new_ 로 개시하는 전변수에 가세해 $old 로 개시하는 다른 변수의 조가 있다고 한다 예외가 있습니다. 변경된 가능성이 있는 영속적인 설정은, 삭제할 필요가 있습니다. 예를 들면, 결합된 주소에 대한 로컬 경로가 설정되었을 경우, 낡은 로컬 경로를 삭제할 필요가 있습니다. 디폴트 경로가 변경되었을 경우, 낡은 디폴트 경로를 삭제할 필요가 있습니다. 정적 경로가 변경되었을 경우, 낡은 것을 삭제할 필요가 있습니다. 그 외에 대해서는, BOUND 와 같게 처리 가능합니다.

REBIND
DHCP 클라이언트가, 신규 DHCP 서버에 재결합되었습니다. 이것은 RENEW 와 같게 취급할 수 있습니다만, IP 주소가 바뀌었을 경우에는, ARP 표를 클리어 할 필요가 있습니다.

REBOOT
DHCP 클라이언트는, 리부트 후에 원래의 주소를 재획득하는 것에 성공했습니다. 이것은 BOUND 와 같게 처리 가능합니다.

EXPIRE
DHCP 클라이언트는 리스 갱신과 신규 리스 획득에 실패해, 리스의 기한이 지났습니다. 대상 IP 주소를 해방할 필요가 있어, RENEW 및 REBIND 와 같게, 관련하는 파라미터를 삭제할 필요가 있습니다.

FAIL
DHCP 클라이언트는 DHCP 서버에 접속하지 못하고, 또 검사한 IP 주소에는 유효한 것은 없었습니다. 마지막에 검사한 리스의 파라미터는, 설정 해제할 필요가 있습니다. 이것은, EXPIRE 와 같게 취급할 수 있습니다.

TIMEOUT
DHCP 클라이언트는 어느 DHCP 서버에도 접속할 수 없었습니다. 그렇지만, 낡은 리스가 식별되어 BOUND 와 같게, 이 낡은 리스의 파라미터가 건네받았습니다. 클라이언트의 설정 스크립트는, 이 파라미터를 검사해, 이것이 유효하다라고 믿는 이유가 있다면, 값 0 으로 종료해야 합니다. 그렇지 않다면, 비 0 의 값으로 종료해야 합니다.

리스를 검사하는 통상의 방법은, REBIND 와 같게 네트워크를 설정해 (복수의 리스를 검사하기 위해서 불리는 것이 있기 때문입니다), $routers 로 정의되는 최초의 라우터에 ping 하는 것입니다. 응답을 수신했을 경우, 인터페이스가 현재 접속되고 있는 네트워크에 대해서, 리스가 유효합니다. $new_static_routers 에 가세해 $new_routers 에 열거되고 있는 전라우터에 ping 를 시험하게 되면, 완전성이 더하겠지요. 그러나, 현재의 스크립트는 그렇게 되고 있지 않습니다.

관련 파일
유사한 operating system에 대한 스크립트 파일은 비슷하거나 완전히 같을지도 모릅니다만, 일반적으로는, 각 operating system용으로 각각의 스크립트 파일이 있어야 합니다. Internet Software Consortium 의 DHCP 배포에 포함되는 스크립트 파일은, client/scripts 이하의 배포 트리에 있어, 동작 대상 operating system명이 되어 있습니다.

버그
복수 인터페이스를 사용하는 경우, 서버가 제공하는 설정 파라미터끼리가 충돌하지 않게 하는 명확한 방법은 없습니다. 예를 들면, 표준의 dhclient-script 는 /etc/resolv.conf 를 재차 고쳐 써 버립니다. 즉, 복수의 인터페이스가 설정되어 있는 경우, 어느 서버로부터 제공되는 값에 /etc/resolv.conf 가 초기화된 후에, 다른 서버로부터 제공되는 값에 초기화된다고 하는 동작을 반복합니다. 어느 쪽의 서버로부터 제공되는 정보도 유효한 경우에는, 실제상 문제는 되지 않기는 하지만, 혼란의 토대가 될 수 있습니다.

관련 항목
dhclient.conf(5), dhclient.leases(5), dhclient(8)

저자
dhclient-script(8) (은)는 Ted Lemon 가 Vixie Enterprises 와 협력해 Internet Software Consortium 를 위해서(때문에) 썼습니다. Internet Software Consortium 에 대해보다 자세하게는, http://www.isc.org (을)를 봐 주세요. Vixie Enterprises 에 대해보다 자세하게는, http://www.vix.com (을)를 봐 주세요.