既存のDHCPサーバが存在する場合でもPXE Bootをする(dnsmasqを使ったProxy DHCPの設定)
はじめに
PXE BootをするためにはDHCPサーバにブート情報を設定する必要があるが,Buffalo等の家庭用ルータが設置してあるとこれができない.だからといって別途サブネットを分けたりするのも面倒.
そこで,Proxy DHCPという仕組みを使うと,既存のDHCPサーバの設定を変更せずにブート情報を流すことができる. (参考:PXEには3種類ある)
今回はdnsmasqを使ってProxy DHCPの設定を行う.
環境
- サブネット:192.168.11.0/24
- Proxyサーバ(dnsmasq):192.168.11.100
- TFTPサーバ:192.168.11.201
- (既存のBuffaloルータ:192.168.11.1)
ブートの流れ
- PXE ClientがDHCP要求を行う
- 既存のDHCPサーバ(Buffaloルータ)が応答する(DHCP Offer)
- Proxyサーバ(dnsmasq)がnext-serverとbootfile-nameを載せて応答する(DHCP Offer)
- PXE Clientが既存DHCPサーバに対してDHCP Requestを行う
- 既存DHCPサーバがDHCP Ackを返す
- PXE ClientがProxyサーバに対してDHCP Requestを行う
- ClientとProxy間はポート4011/UDPが使用される
- Proxyサーバがnext-serverとbootfile-nameを載せてACKを返す
- PXE ClientがTFTPサーバへアクセスする
dnsmasqの設定
(参考:PXE Server on Existing Network (DHCP Proxy) with Ubuntu | manski's blog)
ここではTFTPサーバの設定方法は割愛する.
/etc/dnsmasq.conf
に以下を追記
port=0 log-dhcp dhcp-range=192.168.11.0,proxy dhcp-boot=pxelinux.0,192.168.11.201 pxe-service=x86PC,"Network Boot",pxelinux,192.168.11.201
ここでpxe-service
オプションにTFTPサーバのIPアドレスを書かないと,next-serverにProxyサーバのIPアドレスが設定されてしまうので注意.
dhcp-bootにしか書かないと”ブートの流れ”の3と7でnext-serverのIPアドレスが変わり,PXEブートに失敗する.
(参考:[Dnsmasq-discuss] dnsmasq dhcpProxy and PXE next-server not working)
あとはdnsmasqを再起動すれば設定完了.
パケットキャプチャしてみた
PXEブート時のDHCPパケットをキャプチャするとこのようになった.