#何がやりたい?
PXEブート用のサーバーが必要となったものの、Mac上に直接、tftpとdhcpを構築するのも良いのですが、上手く動いているのかどうかの切り分けが大変なため、VirtualBox上でサーバー側とクライアント側の両方をMac上で構築することで、まず最初に、PXEブートが動作することを確認してから、外部デバイス向けのPXEブート用サーバーを構築します。
##Topology
外部デバイスと接続するインタフェースは、USBの有線LANアダプタを接続しています。
##Ubuntu(PXE Server)のインストール
まず最初に、VirtualBox上に、Ubuntuのサーバー(16.04.4)をインストールします。
次に、各ネットワークアダプタを設定します。
####HostのMacに接続されているインターネットと繋がるインタフェース
####Macのターミナルを開いて、SSH経由でUbuntuにログインするためのインタフェース
####もう一台のVirtualBox上で作成するクライアントと繋がるインタフェース
##Ubuntuインストール後の状態を確認
Ubuntuのバージョンを確認
hoge@ubuntu:~$ cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.4 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.4 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
ネットワークアダプタの確認
hoge@ubuntu:~$ lshw -short -class network
WARNING: you should run this program as super-user.
H/W path Device Class Description
===============================================
/0/100/3 enp0s3 network 82540EM Gigabit Ethernet Controller
/0/100/8 enp0s8 network 82540EM Gigabit Ethernet Controller
/0/100/9 enp0s9 network 82540EM Gigabit Ethernet Controller
/0/100/a enp0s10 network 82540EM Gigabit Ethernet Controller
WARNING: output may be incomplete or inaccurate, you should run this program as super-user.
hoge@ubuntu:~$
##インタフェースの設定
設定ファイルを開いて、末尾に追加
sudo vi /etc/network/interfaces
# ===== SSH from host =====
auto enp0s8
iface enp0s8 inet static
address 192.168.98.10
netmask 255.255.255.0
network 192.168.98.0
broadcast 192.168.98.255
# ===== USB ether port =====
auto enp0s9
iface enp0s9 inet static
address 192.168.99.1
netmask 255.255.255.0
network 192.168.99.0
broadcast 192.168.99.255
# ===== Internal Network =====
auto enp0s10
iface enp0s10 inet static
address 192.168.0.1
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
enp0s8
に192.168.98.10
を指定していますが、下記の通り、Mac側で確認した内容に合わせた手動アドレスとしています。
$ ifconfig
vboxnet0 (23):
inet address 192.168.98.1
netmask 255.255.255.0
broadcast 192.168.98.255
flags UP BROADCAST RUNNING PROMISC SIMPLEX MULTICAST
mtu 1500
Ubuntuのインストールが完了したら、先にenp0s8
の部分だけを追加して、後は、Macのターミナルを開いて、SSH経由で接続してから設定しても良いかと。
##DHCPサーバの設定
###DHCPのインストール
sudo apt install -y isc-dhcp-server
DHCPを動作させるインタフェースを指定する
sudo vi /etc/default/isc-dhcp-server
INTERFACES="enp0s9 enp0s10"
DHCPの設定ファイルを開いて、末尾に必要な内容を追記する
sudo vi /etc/dhcp/dhcpd.conf
default-lease-time 1800;
max-lease-time 3600;
ddns-update-style none;
subnet 192.168.0.0 netmask 255.255.255.0 {
option routers 192.168.0.1;
option subnet-mask 255.255.255.0;
range 192.168.0.100 192.168.0.110;
option domain-name "private.exmaple.com";
option domain-name-servers 8.8.8.8, 8.8.4.4;
filename "./ubuntu/pxelinux.0";
}
subnet 192.168.99.0 netmask 255.255.255.0 {
option routers 192.168.99.1;
option subnet-mask 255.255.255.0;
range 192.168.99.100 192.168.99.110;
option domain-name "private.exmaple.com";
option domain-name-servers 8.8.8.8, 8.8.4.4;
filename "image_name.iso";
}
不要な設定もあると思いますので、適宜削除してください。
不要かどうかは、PXE Clicentが起動するか、起動しないかで切り分けてください。
###DHCPの起動
sudo systemctl enable isc-dhcp-server
sudo systemctl restart isc-dhcp-server
sudo systemctl status isc-dhcp-server
##tftpサーバの設定
###TFTPのインストール
sudo apt-get install -y tftpd-hpa
PXEクライアントとして起動させるためのイメージをダウンロードして展開
cd /var/lib/tftpboot
sudo mkdir ubuntu
cd ubuntu
sudo wget http://archive.ubuntu.com/ubuntu/dists/xenial-updates/main/installer-amd64/current/images/netboot/netboot.tar.gz
sudo tar xvzf netboot.tar.gz
外部デバイスで起動したいイメージがimage_name.iso
だとすると、/var/lib/tftpboot
配下に置いておくこと。
###TFTPの起動
sudo systemctl restart tftpd-hpa.service
sudo systemctl status tftpd-hpa.service
##PXE Clientの準備
動作確認用のPXE Clientを新規の仮想マシンとして作成します。
また、各設定は下記の通りです。
####[一般]-[基本]
####[システム]-[マザーボード]
ここがポイントで、起動順序
のネットワーク
を有効にして、一番上に移動させること。
####[ネットワーク]-[アダプター1]
先に構築しているPXE Serverと内部インタフェースで接続するための設定
##PXE Clientの起動
電源を入れれば、下記のような画面が表示されるはず。
無事に起動すれば、ちょっとお試しで、イメージ保管先を示す./ubuntu/pxelinux.0
を./pxelinux.0
に変更すると起動しなくなることが確認できますので、dhcpでイメージファイルの情報を渡して、実際のイメージファイルはtftpで取得していることが分かる。
これで、外部デバイスからもPXEブートできるはず。