ubuntu16.04　PXEBOOTインストール手順備忘録

##０．はじめに
　自分の勤める会社では、セキュリティ強化の一環でDVDメディアへの書き込みやUSBメモリの使用が禁止となっており、従来のハードウェアにLinuxをインストールしようとしても、かつてのように気軽にできなくなってきました。
　そこで自分のPCに立てた仮想マシンに、DHCPサーバおよびTFTPサーバを設定し、PXEBOOTで別PCに導入することを行いましたので、その時の手順を備忘録としてここに残します。
　PXEBootの手順は、ググるといくつか出てきますが、思った通りに動かなかったので、今回実施してうまくいった内容をここに記載します。

##１．構成図
・Ubuntu用サーバは、有線LANの口が一つ以上あること。
・業務PCは、WiFiと有線LANの口が一つ以上あること。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/113879/870b0c68-f58c-8401-b18f-48bb6dd2d203.png)

##２．仮想マシンへのUbuntu OS導入
①Windows PCにVirtualBoxを導入します。(今回の本題ではないので、詳細はスキップ)
②Ubuntu Server 16.04のISOイメージをダウンロードします。
　[http://releases.ubuntu.com/16.04/](http://releases.ubuntu.com/16.04/)からubuntu-16.04.5-server-amd64.isoを選択。
③VirtualBoxで仮想マシンを新規作成します。(基本はデフォルト設定で作成します)
④ネットワークの設定を変更します。
　アダプター2を有効にし、割り当てにブリッヂアダプター、アダプタータイプは有線NICを指定します。
⑤ストレージ設定で、光学ドライブには、②でダウンロードしたISOファイルを指定します。
⑥仮想マシンを起動し、Ubuntuをインストールします。
　途中でNICを選択する画面が出ますが、enp0s3側を選択してください。
⑦インストール完了後、OSを再起動＆ログインします。(opensshサーバを導入すると後が楽です。)
⑧sudo apt-get updateにてエラーにならないことを確認します。
⑨IPアドレスの確認を行う。
　enp0s3がNAT 10.0.2.15/24、enp0s8がIPアドレスなしになっていることを確認する。

```text:コマンド
$ ip a
(中略)
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 xxxx::xxxx:xxxx:xxxx:xxxx/64 scope link
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
```
##３．DHCPサーバの設定
①有線NICのIPアドレスを設定します。

```text:コマンド
$ sudo vi /etc/network/interfaces
```
下記を追記します。

```
auto enp0s8
iface enp0s8 inet static
address 192.168.0.1
netmask 255.255.255.0
```
ここでは、192.168.0.1/24を設定します。
設定後、OSを再起動します。

```text:コマンド
$ sudo reboot
```
```text:コマンド
$ ip a
(中略)
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether XX:XX:XX:XX:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.1/24 brd 192.168.0.255 scope global enp0s8
       valid_lft forever preferred_lft forever
    inet6 xxxx::xxxx:xxxx:xxxx:xxxx/64 scope link
       valid_lft forever preferred_lft forever
```

②DHCPサーバのモジュールを導入します。

```text:コマンド
$ sudo apt install -y isc-dhcp-server
```
③DHCPサーバで使用するインターフェースに有線NICを指定します。

```text:コマンド
$ sudo vi /etc/default/isc-dhcp-server
```
```
INTERFACES="enp0s8"
```   
④DHCPサーバの設定をします。

```text:コマンド
$ sudo vi /etc/dhcp/dhcpd.conf
```
```
default-lease-time 600;
max-lease-time 7200;

subnet 192.168.0.0 netmask 255.255.255.0 {
  option routers 192.168.0.1;
  option subnet-mask 255.255.255.0;
  option domain-name-servers 8.8.8.8, 8.8.4.4;
}

host ubuntu1 {
  hardware ethernet XX:XX:XX:XX:XX:XX; #UbuntuサーバのNICのMACアドレスに置換
  next-server 192.168.0.1;
  fixed-address 192.168.0.11;
  filename "pxelinux.0";
}
```
```text:コマンド
$ sudo systemctl enable isc-dhcp-server
$ sudo systemctl restart isc-dhcp-server
```
⑤仮想マシンをGWとするため、IPマスカレードの設定をします。

```text:コマンド
$ sudo sysctl -w 'net.ipv4.ip_forward=1'
$ sudo iptables -t nat -F
$ sudo iptables -F
$ sudo iptables -L

$ sudo iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
$ sudo iptables -A FORWARD -i enp0s3 -o enp0s8 -m state --state RELATED,ESTABLISHED -j ACCEPT
$ sudo iptables -A FORWARD -i enp0s8 -o enp0s3 -j ACCEPT
```
設定を保存します。

```text:コマンド
$ sudo apt install -y iptables-persistent
```
##４．TFTPサーバの設定
①TFTPサーバのモジュールを導入します。

```text:コマンド
$ sudo apt-get install -y tftpd-hpa
```
②Ubuntuのnetboot.tar.gzをダウンロードします。

```text:コマンド
$ cd /var/lib/tftpboot
$ sudo wget http://archive.ubuntu.com/ubuntu/dists/xenial-updates/main/installer-amd64/current/images/netboot/netboot.tar.gz
```
③netbootファイル群をTFTP用ディレクトリに配置します。

```text:コマンド
$ sudo tar xvzf netboot.tar.gz
```
④TFTPサーバの再起動します。   

```text:コマンド   
$ sudo systemctl restart tftpd-hpa.service
```

##５．Ubuntu用PCをPXEBOOTモードで起動
①LANケーブルをUbuntu用PCとWindowsPCと接続します。
②Ubuntu用PCのBIOS画面で、PXEBootする設定を行い、起動します。
③Ubuntuのインストーラーが起動することを確認します。

以上で、PXEBootインストール手順の完了です。