【16日目】TCP/IPネットワーク入門(第6章DHCP編,ちょこっとまとめ)

皆さん,こんにちは.bb_lotusです. さて,今回はTCP/IPネットワークに関しての16日目のアウトプットになります.

すぐアウトプットだけ見たい人はこちらから

(ネットワーク初学者のため,記載内容等間違いがありましたらどしどしコメント,指摘等していただければと思います.)

使用する教材はこちらです.

 

Linuxで動かしながら学ぶTCP/IPネットワーク入門」

 

Linuxで動かしながら学ぶTCP/IPネットワーク入門 | もみじあめ |本 | 通販 | Amazon

www.amazon.co.jp

 

--------------↓ここからアウトプット--------------

さて,今回は第6章のDHCPになります.

DHCPは,家庭やオフィスのネットワークでほとんど必ずと言っていいほど使われているみたいです.

DHCPはDynamic Host Configuration Protocolの略.

 

前回までで見てきたように,コンピュータがTCP/IPで通信できるようにするには,少なくとも以下の操作をする必要があります.

 

・ネットワークインターフェイスIPアドレスを付与する

・デフォルトルートのルーティングエントリをルーティングテーブルに追加する

・名前解決に利用するネームサーバを指定する

 

しかし,これらの作業をTCP/IPに詳しくない人が手動で設定すると以下のようなミスが起きてしまいます.

 

・誤って他のコンピュータが使っているIPアドレスを使ってしまう

・誤ってネットワークアドレスが異なるIPアドレスを使ってします

・誤ったIPアドレスをデフォルトルートやネームサーバとして使ってしまう.

 

→これらを自動的に設定してくれるのがDHCP!!

DHCP | 賢者の印刷用語集

www.well-corp.jp

 

また,DHCPはサーバ・クライアント方式のプロトコル

ネットワークの設定を配布するコンピュータがDHCPサーバ,設定を受け取るコンピュータをDHCPクライアントという.

 

なお,家庭やオフィスなどの一般的なネットワークでは,デフォルトルートになるルータがDHCPサーバを兼任することが多い.

DHCPサーバには,予め配布するIPアドレスの範囲や,デフォルトルートの情報を指定し,DHCPクライアントは,それらの情報をDHCPサーバから受け取ってネットワークに関する設定作業を実施する.

 

 

それでは,片方がDHCPクライアントとして,もう片方がDHCPサーバとして動作するネットワークを組んでいきます.

ネットワークの構成図は以下の通りです.

 

 

 

 

 

さてそれでは,ネットワークを組んでいきます.

ただ一つ注意点としては,今回は,IPアドレスを手動で設定するのはserverのインターフェイスだけということです.なぜなら,clientのインターフェイスにはDHCPで自動設定するためです.

 

~[復習]ネットワークを組む手順~

その1. Network Namespaceの作成

その2. ネットワークインターフェースを作成し,つなげる.

その3. 2をNetwork Namespaceで使えるようにする.

その4. お互いが通信できるようにインターフェースにIPアドレスを付与する.

その5. ネットワークインターフェースを有効にする.

その6. pingで疎通確認.

 

その1. Network Namespaceの作成

$ sudo ip netns add server
$ sudo ip netns add client

 

その2. ネットワークインターフェースを作成し,つなげる.

$ sudo ip link add s-veth0 type veth peer name c-veth0

 

その3. 2をNetwork Namespaceで使えるようにする.

$ sudo ip link set s-veth0 netns server
$ sudo ip link set c-veth0 netns client

 

その4. お互いが通信できるようにインターフェースにIPアドレスを付与する.

※今回はサーバ側のみ

$ sudo ip netns exec server ip address add 192.0.2.254/24 dev s-veth0

 

その5. ネットワークインターフェースを有効にする.

$ sudo ip netns exec server ip link set s-veth0 up
$ sudo ip netns exec client ip link set c-veth0 up

 

では次にserverでdnsmasqコマンドを実行し,DHCPサーバを起動します.

$ sudo ip netns exec server dnsmasq --dhcp-range=192.0.2.100,192.0.2.200,255.255.255.0 --interface=s-veth0 --port 0 --no-resolv --no-daemon

 

DHCPサーバの準備ができたので,別のターミナルを開いてDHCPクライアントを実行します.この時,dhclientコマンドを実行します.

$ sudo ip netns exec client dhclient -d c-veth0
Internet Systems Consortium DHCP Client 4.4.1
Copyright 2004-2018 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/c-veth0/2e:62:56:af:fb:b7
Sending on   LPF/c-veth0/2e:62:56:af:fb:b7
Sending on   Socket/fallback
DHCPDISCOVER on c-veth0 to 255.255.255.255 port 67 interval 3 (xid=0xd42d0925)
DHCPDISCOVER on c-veth0 to 255.255.255.255 port 67 interval 5 (xid=0xd42d0925)
DHCPOFFER of 192.0.2.138 from 192.0.2.254
DHCPREQUEST for 192.0.2.138 on c-veth0 to 255.255.255.255 port 67 (xid=0x25092dd4)
DHCPACK of 192.0.2.138 from 192.0.2.254 (xid=0xd42d0925)
bound to 192.0.2.138 -- renewal in 1703 seconds.

実行してしばらくすると,先ほどdnsmasqコマンドで指定した範囲内のIPアドレスが実行結果の末尾に表示されています.これがDHCPサーバから配布されたIPアドレスということになります.

 

ここで,vethインターフェイスIPアドレスを確認してみると,先ほど確認したIPアドレスが付与されているのがわかります.

$ sudo ip netns exec client ip address show | grep "inet"
    inet 192.0.2.138/24 brd 192.0.2.255 scope global dynamic c-veth0
    inet6 fe80::2c62:56ff:feaf:fbb7/64 scope link 

 

次にルーティングテーブルも確認してみましょう.

デフォルトルートが設定されており,デフォルトルートのネクストホップとなるIPアドレスは,serverのvethインターフェイスに付与しているものになっています.

$ sudo ip netns exec client ip route show
default via 192.0.2.254 dev c-veth0 
192.0.2.0/24 dev c-veth0 proto kernel scope link src 192.0.2.138 

 

これでDHCPを体験することができました!!

DHCPIPアドレスやルーティングテーブルだけでなく,名前解決に使うDNSのネームサーバや時刻同期に使うNTPサーバも設定できる!!

 

第6章ちょこっとまとめ

・HTTP

TCPの80番ポートを使ってやりとりされるテキストベースのプロトコル

DNS

UDPの53番ポートを使ってやりとりされるバイナリベースのプロトコル

DHCP

UDPの67番ポートを使ってやりとりされるバイナリベースのプロトコル

 

今回はここまで!!

ではまた次回!!