JavaScript is required to for searching.
탐색 링크 건너뛰기
인쇄 보기 종료
Oracle Solaris 관리: IP 서비스     Oracle Solaris 10 1/13 Information Library (한국어)
search filter icon
search icon

문서 정보

머리말

제1부시스템 관리 소개: IP 서비스

1.  Oracle Solaris TCP/IP 프로토콜 제품군(개요)

제2부TCP/IP 관리

2.  TCP/IP 네트워크 계획(작업)

3.  IPv6 소개(개요)

4.  IPv6 네트워크 계획(작업)

5.  TCP/IP 네트워크 서비스 구성 및 IPv4 주소 지정(작업)

6.  네트워크 인터페이스 관리(작업)

7.  IPv6 네트워크 구성(작업)

8.  TCP/IP 네트워크 관리(작업)

9.  네트워크 문제 해결(작업)

10.  TCP/IP 및 IPv4에 대한 자세한 정보(참조)

11.  IPv6 세부 개요(참조)

제3부DHCP

12.  DHCP 정보(개요)

13.  DHCP 서비스 계획(작업)

14.  DHCP 서비스 구성(작업)

15.  DHCP 관리(작업)

16.  DHCP 클라이언트 구성 및 관리

17.  DHCP 문제 해결(참조)

18.  DHCP 명령 및 파일(참조)

DHCP 명령

스크립트에서 DHCP 명령 실행

DHCP 서비스에서 사용된 파일

DHCP 옵션 정보

사이트가 영향을 받는지 여부 결정

dhcptagsinittab 파일의 차이점

dhcptags 항목을 inittab 항목으로 변환

제4부IP 보안

19.  IP 보안 아키텍처(개요)

20.  IPsec 구성(작업)

21.  IP 보안 아키텍처(참조)

22.  Internet Key Exchange(개요)

23.  IKE 구성(작업)

24.  Internet Key Exchange(참조)

25.  Oracle Solaris의 IP 필터(개요)

26.  IP 필터(작업)

제5부IPMP

27.  IPMP 소개(개요)

28.  IPMP 관리(작업)

제6부IPQoS(IP Quality of Service)

29.  IPQoS 소개(개요)

30.  IPQoS 사용 네트워크 계획(작업)

31.  IPQoS 구성 파일 만들기(작업)

32.  IPQoS 시작 및 유지 관리(작업)

33.  플로우 계산 및 통계 수집 사용(작업)

34.  IPQoS 세부 정보(참조)

용어집

색인

DHCP 명령

다음 표는 네트워크에서 DHCP를 관리하는 데 사용할 수 있는 명령을 나열합니다.

표 18-1 DHCP에 사용된 명령

