OpenShift 4.8 を vSphere 上にIPIインストールする
はじめに
OpenShift 4.8 の vSphere へのインストールを試して見たいと思います。
ここでは IPI (installer Provisioned infrastructure) という方法を試します。IPIは、OpenShift のインストーラーが、vCenter 経由で Master Node / Worker Node のVM から作成してくれるというお手軽なインストール方法です。
OpenShift 4.8 のマニュアルの以下の部分を参考にしながら進めて行きます。
最終的にできる環境は以下のような感じになっています。
vCenter と DNSサーバー、DHCPサーバーが構築されている環境です。
前提となる環境について
vCenter : Master/Worker Node が作成されるネットワークから名前解決できるようにしておきます。vCenterを通して、OpenShift のインストーラーが Master / Worker Node 等を作成します。
DHCP Server : Master/Worker ノードに IPアドレスを付けるために必要です。
DNS Server : vCenter や、インターネット上のレポジトリサーバー、OpenShift の外部アクセスドメインの名前解決等に使われます。
VMWare IPI を使った OpenShift のインストールでは、OpenShift クラスターにアクセスするための固定IPを2つ用意する必要があります。これらの固定IPは、自動で作成される Master Nodeアクセス用のロードバランサーと、ユーザーアプリ用のロードバランサーの入り口のIPとして使われます。
DHCP Server で、Master Node / Worker Node の IP が割り振られるので、ロードバランサー用のIPがこれらと衝突しないように、ロードバランサー用の固定IPは、DHCPサーバーが割り振るアドレスレンジを、サブネットより小さめにする事で、サブネット内のDHCP用のアドレスレンジの外から確保しています。
インターネットのアクセスについて
今回は普通にインターネットにHTTPで出られる環境に構築するので特に作業は必要ありませんでした。
必要な vCenter の要件について
今回は vCenetr の管理者権限でインストールするので特に作業は必要ありませんでした。
また、マニュアルのこのセクションには、Storage vMotion や、Datastore をまたいだストレージの移動などはサポートしていな事がかかれていました。
インストーラー実行までの準備
DNS record の登録
今回は OpenShfit のクラスタ用に example.localdomain
というドメインをベースドメインに使う事にします。
クラスタの名前をocp48
とする事にします。このクラスタ名に先ほどのベースドメインを足したocp48.example.localcomain
がこのクラスタで使われる基本となるドメインになります。
環境内のexample.localdomain
ゾーンの権威 DNSに、以下の2つの名前の Aレコードを登録します。
権威DNSとは、そのゾーンのレコードを管理しているDNSの事です。
$ORIGIN example.localdomain.
$TTL 3600
@ IN SOA ns1.example.localdomain. root.example.localdomain.(
2000091802 ; Serial
3600 ; Refresh
900 ; Retry
3600000 ; Expire
3600 ) ; Minimum
IN NS ns1.example.localdomain.
api.ocp48.example.localdomain. IN A 172.16.0.111
*.apps.ocp48.example.localdomain. IN A 172.16.0.112
api.ocp48.example.localdomain
は、Master サーバー (API Server) にアクセスする時に使用されるドメイン名です。kubectl
や oc (OpenShift が kubectlを拡張したもの)
のコマンドがアクセスしに行く先もこのドメインになります。
*.apps.ocp48.example.localdomain
は、外部にユーザーが作ったアプリケーションを公開する時に使用されるドメイン名です。ユーザーが作ったコンテナをクラスター外にRoute
(OpenShift で Ingress
の立ち位置にいる人) を使って公開する時は、このドメインの*
の所がそれぞれのアプリケーションの名前にしたものが使われます。
vSphere 上の IPIインストールでは、OpenShift のクラスター外部に、Load Balancer を別途設置する必要はありません。上記のドメインのIPが、VIP (Virtual IP)として OpenShift クラスターに割り当てられます。ここで使う VIPのアドレスは、OpenShift の Nodeが存在するネットワークのアドレスレンジから取得する必要がありいます。
OpenShift のインストーラーの取得
マニュアルの以下のセクションを見ながら進めて行きます。
インターネット上のサービスである OCM(OpenShift Cluster Manager)のページでインストーラーをダウンロードします。Red Hat のアカウントが無い場合は作成が必要です(無料で作成できます)。https://console.redhat.com/openshift/install
「Datacenter」タブの「vSphere」を選びます。
「OpenShift isntaller」「Pull secret」「Command line interface」をそれぞれダウンロードします。自分の Platform に会わせたものをダウンロードします。
「OpenShift isntaller」と「Command line interface」についてはボタンを右クリックで、URLが取れるので curlでダウンロードできます。
curl https://mirror.openshift.com/pub/openshift-v4/clients/ocp/stable/openshift-install-linux.tar.gz -o openshift-install-linux.tar.gz
curl https://mirror.openshift.com/pub/openshift-v4/clients/ocp/stable/openshift-client-linux.tar.gz -o openshift-client-linux.tar.gz
ダウンロードしたら解凍しておきます。
[root@bastion openshift]# tar zxvf openshift-install-linux.tar.gz
README.md
openshift-install
[root@bastion openshift]# tar zxvf openshift-client-linux.tar.gz
README.md
oc
kubectl
[root@bastion openshift]#
vCener の CAをダウンロードして、信頼できるCAに追加する
OpenShift のインストーラーが、vCenter とお話しするので、vCenter の証明書に署名しているCAを信頼できている必要があります。
マニュアルの以下を読みながら、vCenter が使用している CAの情報を取得して、信頼できるCAとして追加します。
私の環境では192.168.124.11
が vCenterです。
[root@bastion openshift]# curl -k https://192.168.124.11/certs/download.zip -o download.zip
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 5945 100 5945 0 0 45037 0 --:--:-- --:--:-- --:--:-- 45037
[root@bastion openshift]#
[root@bastion openshift]# unzip download.zip
Archive: download.zip
inflating: certs/lin/d064a1cf.0
inflating: certs/mac/d064a1cf.0
inflating: certs/win/d064a1cf.0.crt
inflating: certs/lin/d064a1cf.r0
inflating: certs/mac/d064a1cf.r0
inflating: certs/win/d064a1cf.r0.crl
[root@bastion openshift]#
[root@bastion openshift]# cp certs/lin/* /etc/pki/ca-trust/source/anchors
[root@bastion openshift]# update-ca-trust extract
インストーラーの実行
下準備は整ったので、クラスターの作成を開始します。マニュアル的には以下のセクションです。
install 用のマニフェストの作成
OpenShift のインストーラーと対話形式で、install 用のYAMLを作成します。
Virtual IP Address
は、DNSにドメイン名を登録した時に使用したした IPアドレスです。
それ以外は選択式のため、それほど難しくないはずです。
openshift-install create install-config
を実行します。
[root@bastion openshift]# ./openshift-install create install-config
? SSH Public Key /root/.ssh/openshift_ssh_key.pub
? Platform vsphere
? vCenter vcenter.adp.nrt.example.com
? Username Administrator@vsphere.local
? Password [? for help] ********
INFO Connecting to vCenter vcenter.adp.nrt.example.com
INFO Defaulting to only available datacenter: NRT
INFO Defaulting to only available cluster: Cluster
? Default Datastore vsanDatastore
? Network yhanada-int # ここは自分の環境のVMware のネットワーク名
X Sorry, your reply was invalid: "API 172.16.0.111" is not a valid IP
? Virtual IP Address for API 172.16.0.111
? Virtual IP Address for Ingress 172.16.0.112
? Base Domain example.localdomain
? Cluster Name ocp48
? Pull Secret [? for help] *************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************INFO Install-Config created in: /root/openshift/vmware ******************************************************
[root@bastion openshift]#
結果として以下のような install-config.yaml
というYAMLファイルができます。
インタラクティブに聞かれずにデフォルトの値が入って居る所を手動で修正していきます。
machineNetwork:
は、Node が接続されるネットワークです。デフォルト値は、10.0.0.0/16
ですが、私の環境の172.16.0.0/24
に合わせました。
[root@bastion openshift]# cat install-config.yaml.vmware
apiVersion: v1
baseDomain: example.localdomain
compute:
- architecture: amd64
hyperthreading: Enabled
name: worker
platform: {}
replicas: 3
controlPlane:
architecture: amd64
hyperthreading: Enabled
name: master
platform: {}
replicas: 3
metadata:
creationTimestamp: null
name: ocp48
networking:
clusterNetwork:
- cidr: 10.128.0.0/14
hostPrefix: 23
machineNetwork:
- cidr: 172.16.0.0/24
networkType: OpenShiftSDN
serviceNetwork:
- 172.30.0.0/16
platform:
vsphere:
apiVIP: 172.16.0.111
cluster: Cluster
datacenter: NRT
defaultDatastore: vsanDatastore
ingressVIP: 172.16.0.112
network: yhanada-int
password: xxxxx
username: Administrator@vsphere.local
vCenter: vcenter.adp.nrt.example.com
publish: External
sshKey: |
ssh-rsa AAAAB3NzaC4Rm***** 省略
[root@bastion openshift]#
完成したinstall-config.yaml
はバックアップを取っておきます。(インストールを実行するとこのファイル名のオリジナルが消されてしまいます)
このファイルを取って置けば、/openshift-install create cluster
コマンドだけで、何度でも同じクラスタを作成する事が可能です。
[root@bastion openshift]# cp install-config.yaml install-config.yaml.bak
クラスターの作成
インストールを実行します。
openshift-install create cluster
を install-config.yaml
のあるディレクトリで実行します。(--dir
オプションで、install-config.yaml
のあるディレクトリを指定する事もできます)
[root@bastion openshift]# ./openshift-install create cluster
INFO Consuming Install Config from target directory
INFO Obtaining RHCOS image file from 'https://releases-art-rhcos.svc.ci.openshift.org/art/storage/releases/rhcos-4.8/48.84.202106301921-0/x86_64/rhcos-48.84.202106301921-0-vmware.x86_64.ova?sha256='
INFO The file was found in cache: /root/.cache/openshift-installer/image_cache/rhcos-48.84.202106301921-0-vmware.x86_64.ova. Reusing...
INFO Creating infrastructure resources...
INFO Waiting up to 20m0s for the Kubernetes API at https://api.ocp48.example.localdomain:6443...
ログをよく見ると Obtaining RHCOS image file from 'https://releases-art-rhcos.svc.ci.openshift.org/art/storage/releases/rhcos-4.8/48.84.202106301921-0/x86_64/rhcos-48.84.202106301921-0-vmware.x86_64.ova?sha256='
とあり、Red Hat Core OS の .ova をインターネット経由でダウンロードしている事がわかります。
暫くするとニョキニョキとVMが生えてきます。
最終的に bootstrap
と書かれたノードは自動的に削除されます。ここまで来るともう一息です(と言ってもここから最大40分程かかるようです)。
コマンドラインが以下の状態になっていれば完了です。
[root@bastion openshift]# ./openshift-install create cluster
INFO Consuming Install Config from target directory
INFO Obtaining RHCOS image file from 'https://releases-art-rhcos.svc.ci.openshift.org/art/storage/releases/rhcos-4.8/48.84.202106301921-0/x86_64/rhcos-48.84.202106301921-0-vmware.x86_64.ova?sha256='
INFO Creating infrastructure resources...
INFO Waiting up to 20m0s for the Kubernetes API at https://api.ocp48.example.localdomain:6443...
INFO API v1.21.1+9807387 up
INFO Waiting up to 30m0s for bootstrapping to complete...
INFO Destroying the bootstrap resources...
INFO Waiting up to 40m0s for the cluster at https://api.ocp48.example.localdomain:6443 to initialize...
INFO Waiting up to 10m0s for the openshift-console route to be created...
INFO Install complete!
INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/root/openshift/auth/kubeconfig'
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.ocp48.example.localdomain
INFO Login to the console with user: "kubeadmin", and password: "aB4ZB-jE4Rh-HkcPq-7sp6t"
INFO Time elapsed: 33m42s
[root@bastion openshift]#
以上でクラスターのインストールは完了です。非常に簡単でした。
本番環境で使うにはまだまだやる事があるのですが(Identity Provider のセットアップだったり etc) 簡単に触ってみるレベルであれば、これでインストールは完了です。
OpenShift にログインしてみる
クラスターのインストールログの最後に、環境のセットアップ方法や、管理ユーザー名、パスワードが記載されています。
***
INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/root/openshift/auth/kubeconfig'
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.ocp48.example.localdomain
INFO Login to the console with user: "kubeadmin", and password: "aB4ZB-jE4Rh-HkcPq-7sp6t"
INFO Time elapsed: 33m42s
[root@bastion openshift]#
これらの情報を使ってログインできる確認してみます。
[root@bastion openshift]# export KUBECONFIG=/root/openshift/auth/kubeconfig
[root@bastion openshift]# oc login -u kubeadmin -p aB4ZB-jE4Rh-HkcPq-7sp6t
Login successful.
You have access to 63 projects, the list has been suppressed. You can list all projects with 'oc projects'
Using project "default".
[root@bastion openshift]#
問題なさそうです。
このログイン情報は私はコピペしてlogin.txt
というメモに保存しています。(インストールのログ自体は .openshift_install.log
というファイルに記録されているので、一応、管理ユーザーのパスワードを忘れてもログから辿る事が可能です)
[root@bastion openshift]# cat << EOF > login.txt
> export KUBECONFIG=/root/openshift/auth/kubeconfig
> oc login -u kubeadmin -p aB4ZB-jE4Rh-HkcPq-7sp6t
> EOF
[root@bastion openshift]#
何かコマンドを実行してみます。oc
コマンドが OpenShift 標準ですが、kubectl
も使えます。
[root@bastion openshift]# oc get nodes
NAME STATUS ROLES AGE VERSION
ocp48-h49p6-master-0 Ready master 24m v1.21.1+9807387
ocp48-h49p6-master-1 Ready master 24m v1.21.1+9807387
ocp48-h49p6-master-2 Ready master 24m v1.21.1+9807387
ocp48-h49p6-worker-2dmjq Ready worker 13m v1.21.1+9807387
ocp48-h49p6-worker-9n5fg Ready worker 13m v1.21.1+9807387
ocp48-h49p6-worker-l7lnn Ready worker 13m v1.21.1+9807387
[root@bastion openshift]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
ocp48-h49p6-master-0 Ready master 24m v1.21.1+9807387
ocp48-h49p6-master-1 Ready master 24m v1.21.1+9807387
ocp48-h49p6-master-2 Ready master 24m v1.21.1+9807387
ocp48-h49p6-worker-2dmjq Ready worker 13m v1.21.1+9807387
ocp48-h49p6-worker-9n5fg Ready worker 13m v1.21.1+9807387
ocp48-h49p6-worker-l7lnn Ready worker 13m v1.21.1+9807387
[root@bastion openshift]#
クラスタの削除
openshift-install destroy cluster
でクラスタを削除できます。
[root@bastion openshift]# ./openshift-install destroy cluster
INFO Destroyed VirtualMachine=ocp48-vc6hb-rhcos
INFO Destroyed VirtualMachine=ocp48-vc6hb-master-1
INFO Destroyed VirtualMachine=ocp48-vc6hb-master-2
INFO Destroyed VirtualMachine=ocp48-vc6hb-master-0
INFO Destroyed VirtualMachine=ocp48-vc6hb-worker-9jtls
INFO Destroyed VirtualMachine=ocp48-vc6hb-worker-vmc6s
INFO Destroyed VirtualMachine=ocp48-vc6hb-worker-kzjlr
INFO Destroyed Folder=ocp48-vc6hb
INFO Destroyed Tag=ocp48-vc6hb
INFO Destroyed TagCategory=openshift-ocp48-vc6hb
INFO Time elapsed: 11s
[root@bastion openshift]#
クラスターを消すのも簡単ですが、インストール時に使用したinstall-config.yaml
を取って置けば、同じクラスターを簡単に再作成する事ができます。
install-config.yaml
のバックアップがinstall-config.yaml.bak
であれば…
[root@bastion openshift]# cp install-config.yaml.bak install-config.yaml
[root@bastion openshift]# ./openshift-install create cluster
でクラスターを再作成できます。
補則1:インストール時に経験した失敗
インストールは、非常に簡単でした。と言いつつも、完成するまでに途中で幾つか失敗しています。参考までに遭遇したインストール時の失敗を書いておきます。
失敗1:デフォルトで作られる Machine Network (Kubernetes NodeのVMが置かれるNetwork) の CIDRと、実際の環境の CIDRが一致していなかった。
環境の CIDR に会うように会わせる必要がある。→ install-config.yaml を作って自分が使用する CIDR を記載する必用があった。
失敗2:vcenter や ESXの名前解決が installer の場所からできなかった。
OpenShift のインストーラーを置いている /etc/hosts に登録して解決(したように見えた。が失敗3に続く)
失敗3: Master Node ができ、BootStrap Node も消えるが、Worker Node ができない。
失敗2で OpenShift のインストーラーを動かしている Host の /etc/hosts に vCenter / ESX を登録しただけでは足りず、DNSサーバーに登録すると WorkerNode もデプロイされた。OpenShift インストーラーだけでなく、Master Node 達が名前解決を試みているのかもしれない。
補則2:PV のデプロイ
Default の SC(Storage Class) が存在していたので、PVをデプロイしてみます。
[root@bastion openshift]# oc get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
thin (default) kubernetes.io/vsphere-volume Delete Immediate false 88m
[root@bastion openshift]#
以下のようなPVCのマニフェストを用意します。
apiVersion: "v1"
kind: "PersistentVolumeClaim"
metadata:
name: "vsphere-vol1"
spec:
accessModes:
- "ReadWriteOnce"
resources:
requests:
storage: "10Gi"
storageClassName: "thin"
マニフェストを apply してみると PVCで指定した通りの PV ができました。
[root@bastion openshift]# oc apply -f my-pvc-vsphere.yaml
persistentvolumeclaim/vsphere-vol1 created
[root@bastion openshift]# oc get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
vsphere-vol1 Bound pvc-0e236c66-2f62-4074-b6dd-effa3126a161 10Gi RWO thin 3s
[root@bastion openshift]# oc get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-0e236c66-2f62-4074-b6dd-effa3126a161 10Gi RWO Delete Bound default/vsphere-vol1 thin 7s
[root@bastion openshift]#
DataStore にkubevols
というフォルダーができていました。ここに作成されたPVがファイルとして保管されているようです。
補則3: インストール後の実験 (ロードバランサーを探る)
ロードバランサー用のIPはどこに存在するのか
install 時に 172.16.0.111
を Master API 用、172.16.0.112
を User Application 用の Load Balancer IPとして指定しました。
このIPが本当に存在しているのかを探って見ました。この環境では、Node
間のネットワークは、172.16.0
で指定しているので、この値で各 Node にログインして grep をしていきます。
install 後の Node 構成は以下の通りです。
[root@bastion openshift]# oc get nodes
NAME STATUS ROLES AGE VERSION
ocp48-vc6hb-master-0 Ready master 2d14h v1.21.1+9807387
ocp48-vc6hb-master-1 Ready master 2d14h v1.21.1+9807387
ocp48-vc6hb-master-2 Ready master 2d14h v1.21.1+9807387
ocp48-vc6hb-worker-9jtls Ready worker 2d14h v1.21.1+9807387
ocp48-vc6hb-worker-kzjlr Ready worker 2d14h v1.21.1+9807387
ocp48-vc6hb-worker-vmc6s Ready worker 2d14h v1.21.1+9807387
[root@bastion openshift]#
Master Node ocp48-vc6hb-master-2
で、172.16.0.111
を発見。サブネットが172.16.0.111/32
で、/32
になっていて、元々の Node 間のネットワークの172.16.0.0/24
そのままでは無い事がわかります。
[root@bastion openshift]# oc debug node/ocp48-vc6hb-master-2
Starting pod/ocp48-vc6hb-master-2-debug ...
To use host binaries, run `chroot /host`
Pod IP: 172.16.0.51
If you don't see a command prompt, try pressing enter.
sh-4.4# ip addr show | grep -A2 172.16
inet 172.16.0.51/24 brd 172.16.0.255 scope global dynamic noprefixroute ens192
valid_lft 76455sec preferred_lft 76455sec
inet 172.16.0.111/32 scope global ens192
valid_lft forever preferred_lft forever
inet6 fe80::8150:c409:fcb:e0e4/64 scope link noprefixroute
sh-4.4#
Worker Node ocp48-vc6hb-worker-kzjlr
で、172.16.0.112
を発見。
[root@bastion openshift]# oc debug node/ocp48-vc6hb-worker-kzjlr
Starting pod/ocp48-vc6hb-worker-kzjlr-debug ...
To use host binaries, run `chroot /host`
Pod IP: 172.16.0.53
If you don't see a command prompt, try pressing enter.
sh-4.4# ip addr show | grep -A2 172.16
inet 172.16.0.53/24 brd 172.16.0.255 scope global dynamic noprefixroute ens192
valid_lft 76827sec preferred_lft 76827sec
inet 172.16.0.112/32 scope global ens192
valid_lft forever preferred_lft forever
inet6 fe80::2c41:727d:2ca5:f432/64 scope link noprefixroute
sh-4.4#
これらの VIP は、keepalived
によって提供されているそうです。keepalived
は、Pod
として全Node
で稼働しています。
[root@bastion openshift]# oc get pods -n openshift-vsphere-infra | grep keepalived
keepalived-ocp48-h49p6-master-0 2/2 Running 2 3d22h
keepalived-ocp48-h49p6-master-1 2/2 Running 2 3d22h
keepalived-ocp48-h49p6-master-2 2/2 Running 2 3d22h
keepalived-ocp48-h49p6-worker-2dmjq 2/2 Running 2 3d22h
keepalived-ocp48-h49p6-worker-9n5fg 2/2 Running 2 3d22h
keepalived-ocp48-h49p6-worker-l7lnn 2/2 Running 2 3d22h
[root@bastion openshift]#
Node を意図的に倒した時に、Failover するのか等のテストはまた時間があった時に…
こちらのブログ記事が VIP の仕組みについて掘り下げてくれていました。keepalived
は、Static Pod
として生成されていて、Machine Config Operator
によって構成されてるんですね。
補則4: ユーザードアプリドメインをインターネットに公開する
ユーザーアプリのドメインをインターネットに公開できますか?という質問を受けました。
環境の都合で実験できていませんが、以下のような感じでいけるのではないかと思ってます。
- インターネットに公開するドメインを取得。Global IPをアサイン。
- インターネット- イントラネット間の NATを構成
インターネット上の Global IPと、イントラネットのユーザー・アプリ用のVIPを関連付ける。 - ユーザーアプリ用のRoute リソース (OpenShift で Ingress の立ち位置にある Custom Resource) を、インターネットに公開するドメインからのリクエストを受けられるように設定。
とは言えこういうのは実機確認しないと怪しさが残りますよね…
もし「こうすればできましたよー」という方がいらっしゃいましたらコメント欄で教えて下さると嬉しいです。
Discussion
こんにちは!こちらの記事大変参考になりました!
お伺いしたいのですがDHCPサーバは既にあるという理解であっているでしょうか?
お疲れ様です!はい!DHCPサーバーは既にあります!
vCenter と DHCPサーバーと、DNSサーバーがある状態がスタート時点になります。
私は DHCPサーバー(dhcpd) とDNSサーバー(BIND) を同居させています。
すみません、構成図について質問させてください。VIPのアドレスがLANのサブネットと違うIPになっているように見えるのですが、この構成でVIPへのアクセスできるのでしょうか?
こんばんは。
構成図の方に Node が所属するネットワークそのものを書いてない気がするのですが、どこの辺りですかね…(あった方がいいですね。時間がある時に追加しておきます)
Node が所属するネットワークは、途中に出てくる install-config.yaml 内の
の部分になります。
仮想 IP (VIP) は、構成図中にあるように以下の通りで、172.16.0.0/24 内のレンジでアサインしています。
api.ocp48.example.localdomain 172.16.0.111
*.apps.ocp48.example.localdomain 172.16.0.112
(実際には DHCPでこれらのIPが他の人にアサインされないように、DHCPでIPを配布するレンジは、/24より狭くしています)