【16日目】TCP/IPネットワーク入門(第6章DHCP編,ちょこっとまとめ)
皆さん,こんにちは.bb_lotusです. さて,今回はTCP/IPネットワークに関しての16日目のアウトプットになります.
すぐアウトプットだけ見たい人はこちらから
(ネットワーク初学者のため,記載内容等間違いがありましたらどしどしコメント,指摘等していただければと思います.)
使用する教材はこちらです.
「Linuxで動かしながら学ぶTCP/IPネットワーク入門」
--------------↓ここからアウトプット--------------
さて,今回は第6章のDHCPになります.
DHCPは,家庭やオフィスのネットワークでほとんど必ずと言っていいほど使われているみたいです.
DHCPはDynamic Host Configuration Protocolの略.
前回までで見てきたように,コンピュータがTCP/IPで通信できるようにするには,少なくとも以下の操作をする必要があります.
・デフォルトルートのルーティングエントリをルーティングテーブルに追加する
・名前解決に利用するネームサーバを指定する
しかし,これらの作業をTCP/IPに詳しくない人が手動で設定すると以下のようなミスが起きてしまいます.
・誤って他のコンピュータが使っているIPアドレスを使ってしまう
・誤ってネットワークアドレスが異なるIPアドレスを使ってします
・誤ったIPアドレスをデフォルトルートやネームサーバとして使ってしまう.
→これらを自動的に設定してくれるのが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を体験することができました!!
※DHCPはIPアドレスやルーティングテーブルだけでなく,名前解決に使うDNSのネームサーバや時刻同期に使うNTPサーバも設定できる!!
第6章ちょこっとまとめ
・HTTP
TCPの80番ポートを使ってやりとりされるテキストベースのプロトコル
・DNS
UDPの53番ポートを使ってやりとりされるバイナリベースのプロトコル
・DHCP
UDPの67番ポートを使ってやりとりされるバイナリベースのプロトコル
今回はここまで!!
ではまた次回!!