명령
설명
/usr/lib/inet/dhcpd
ISC DHCP 전용: ISC DHCP 서버 데몬입니다. 자세한 내용은 dhcpd(8) 매뉴얼 페이지를 참조하십시오.
/usr/lib/inet/dhcrelay
ISC DHCP 전용: DHCP 서버가 없는 네트워크의 클라이언트에서 다른 네트워크의 서버로 DHCP 및 BOOTP 요청을 중계하기 위한 수단입니다. 자세한 내용은 dhcrelay(8) 매뉴얼 페이지를 참조하십시오.
/usr/lib/inet/in.dhcpd
DHCP 서버 데몬입니다. 시스템을 시작할 때 데몬이 시작됩니다. 서버 데몬을 직접 시작하면 안됩니다. DHCP 관리자, svcadm 명령 또는 dhcpconfig를 사용하여 데몬을 시작 및 중지합니다. 문제 해결을 위해 디버그 모드로 서버를 실행하는 경우에만 데몬을 직접 호출해야 합니다. 자세한 내용은 in.dhcpd(1M) 매뉴얼 페이지를 참조하십시오.
/usr/sadm/admin/bin/dhcpmgr
DHCP 서비스 구성 및 관리에 사용되는 GUI(그래픽 사용자 인터페이스) 도구인 DHCP 관리자입니다. DHCP 관리자는 권장되는 DHCP 관리 도구입니다. 자세한 내용은 dhcpmgr(1M) 매뉴얼 페이지를 참조하십시오.
/usr/sbin/dhcpagent
DHCP 프로토콜의 클라이언트측을 구현하는 DHCP 클라이언트 데몬입니다. 자세한 내용은 dhcpagent(1M) 매뉴얼 페이지를 참조하십시오.
/usr/sbin/dhcpconfig
DHCP 서버 및 BOOTP 중계 에이전트를 구성/구성 해제하는 데 사용됩니다. 또한 다른 데이터 저장소 형식으로 변환하고 DHCP 구성 데이터를 가져오고 내보내는 데 사용됩니다. 자세한 내용은 dhcpconfig(1M) 매뉴얼 페이지를 참조하십시오.
/usr/sbin/dhcpinfo
Oracle Solaris 클라이언트 시스템의 시스템 시작 스크립트가 DHCP 클라이언트 데몬 dhcpagent에서 호스트 이름 등의 정보를 얻는 데 사용됩니다. 스크립트 또는 명령줄에서 dhcpinfo를 사용하여 지정된 매개변수 값을 얻을 수도 있습니다. 자세한 내용은 dhcpinfo(1) 매뉴얼 페이지를 참조하십시오.
/usr/sbin/dhtadm
dhcptab 테이블의 옵션 및 매크로를 변경하는 데 사용됩니다. 이 명령은 DHCP 정보 변경을 자동화하기 위해 만드는 스크립트에 가장 유용합니다. dhcptab 테이블에서 특정 옵션 값을 검색하는 가장 빠른 방법은 dhtadm-P 옵션과 함께 사용하고 grep 명령을 통해 출력 결과를 파이프로 연결하는 것입니다. 자세한 내용은 dhtadm(1M) 매뉴얼 페이지를 참조하십시오.
/usr/sbin/ifconfig
시스템 부트 시 네트워크 인터페이스에 IP 주소를 지정하거나, 네트워크 인터페이스 매개변수를 구성하거나 이 두 작업 모두를 수행하는 데 사용됩니다. DHCP 클라이언트에서 ifconfig가 DHCP를 시작하여 네트워크 인터페이스를 구성하는 데 필요한 매개변수(IP 주소 포함)를 얻습니다. 자세한 내용은 ifconfig(1M) 매뉴얼 페이지를 참조하십시오.
/usr/sbin/omshell
ISC DHCP 전용: OMAPI(Object Management API)를 사용하여 ISC DHCP 서버의 상태를 질의하고 변경하는 방법을 제공합니다. 자세한 내용은 omshell(1) 매뉴얼 페이지를 참조하십시오.
/usr/sbin/pntadm
클라이언트 ID를 IP 주소에 매핑하는 DHCP 네트워크 테이블을 변경하고, 선택적으로 구성 정보를 IP 주소와 연관시키는 데 사용됩니다. 자세한 내용은 pntadm(1M) 매뉴얼 페이지를 참조하십시오.
/usr/sbin/snoop
네트워크에서 전달되는 패킷의 내용을 캡처하고 표시하는 데 사용됩니다. snoop는 DHCP 서비스 관련 문제를 해결하는 데 유용합니다. 자세한 내용은 snoop(1M) 매뉴얼 페이지를 참조하십시오.

스크립트에서 DHCP 명령 실행

dhcpconfig, dhtadm pntadm 명령은 스크립트에서 사용하도록 최적화되어 있습니다. 특히 pntadm 명령은 DHCP 네트워크 테이블에 많은 수의 IP 주소 항목을 만드는 데 유용합니다. 다음 스크립트 예에서는 일괄 처리 모드로 pntadm을 사용하여 IP 주소를 만듭니다.

예 18-1 pntadm 명령이 포함된 addclient.ksh 스크립트

#! /usr/bin/ksh
#
# This script utilizes the pntadm batch facility to add client entries
# to a DHCP network table. It assumes that the user has the rights to
# run pntadm to add entries to DHCP network tables.

#
# Based on the switch setting, query the netmasks table for a netmask.
# Accepts one argument, a dotted IP address.
#
get_netmask()
{
    MTMP=`getent netmasks ${1} | awk '{ print $2 }'`
    if [ ! -z "${MTMP}" ]
    then
        print - ${MTMP}
    fi
}

