JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris の管理: IP サービス     Oracle Solaris 10 1/13 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

パート I システム管理の概要: IP サービス

1.  Oracle Solaris TCP/IP プロトコル群 (概要)

パート II 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 の詳細 (リファレンス)

パート III DHCP

12.  DHCP について (概要)

13.  DHCP サービスの使用計画 (手順)

14.  DHCP サービスの構成 (手順)

15.  DHCP の管理 (タスク)

16.  DHCP クライアントの構成と管理

17.  DHCP のトラブルシューティング (リファレンス)

18.  DHCP コマンドと DHCP ファイル (リファレンス)

DHCP のコマンド

スクリプトにおける DHCP コマンドの実行

DHCP サービスによって使用されるファイル

DHCP のオプション情報

サイトが影響を受けるかどうかの判別

dhcptags ファイルと inittab ファイルの違い

dhcptags エントリの inittab エントリへの変換

パート IV IP セキュリティー

19.  IP セキュリティーアーキテクチャー (概要)

20.  IPsec の構成 (タスク)

21.  IP セキュリティーアーキテクチャー (リファレンス)

22.  インターネット鍵交換 (概要)

23.  IKE の構成 (タスク)

24.  インターネット鍵交換 (リファレンス)

25.  Oracle Solaris の IP フィルタ (概要)

26.  IP フィルタ (タスク)

パート V IPMP

27.  IPMP の紹介 (概要)

28.  IPMP の管理 (タスク)

パート VI IP サービス品質 (IPQoS)

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 および BOOTP 要求を、DHCP サーバーがないネットワーク上のクライアントから別のネットワーク上のサーバーに中継する手段を有効にします。詳細については、dhcrelay(8) のマニュアルページを参照してください。
/usr/lib/inet/in.dhcpd
DHCP サーバーデーモン。デーモンはシステムの起動時に起動されます。したがって、サーバーデーモンを直接起動すべきではありません。デーモンの起動や停止には、DHCP マネージャー、svcadm コマンド、または dhcpconfig を使用できます。問題をトラブルシュートするためにデーモンをデバッグモードで実行する場合にのみデーモンを直接起動します。詳細については、in.dhcpd(1M) のマニュアルページを参照してください。
/usr/sadm/admin/bin/dhcpmgr
DHCP マネージャー。DHCP サービスの構成や管理に使用するグラフィカルユーザーインタフェース (GUI) ツールです。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 情報を自動的に変更するために作成するスクリプトでもっとも役立ちます。dhtadm-P オプションを指定し、その結果を grep コマンドに渡すと、dhcptab テーブル内の特定のオプション値をすばやく検索できます。詳細については、dhtadm(1M) のマニュアルページを参照してください。
/usr/sbin/ifconfig
IP アドレスをネットワークインタフェースに割り当てたり、ネットワークインタフェースパラメータを構成したりする場合 (あるいはその両方の場合)、システムブート時に使用します。 DHCP クライアントでは、ifconfig によって DHCP が起動し、ネットワークインタフェースの構成に必要なパラメータ (IP アドレスを含む) が取得されます。詳細は、ifconfig(1M) のマニュアルページを参照してください。
/usr/sbin/omshell
ISC DHCP のみ: Object Management API (OMAPI) を使用して ISC DHCP サーバーの状態を照会および変更する手段を提供します。詳細については、omshell(1) のマニュアルページを参照してください。
/usr/sbin/pntadm
DHCP ネットワークテーブルを変更するときに使用され、このテーブルでは、クライアント ID と IP アドレスが対応付けられ、オプションとして構成情報と IP アドレスが関連付けられます。詳細は、pntadm(1M) のマニュアルページを参照してください。
/usr/sbin/snoop
ネットワーク経由で渡されるパケットの内容を取得および表示するときに使用されます。snoop は、DHCP サービスの問題をトラブルシューティングするときに役立ちます。詳細については、snoop(1M) のマニュアルページを参照してください。

スクリプトにおける DHCP コマンドの実行

dhcpconfigdhtadmpntadm コマンドは、スクリプト中での使用に適しています。特に、pntadm コマンドは大量の IP アドレスエントリを DHCP ネットワークテーブルに作成するときに便利です。次のサンプルスクリプトでは、バッチモードで pntadm を使って、IP アドレスを作成しています。

例 18-1 addclient.ksh スクリプトで pntadm コマンドを使用する

#! /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."