DHCP - 윈디하나의 솔라나라
|
DHCP Discover
: 클라이언트가 DHCP서버를 찾기위해 브로드캐스트 패킷을 전송DHCP Offer
: DHCP서버는 클라이언트가 전송한 DHCP Discover 패킷을 받고 자신의 IP 풀에서 여유있는 IP를 제안해줌. (단 전달할 IP가 이미 사용중인지 확인하기 위해 ICMP Echo 응답이 있는지 확인해봄)DHCP Request
: 클라이언트는 DHCP서버들로부터 받은 IP중 하나를 선택해 호스트에 설정하고, DHCP 서버에 IP를 할당하였다고 전달
DHCP Ack
: DHCP서버는 클라이언트가 전송한 DHCP Request 패킷을 받아 IP를 승인해줌. 클라이언트는 Lease Time에 지정된 시간동안 할당 받은 IP를 사용할 수 있다.할당 이후에는 DHCP Lease Renewal 을 위한 패킷이 오고간다. 할당한 IP에 대한 유효기간이 지난 후, 클라이언트는 DHCP서버에 다시 재할당 요청한다. DHCP Request와 동일한 패킷이다. DHCP서버는 리스 연장 승인후 DHCP Ack를 전달해준다.
IP가 더이상 필요 없다면 클라이언트는 DHCP에 IP를 반환한다. 이때 클라이언트로부터 서버로 전달되는 패킷이 DHCP Release 패킷이다. 유효기간이 지나지 않아도 다른 서버에서 이 IP를 사용하도록 할 수 있다.
169.254.0.0/16
대역은, 사설 영역만으로 구성되며 라우팅을 지원하지 않는 대역이다. (따라서 로컬에 물린 호스트간 통신은 가능하나, 외부 영역으로 통신은 불가능)Zero Configuration Networking
이라고 부르며, 이런 기능은 RFC 3927 - Dynamic Configuration of IPv4 Link-Local Addresses에 정의되어있다.Netmask
)와 resolv.conf
는 정확히 설정되어있어야 한다.
$TZ /etc/hosts /etc/resolv.conf /etc/netmasks /etc/nsswitch.conf
root@wl ~ # dhcpconfig -D -r SUNWfiles -p /var/dhcp 1) DHCP 구성 파일을 생성했습니다. dhcptab이 생성되었습니다. "로켈" 매크로를 dhcptab에 추가했습니다. 서버 매크로를 dhcptab에 추가했습니다. - wl. DHCP 서버가 실행되었습니다. root@wl ~ # cat /etc/inet/dhcpsvc.conf DAEMON_ENABLED=TRUE RESOURCE=SUNWfiles RUN_MODE=server PATH=/var/dhcp CONVER=1 root@wl ~ # dhtadm -P 이름 유형 값 ================================================== wl 매크로 :Include=Locale:Timeserv=192.168.0.100:LeaseTim=86400:LeaseNeg: Locale 매크로 :UTCoffst=32400: root@wl ~ # dhcpconfig -N 192.168.0.0 -t 192.168.0.1 2) 네트워크 매크로를 dhcptab에 추가했습니다. - 192.168.0.0. 네트워크 테이블을 생성했습니다. root@wl ~ # pntadm -L 192.168.0.0 root@wl ~ # pntadm -P 192.168.0.0 클라이언트 ID 플래그 클라이언트 IP 서버 IP 리스 만료일 매크로 주석 root@wl ~ # pntadm -r SUNWfiles -p /var/dhcp -A 192.168.0.90 192.168.0.0 3) root@wl ~ # for i in {91..99}; do pntadm -r SUNWfiles -p /var/dhcp -A 192.168.0.$i 192.168.0.0 done 3) root@wl ~ # pntadm -P 192.168.0.0 클라이언트 ID 플래그 클라이언트 IP 서버 IP 리스 만료일 매크로 주석 00 00 192.168.0.99 192.168.0.100 영 UNKNOWN 00 00 192.168.0.98 192.168.0.100 영 UNKNOWN 00 00 192.168.0.97 192.168.0.100 영 UNKNOWN 00 00 192.168.0.96 192.168.0.100 영 UNKNOWN 00 00 192.168.0.95 192.168.0.100 영 UNKNOWN 00 00 192.168.0.94 192.168.0.100 영 UNKNOWN 00 00 192.168.0.93 192.168.0.100 영 UNKNOWN 00 00 192.168.0.92 192.168.0.100 영 UNKNOWN 00 00 192.168.0.91 192.168.0.100 영 UNKNOWN 00 00 192.168.0.90 192.168.0.100 영 UNKNOWN root@wl ~ # dhtadm -P 이름 유형 값 ================================================== 192.168.0.0 매크로 :Subnet=255.255.255.0:Router=192.168.0.1:Broadcst=192.168.0.255: wl 매크로 :Include=Locale:Timeserv=192.168.0.100:LeaseTim=86400:LeaseNeg: Locale 매크로 :UTCoffst=32400: root@wl ~ # dhcpconfig -S -r 4) DHCP 서버가 종료되었습니다. DHCP 서버가 시작되었습니다. root@wl ~ #1)
-r
은 데이터 자원 형식을 지정하는 옵션으로, SUNWfiles, SUNWbinfiles, SUNWnisplus 가 있다. 이중 SUNWfiles 는 소규모 DHCP 서비스를 운용할 할때 사용한다. (소규모라고는 하지만 최대 10,000개의 클라이언트까지 서비스 가능하며, 보통 수백~천개 정도의 클라이언트까지 문제 없이 서비스 가능하다) 이 이상 필요한 경우 10만개 까지 수용 가능한 SUNWbinfiles 를 사용한다.
데이터 자원 형식은
dhcpconfig -C
를 사용해 운영중에 변경할 수 있다. -p
는 SUNWfiles, SUNWbinfiles 형식을 사용할 때 필요한 자원 파일을 저장할 디렉토리를 지정한다.-N
은 192.168.0.0 네트워크를 DHCP로 설정하고, -t
는 192.168.0.1
을 라우터 주소로 설정한다는 의미다.root@wl ~ # /usr/lib/inet/in.dhcpd -i rtls0 -d -v 4e389a05: Daemon Version: 3.5 4e389a05: Maximum relay hops: 4 4e389a05: Run mode is: DHCP Server Mode. 4e389a05: Datastore resource: SUNWfiles 4e389a05: Location: /var/dhcp 4e389a05: DHCP offer TTL: 10 4e389a05: ICMP validation timeout: 1000 milliseconds, Attempts: 1. 4e389a05: Maximum concurrent clients: 2048 4e389a05: Maximum threads: 512 4e389a05: Read 3 entries from DHCP macro database on Wed Aug 3 09:44:53 2011 4e389a05: Monitor (0003/rtls0) started... 4e389a05: Thread Id: 0003 - Monitoring Interface: rtls0 ***** 4e389a05: MTU: 1500 Type: SOCKET 4e389a05: Broadcast: 192.168.0.255 4e389a05: Netmask: 255.255.255.0 4e389a05: Address: 192.168.0.100 4e389a1a: Datagram received on network device: rtls0(limited broadcast) 4e389a1a: Reserved offer: 192.168.0.2 4e389a1a: Purging offer: 192.168.0.2 4e389a1a: Reserved offer: 192.168.0.99 4e389a1b: Unicasting datagram to 192.168.0.99 address. 4e389a1b: Adding ARP entry: 192.168.0.99 == 001CC0A3BC38 4e389a1b: Updated offer: 192.168.0.99 4e389a1e: Datagram received on network device: rtls0(limited broadcast) 4e389a1e: Unicasting datagram to 192.168.0.99 address. 4e389a1e: Adding ARP entry: 192.168.0.99 == 001CC0A3BC38 4e389a1e: Updated offer: 192.168.0.99 4e389a25: Datagram received on network device: rtls0(limited broadcast) 4e389a25: Unicasting datagram to 192.168.0.99 address. 4e389a25: Adding ARP entry: 192.168.0.99 == 001CC0A3BC38 4e389a25: Updated offer: 192.168.0.99 4e389a25: Datagram received on network device: rtls0(limited broadcast) 4e389a25: Updated offer: 192.168.0.99 4e389a25: Client: 01001CC0A3BC38 maps to IP: 192.168.0.99 4e389a25: Unicasting datagram to 192.168.0.99 address. 4e389a25: Adding ARP entry: 192.168.0.99 == 001CC0A3BC38 ^C 4e389a36: Signal: INT received...Exiting 4e389a36: Freeing offer: 192.168.0.99 4e389a36: Closing interface: rtls0 4e389a36: Monitor (0003/rtls0): exiting. 4e389a36: Interface statistics for: rtls0 ************** 4e389a36: Pending DHCP offers: 0 4e389a36: Total Packets Transmitted: 4 4e389a36: Total Packets Received: 4 4e389a36: Total Packet Duplicates: 0 4e389a36: Total Packets Dropped: 0 4e389a36: Total Packets Processed: 4 4e389a36: Total Protocol Errors: 0 4e389a36: Daemon terminated.IP가 리스되었다면 아래와 같이 확인해볼 수 있다. [클라이언트 ID]가 바로 IP를 받은 NIC의 MAC 주소이다.
root@wl ~ # pntadm -P 192.168.0.0 클라이언트 ID 플래그 클라이언트 IP 서버 IP 리스 만료일 매크로 주석 01001CC0A3BC38 00 192.168.0.99 192.168.0.100 08/03/2011 UNKNOWN 00 00 192.168.0.98 192.168.0.100 영 UNKNOWN ...
root@wl ~ # svcadm enable dhcp-server 또는 root@wl ~ # dhcpconfig -S -e정지
root@wl ~ # svcadm disable dhcp-server 또는 root@wl ~ # dhcpconfig -S -d
root@wl ~ # pntadm -M 192.168.0.90 -i 01001CC0A3BC38 192.168.0.0 root@wl ~ # pntadm -P 192.168.0.0 클라이언트 ID 플래그 클라이언트 IP 서버 IP 리스 만료일 매크로 주석 01001CC0A3BC38 00 192.168.0.90 192.168.0.100 영 UNKNOWN 00 00 192.168.0.99 192.168.0.100 영 UNKNOWN 00 00 192.168.0.98 192.168.0.100 영 UNKNOWN
root@wl ~ # pntadm -D 192.168.0.99 192.168.0.0
root@wl ~ # dhcpconfig -X dhcp_data -a ALL -m ALL -o ALL 옵션을 내보내는 중... 매크로를 내보내는 중... 네트워크 192.168.0.0을(를) 내보내는 중...아래와 같이 임포트 할 수 있다.
root@wl ~ # dhcpconfig -I dhcp_data 옵션을 가져오는 중... 매크로를 가져오는 중... dhcpconfig: 매크로를 가져오는 중에 다음 오류가 발생했습니다: dhcpconfig: 매크로 wl - wl은(는) 이미 존재합니다. dhcpconfig: 매크로 Locale - Locale은(는) 이미 존재합니다. 네트워크 192.168.0.0을(를) 가져오는 중... 가져오기 완료서버가 다르다면 임포트 후 [pntadm -M], [dhtadm -M] 명령등을 사용해 매크로와 설정을 수정해야 한다.
root@wl ~ # dhcpconfig -Ufhx DHCP 서버 종료. 서버 매크로를 dhcptab에서 삭제했습니다. 192.168.0.0 네트워크용 테이블을 삭제했습니다. dhcptab을 삭제했습니다. DHCP 구성 파일을 삭제했습니다. root@wl ~ #
/usr/sadm/admin/bin/dhcpmgr
을 실행하면 좀 더 쉽게 상태를 확인하고 구성할 수 있다. 커맨드를 이해했다면 쉽게 사용할 수 있을 것이다. GUI환경을 사용할 수 있다면 DHCP 관리자를 사용해 DHCP를 설정할 것을 권장한다.
패키지 설치 (솔라리스 11)
windy@wl ~ $ sudo pkg install pkg:/service/network/dhcp/isc-dhcp
소스설치
windy@wl ~/src $ wget https://downloads.isc.org/isc/dhcp/4.1-ESV-R15-P1/dhcp-4.1-ESV-R15-P1.tar.gz windy@wl ~/src $ tar xvfz dhcp-4.1-ESV-R15-P1.tar.gz windy@wl ~/src $ cd dhcp-4.1-ESV-R15-P1 windy@wl ~/src/dhcp-4.1-ESV-R15-P1 $ ./configure CC=gcc CFLAGS="-m64" LDFLAGS="-m64" windy@wl ~/src/dhcp-4.1-ESV-R15-P1 $ make windy@wl ~/src/dhcp-4.1-ESV-R15-P1 $ sudo make install
windy@wl ~ $ sudo vi /usr/local/etc/dhcpd.conf subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.90 192.168.0.100; }
windy@wl ~ $ sudo vi /usr/local/etc/dhcpd.conf subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.90 192.168.0.100; option routers 192.168.0.1; option domain-name-servers 8.8.8.8; }이정도만 되어도 설정은 완료되었다.
windy@wl ~ $ sudo vi /usr/local/etc/dhcpd.conf subnet 192.168.0.0 netmask 255.255.255.0 { range 192.168.0.90 192.168.0.100; #option broadcast-address 192.168.0.255; option routers 192.168.0.1; option domain-name-servers 8.8.8.8; option domain-name "internal.example.org"; default-lease-time 600; max-lease-time 7200; }
특정 호스트에 IP 고정
00:00:00:12:34:56
MAC 주소를 가진 호스트에, 192.168.0.90 을 할당하는 예제다.
windy@wl ~ $ sudo vi /usr/local/etc/dhcpd.conf ... host fantasia { hardware ethernet 00:00:00:12:34:56; fixed-address 192.168.0.90; }
PXE 부팅
// TODO PXE를 사용한 부팅을 지원하도록 DHCP 를 설정할 수 있다. 아래는 192.168.0.2 에 TFP 서버가 실행되어있고, "pxelinux.0"이라는 Linux PXE 부트 이미지를 제공해주는 경우다.windy@wl ~ $ sudo vi /usr/local/etc/dhcpd.conf ... subnet ... { option bootfile-name "pxelinux.0" next-server "192.168.0.2"; }PXE를 사용해 부팅 하려면 next-server 로 지정된 IP 에 TFTP 서버가 실행되어있어야 하고, TFTP 서버에 bootfile 으로 지정된 파일이 있어야 한다. 솔라리스의 네트워크 인스톨 방법은 윈디하나의 솔라나라: 솔라리스 네트워크 설치을 참조하자. 리눅스(우분투)의 네트워크 인스톨 방법은 관련 문서를 참조하자.
패키지 설치시(솔라리스 11)
windy@wl ~ $ sudo svcadm enable svc:/network/dhcp/server:ipv4 windy@wl ~ $ sudo svcadm enable svc:/network/dhcp/relay:ipv4 # IPv6 지원시 아래의 서비스도 실행하자. windy@wl ~ $ sudo svcadm enable svc:/network/dhcp/server:ipv6 windy@wl ~ $ sudo svcadm enable svc:/network/dhcp/relay:ipv6
소스 설치시
// TODO
root@wl ~ # cat /etc/default/dhcpagent특별한 일이 없는 한, dhcpagent(1m) 설정을 변경할 필요는 없다.
root@wl ~ # ifconfig e1000g0 dhcp start 또는 root@wl ~ # rm /etc/hostname.e1000g0 root@wl ~ # touch /etc/dhcp.e1000g0 root@wl ~ # rebootDHCP 할당 상태보기
root@wl ~ # ifconfig e1000g0 dhcp status Interface State Sent Recv Declined Flags e1000g0 BOUND 1 1 0 (Began, Expires, Renew) = (08/03/2011 11:04, 08/03/2011 12:04, 08/03/2011 11:33)
RSS ATOM XHTML 5 CSS3 |
Copyright © 2004-2024 Jo HoSeok. All rights reserved. |