#
# Based on the network specification, determine whether or not network is 
# subnetted or supernetted.
# Given a dotted IP network number, convert it to the default class
# network.(used to detect subnetting). Requires one argument, the
# network number. (e.g. 10.0.0.0) Echos the default network and default
# mask for success, null if error.
#
get_default_class()
{
    NN01=${1%%.*}
    tmp=${1#*.}
    NN02=${tmp%%.*}
    tmp=${tmp#*.}
    NN03=${tmp%%.*}
    tmp=${tmp#*.}
    NN04=${tmp%%.*}
    RETNET=""
    RETMASK=""

    typeset -i16 ONE=10#${1%%.*}
    typeset -i10 X=$((${ONE}&16#f0))
    if [ ${X} -eq 224 ]
    then
        # Multicast
        typeset -i10 TMP=$((${ONE}&16#f0))
        RETNET="${TMP}.0.0.0"
        RETMASK="240.0.0.0"
    fi
    typeset -i10 X=$((${ONE}&16#80))
    if [ -z "${RETNET}" -a ${X} -eq 0 ]
    then
        # Class A
        RETNET="${NN01}.0.0.0"
        RETMASK="255.0.0.0"
    fi
    typeset -i10 X=$((${ONE}&16#c0))
    if [ -z "${RETNET}" -a ${X} -eq 128 ]
    then
        # Class B
        RETNET="${NN01}.${NN02}.0.0"
        RETMASK="255.255.0.0"
    fi
    typeset -i10 X=$((${ONE}&16#e0))
    if [ -z "${RETNET}" -a ${X} -eq 192 ]
    then
        # Class C
        RETNET="${NN01}.${NN02}.${NN03}.0"
        RETMASK="255.255.255.0"
    fi
    print - ${RETNET} ${RETMASK}
    unset NNO1 NNO2 NNO3 NNO4 RETNET RETMASK X ONE
}

#
# Given a dotted form of an IP address, convert it to its hex equivalent.
#
convert_dotted_to_hex()
{
    typeset -i10 one=${1%%.*}
    typeset -i16 one=${one}
    typeset -Z2 one=${one}
    tmp=${1#*.}

    typeset -i10 two=${tmp%%.*}
    typeset -i16 two=${two}
    typeset -Z2 two=${two}
    tmp=${tmp#*.}

    typeset -i10 three=${tmp%%.*}
    typeset -i16 three=${three}
    typeset -Z2 three=${three}
    tmp=${tmp#*.}

    typeset -i10 four=${tmp%%.*}
    typeset -i16 four=${four}
    typeset -Z2 four=${four}

     hex=`print - ${one}${two}${three}${four} | sed -e 's/#/0/g'`
     print - 16#${hex}
     unset one two three four tmp
}

#
# Generate an IP address given the network address, mask, increment.
# 
get_addr()
{
    typeset -i16 net=`convert_dotted_to_hex ${1}`
    typeset -i16 mask=`convert_dotted_to_hex ${2}`
    typeset -i16 incr=10#${3}

    # Maximum legal value - invert the mask, add to net.
    typeset -i16 mhosts=~${mask}
    typeset -i16 maxnet=${net}+${mhosts}

    # Add the incr value.
    let net=${net}+${incr}

    if [ $((${net} < ${maxnet})) -eq 1 ]
    then
        typeset -i16 a=${net}\&16#ff000000
        typeset -i10 a="${a}>>24"

        typeset -i16 b=${net}\&16#ff0000
        typeset -i10 b="${b}>>16"

        typeset -i16 c=${net}\&16#ff00
        typeset -i10 c="${c}>>8"

        typeset -i10 d=${net}\&16#ff
        print - "${a}.${b}.${c}.${d}"
    fi
    unset net mask incr mhosts maxnet a b c d
}

# Given a network address and client address, return the index.
client_index()
{
    typeset -i NNO1=${1%%.*}
    tmp=${1#*.}
    typeset -i NNO2=${tmp%%.*}
    tmp=${tmp#*.}
    typeset -i NNO3=${tmp%%.*}
    tmp=${tmp#*.}
    typeset -i NNO4=${tmp%%.*}

    typeset -i16 NNF1
    let NNF1=${NNO1}
    typeset -i16 NNF2
    let NNF2=${NNO2}
    typeset -i16 NNF3
    let NNF3=${NNO3}
    typeset -i16 NNF4
    let NNF4=${NNO4}
    typeset +i16 NNF1
    typeset +i16 NNF2
    typeset +i16 NNF3
    typeset +i16 NNF4
    NNF1=${NNF1#16\#}
    NNF2=${NNF2#16\#}
    NNF3=${NNF3#16\#}
    NNF4=${NNF4#16\#}
    if [ ${#NNF1} -eq 1 ]
    then
        NNF1="0${NNF1}"
    fi
    if [ ${#NNF2} -eq 1 ]
    then
        NNF2="0${NNF2}"
    fi
    if [ ${#NNF3} -eq 1 ]
    then
        NNF3="0${NNF3}"
    fi
    if [ ${#NNF4} -eq 1 ]
    then
        NNF4="0${NNF4}"
    fi
    typeset -i16 NN
    let NN=16#${NNF1}${NNF2}${NNF3}${NNF4}
    unset NNF1 NNF2 NNF3 NNF4

    typeset -i NNO1=${2%%.*}
    tmp=${2#*.}
    typeset -i NNO2=${tmp%%.*}
    tmp=${tmp#*.}
    typeset -i NNO3=${tmp%%.*}
    tmp=${tmp#*.}
    typeset -i NNO4=${tmp%%.*}
    typeset -i16 NNF1
    let NNF1=${NNO1}
    typeset -i16 NNF2
    let NNF2=${NNO2}
    typeset -i16 NNF3
    let NNF3=${NNO3}
    typeset -i16 NNF4
    let NNF4=${NNO4}
    typeset +i16 NNF1
    typeset +i16 NNF2
    typeset +i16 NNF3
    typeset +i16 NNF4
    NNF1=${NNF1#16\#}
    NNF2=${NNF2#16\#}
    NNF3=${NNF3#16\#}
    NNF4=${NNF4#16\#}
    if [ ${#NNF1} -eq 1 ]
    then
        NNF1="0${NNF1}"
    fi
    if [ ${#NNF2} -eq 1 ]
    then
        NNF2="0${NNF2}"
    fi
    if [ ${#NNF3} -eq 1 ]
    then
        NNF3="0${NNF3}"
    fi
    if [ ${#NNF4} -eq 1 ]
    then
        NNF4="0${NNF4}"
    fi
    typeset -i16 NC
    let NC=16#${NNF1}${NNF2}${NNF3}${NNF4}
    typeset -i10 ANS
    let ANS=${NC}-${NN}
    print - $ANS
}

#
# Check usage.
#
if [ "$#" != 3 ]
then
    print "This script is used to add client entries to a DHCP network"
    print "table by utilizing the pntadm batch facilty.\n"
    print "usage: $0 network start_ip entries\n"
    print "where: network is the IP address of the network"
        print "       start_ip is the starting IP address \n"
        print "       entries is the number of the entries to add\n"
    print "example: $0 10.148.174.0 10.148.174.1 254\n"
    return
fi

#
# Use input arguments to set script variables.
#
NETWORK=$1
START_IP=$2
typeset -i STRTNUM=`client_index ${NETWORK} ${START_IP}`
let ENDNUM=${STRTNUM}+$3
let ENTRYNUM=${STRTNUM}
BATCHFILE=/tmp/batchfile.$$
MACRO=`uname -n`

#
# Check if mask in netmasks table. First try
# for network address as given, in case VLSM
# is in use.
#
NETMASK=`get_netmask ${NETWORK}`
if [ -z "${NETMASK}" ]
then
    get_default_class ${NETWORK} | read DEFNET DEFMASK
    # use the default.
    if [ "${DEFNET}" != "${NETWORK}" ]
    then
        # likely subnetted/supernetted.
        print - "\n\n###\tWarning\t###\n"
        print - "Network ${NETWORK} is netmasked, but no entry was found  \n
              in the 'netmasks' table; please update the 'netmasks'  \n
              table in the appropriate nameservice before continuing. \n
              (See /etc/nsswitch.conf.) \n" >&2
        return 1
    else
        # use the default.
        NETMASK="${DEFMASK}"
    fi
fi

#
# Create a batch file.
#
print -n "Creating batch file "
while [ ${ENTRYNUM} -lt ${ENDNUM} ]
do
    if [ $((${ENTRYNUM}-${STRTNUM}))%50 -eq 0 ]
    then
        print -n "."
    fi

    CLIENTIP=`get_addr ${NETWORK} ${NETMASK} ${ENTRYNUM}`
    print "pntadm -A ${CLIENTIP} -m ${MACRO} ${NETWORK}" >> ${BATCHFILE}
    let ENTRYNUM=${ENTRYNUM}+1
done
print " done.\n"

#
# Run pntadm in batch mode and redirect output to a temporary file.
# Progress can be monitored by using the output file.
#
print "Batch processing output redirected to ${BATCHFILE}"
print "Batch processing started."

pntadm -B ${BATCHFILE} -v > /tmp/batch.out 2 >&1

print "Batch processing completed."