[toc]
> **更新說明**
> 2023/11 更新版本至 NIOS 9
根據 [Infoblox DNS 安全解決方案測試需求及說明](https://hackmd.io/@farmer87/infoblox_poc) 內容進行 POC 環境佈署。
# 佈署版本
| 項目 | 版本 |
| --- | --- |
| VMware ESXi | 7.0.3 build-20036589 |
| Infoblox NIOS | nios-9.0.3-50212-ee11d5834df9-2023-11-23-00-01-55-fixed-500G.ova |
| NIOS Grid Master VM | TE-V1516 |
| NIOS Reporting VM | TR-V5005 |
:::info
- 目前佈署版本為 NIOS 9 ~~nios-8.6.3-51135 為最新版本,已經完成 hotfix 修補~~。
- 配置 Infoblox **Reporting** 設備時,需要選擇下列**指定機種進行安裝**:
- **IB-V805** (TR-V805)
- **IB-V1405** (TR-V1405)
- **IB-V2205** (TR-V2205)
- **IB-V4005** (TR-V4005)
- **IB-V5005** (TR-V5005)
:::
:::warning
請根據可提供硬體資源佈署對應 vNIOS 虛擬設備。
:::
# 佈署流程圖
```mermaid
graph TD;
id1(佈署Infoblox虛擬機器)-->id2(開啟TE-V1516);
id2(開啟TE-V1516)-->id3([重新配置網路]);
id3([重新配置網路])-->id4(指派授權NIOS,DNS/DHCP,GRID);
id4(指派授權NIOS,DNS/DHCP,GRID)-->id16(建立叢集);
id16(建立叢集)-->id7(配置成員);
id7(配置成員)-->id20[(完成)];
id11(佈署Infoblox虛擬機器)-->id12(開啟TR-V5005);
id12(開啟TR-V5005)-->id13([重新配置網路]);
id13([重新配置網路])-->id14(指派授權NIOS,GRID);
id14(指派授權NIOS,GRID)-->id15(加入叢集);
id15(加入叢集)-->id17(指派Reporting授權);
id17(指派Reporting授權)-->id20[(完成)];
```
:::info
- 完成虛擬機器佈署後,可先**配置網路**,再根據配置角色**指派授權**。
- 指派授權時,可先根據功能屬性,**指派 NIOS 授權**,完成授權安裝後,**系統會自動重啟**,並根據指定的 NIOS 授權完成該機種屬性配置。
- Reporting 角色增加的 250GB 磁碟空間,完成 NIOS 授權指派並系統重啟後才會顯示。
- 要建立叢集或加入叢集都需先**指派 GRID 授權**。
- 先在 Grid Master 角色的虛擬機器上**完成 Grid 配置**,並設定欲**加入 Grid 成員資訊**,否則成員無法成功加入叢集。
- Grid 成員資料輸入需要 FQDN,但此時應該是不需要透過 DNS 服務達成。
- **Reporting subscription 授權** 必須要在成功加入 Gid 後才能進行指派動作。
- **Grid Master** 還需指派 **Response Policy Zones** 和 **Threat Analytics** 授權。
:::
# 佈署程序
## 佈署 Infoblox 虛擬機器
使用 **ovftool 工具**進行 POC 環境佈署,並完成以下目標:
- **佈署 2 台 Infoblox 虛擬機器**
| VM | vCPU | RAM | Grid 角色 |
| --- | :-: | :-: | --- |
| TE-V1516 | 12 | 64 | Grid Master & DNS |
| TR-V5005 | 8 | 64 | Grid Member(Reporting) |
:::warning
因為測試主機資源有限,將 TR-V5005 的 RAM 調降至 32GB。
:::
- **自動新增 TR-V5005 虛擬機器 250GB 虛擬磁碟**
- **開啟虛擬機器電源**
:::info
- 參考附錄-[**`setupPoc.sh`**](#setupPoc.sh) 執行後可自動達成上述目標。
- 佈署腳本程式採用 **ovftool** 和 **govc** 工具完成。
- 若佈署標的是 vCenter,可以應用 **vApp 選項** 套用參數自動配置 IP 屬性。但佈署標的是 ESXi 則無法應用 **vApp 選項**,雖然有方法可行,這邊就不深入了!直接完成佈署後續再透過 NIOS CLI 完成 IP 組態。
:::
### 佈署結果
:::warning
:::
**Grid Master: TE-V1516**

**Reporting: TR-V5005**

## 連線虛擬機器
確認佈署虛擬機器已正常開機,逐步完成設定程序。此階段請使用 VMware Remote Console 連線虛擬機器完成。
:::info
預設登入帳密資訊: **admin** / **infoblox**
:::
### 登入檢測
輸入以下命令確認佈署狀態。
- show version
- show license
- show status
- show disk
**TE-V1516**

**TR-V5005**

:::warning
**注意** **Reporting 虛擬機器** 在成功指派授權前,先前新增的 250GB 虛擬磁碟無法顯示。待指派授權完成重啟系統後,便可正常顯示存儲空間。

:::
## 配置網路
:::info
:information_source: 若此時網路配置還未確認,可以先跳過此步驟,先進行[[**授權指派**]](#指派授權)作業。
:::
預設佈署 IPv4 位址為 **192.168.1.2/255.255.255.0**,預設閘道為 **192.168.1.1**。輸入 **`show network`** 可檢視目前 IP 組態資訊。

POC 環境配置資訊如下。使用 **`set network`** 進行互動式配置。
| 項目 | 配置 |
| --- | :-: |
| TE-V1516 | 10.7.155.91 |
| TR-V5005 | 10.7.155.92 |
| Netmask | 255.255.255.0 |
| Gateway | 10.7.155.254 |
| VLAN Tag | Untagged(Default) 請根據實際環境調整 |
| Configure IPv6 Network | no |
| Become grid member | no |
以 **TE-1516** 作為設定範例。

:::info
:information_source: 完成網路設定,系統會重啟網路服務。
:::

繼續完成 **TR-V5005** 網路組態。


:::info
- 若在完成 **Grid 授權指派**後才設定網路,使用 **`set network`** 設定網路時,會多一個 **Become grid member** 選項。
- Grid 成員加入必須先在 Grid Master 上完成**建立叢集**和**指定成員**。且 Grid 成員和 Grid Master 的網路必須能夠溝通。
:::
### Remote Console
輸入 **`set remote_console`** 啟用 SSH 遠端連線功能。完成後可透過 SSH 連線進行後續設定,而不需要使用 VMware Remote Console。

接著使用 SSH 遠端連線 TE-1425。

## 指派授權
輸入 **`set temp_license`** 命令可以為 NIOS 設備產生並安裝 **60 天臨時授權**。使用 **`show license`** 命令檢視目前授權資訊。
請根據以下功能需求配置 POC 所需的授權。
| Appliance | Model | License Type|
| --- | --- | --- |
| NIOS Appliance | TE-1516 | NIOS, Grid, DNS, [DHCP] |
| Reporting Appliance | TR-V5005 | NIOS, Grid |
### NIOS Appliance (TE-V1516)
指派 DNS, DHCP, Grid 授權。輸入 **set temp_license** > **2** > **y** > **y|n** 完成。

:::info
- 指派 **Response Policy Zone** 授權,請選擇 **11**。
- 指派 **Threat Analytics** 授權,請選擇 **16**。
:::
指派 NIOS 授權。輸入 **set temp_license** > **4** > **8** > **y** 完成。
:::danger


:::
:::info
:information_source: 設定 **NIOS 授權**,系統會**重新啟動**,所以 NIOS Appliacne 也可以先選擇功能授權 (DNS, DHCP,Grid) 再選擇 NIOS 授權。
:::
系統重啟並成功登入後,使用 **`show license`** 檢視授權資訊。

### Reporting Appliance (TR-V5005)
:::info
:information_source: 對於 Reporting Appliance 請先選取 NIOS 授權。
:::
指派 NIOS 授權。輸入 **set temp_license** > **4** > **16** > **y** 完成。


系統重啟並成功登入後,再次輸入 **`show license`** 檢視授權資訊。

輸入 **`set temp_license`** 命令完成功能授權指派。此時發現 **Reporting Appliance** 可以指派的授權僅剩下:
- NIOS License(已指派)
- **Grid License**
- **Reporting subscription License**

:::warning
- **Reporting subscription 授權** 必須要在成功加入 Gid 後才能進行指派動作。

- 佈署 **Reporting Appliance** 時新增的 250GB 磁碟空間,未指定 NIOS 授權時無法正常顯示。

- 正確指派 NIOS 授權後,便會正常顯示 250GB 磁碟空間。

:::
:::danger
使用 **`reset all licenses`** 將會**清除數據庫、配置和網路設置**。並在重新恢復出廠預設值前**清除設備中的所有授權許可訊息**。
:::
## 後續配置
完成 Grid 授權後,使用瀏覽器連線 Grid Master 的 IP 位址,就會顯示下列畫面,請按照畫面逐步完成第一次設定。

:::warning
若沒有指派 Grid 授權,第一次登入 Infoblox 虛擬機,會顯示 **System Manager** 登入畫面,而非 **Grid Manager** 登入畫面。
<img width=480 src='https://hackmd.io/_uploads/ByLTPcVs3.png'>
:::
確認 EULA。

管理首頁。

完成 Grid Setup Wizard 設定。

:::warning
未指派 Grid 授權,則會出現 **NIOS Setup Wizard** 設定畫面。

:::
使用下面兩個 Infoblox WAPI 可以完成
- 在 Grid Master 上設定 Grid 成員紀錄。

- 在 Grid 成員上啟用加入 Grid 程序。

之後的配置等下次有時間再做整理吧,暫時告一段落囉!
:::warning
- 建立 Grid 及加入成員步驟,初步可用 **Infoblox WAPI** 來達成,但是完成度還不高,暫時就不分享了。
- RPZ 相關設定應該也可以用 Infoblox WAPI 達成?只是這方面的資訊很少,研讀及測試成本過高,不過對於之後要自動化佈署及建置環境應該是還蠻有助益的。
- :construction: [使用 OVFTools 及 API 建置 Infoblox 基礎環境](https://hackmd.io/@farmer87/infoblox_poc_api_deployment)
:::
# 清理 POC 環境
如果測試完成,可以直接透過 **`govc vm.destroy {vm}`** 的方式,將佈署的虛擬機器直接暴力刪除!可以參考 [**cleanPoc.sh**](#cleanPocsh) 程式範本達成。
執行命令輕鬆整理環境。

還給同事一個新的測試環境。

# 附錄
## setupPoc.sh
```bash
#!/bin/bash
#
function initPoc() {
echo -e "\n[TASK] Initial POC Environment"
## nios ova
nios_ova_basePath='/home/richard/Projects/infoblox/nios_ova'
nios_ova_file="nios-8.6.3-51135-1241097029df-2023-06-23-03-50-26-ddi.ova"
source_lactor="${nios_ova_basePath}/${nios_ova_file}"
## deployment
diskmode='thin'
portgroup='VM Network'
## infoblox grid master
ib_gm_vmname="TE-V1425"
ib_gm_deployment_option='1425'
## infoblox reporting
ib_reporting_vmname="TR-V5005"
ib_reporting_deployment_option='otherModel'
## 250GB vdisk for reporting
disk_name='disk-1000-1'
disk_size='250G'
## ESXi info
esxi_user='root'
esxi_pass='VMware1!VMware1!'
esxi_ip='10.7.155.13'
esxi_datacenter='ha-datacenter'
esxi_datastore='datastore1'
target_locator="$(urlencode ${esxi_user}):$(urlencode ${esxi_pass})@${esxi_ip}"
datacenter='ha-datacenter'
datastore='datastore1'
}
function initGovc () {
echo -e "\n[TASK] Initial GOVC Environment"
export GOVC_URL="https://${esxi_ip}"
export GOVC_USERNAME="${esxi_user}"
export GOVC_PASSWORD="${esxi_pass}"
export GOVC_INSECURE="true"
export GOVC_DATACENTER="${esxi_datacenter}"
export GOVC_DATASTORE="${esxi_datastore}"
}
function deployVm () {
vmName=${1}
deployOption=${2}
echo -e "\n[TASK] Deploying Infoblox VM \"${vmName}\""
/usr/bin/ovftool \
--acceptAllEulas \
--allowExtraConfig \
--noSSLVerify \
--skipManifestCheck \
--X:disableHostnameResolve \
--X:ignoreLinkLocalIp \
--X:injectOvfEnv \
--parallelThreads=22 \
--name="${vmName}" \
--datastore="${datastore}" \
--diskMode="${diskmode}" \
--net:"VM Network"="${portgroup}" \
--deploymentOption="${deployOption}" \
"${source_lactor}" \
vi://"${target_locator}"
}
function addDisk () {
vmName=${1}
echo -e "\n[TASK] Create 250GB vDisk and attach to VM \"${vmName}\""
govc vm.disk.create -vm ${vmName} -name ${vmName}/${disk_name} -size ${disk_size}
}
function powerOn () {
vmName=${1}
echo -e "\n[TASK] Power on VM \"${vmName}\""
govc vm.power -on ${vmName}
}
## initial POC & GOVC environment
initPoc
initGovc
## deploy infoblox grid master
deployVm ${ib_gm_vmname} ${ib_gm_deployment_option}
## deploy infoblox reporting
deployVm ${ib_reporting_vmname} ${ib_reporting_deployment_option}
## create 250GB disk for infoblox reporting
addDisk ${ib_reporting_vmname}
sleep 10
## power on VM(s)
powerOn ${ib_gm_vmname}
powerOn ${ib_reporting_vmname}
```
## cleanPoc.sh
```bash
#!/bin/bash
#
function initGovc () {
echo -e "\n[TASK] Initial GOVC Environment"
export GOVC_URL="https://${esxi_ip}"
export GOVC_USERNAME="${esxi_user}"
export GOVC_PASSWORD="${esxi_pass}"
export GOVC_INSECURE="true"
export GOVC_DATACENTER="${esxi_datacenter}"
export GOVC_DATASTORE="${esxi_datastore}"
}
function destroyVm () {
vmName=${1}
echo -e "\n[TASK] Power Off and destroy Infoblox VM \"${vmName}\""
if govc find / -type m | grep ${vmName}; then
echo -e " > Deleteing ......"
govc vm.destroy ${vmName}
else
echo -e " > VM \"${vmName}\" NOT FOUND"
fi
}
## ESXi info
esxi_ip='10.7.155.13'
esxi_user='root'
esxi_pass='VMware1!VMware1!'
esxi_datacenter='ha-datacenter'
esxi_datastore='datastore1'
## infoblox vm info
ib_gm_vmname="TE-V1425"
ib_reporting_vmname="TR-V5005"
## init govc
initGovc
## delete infoblox poc environment
destroyVm ${ib_gm_vmname}
destroyVm ${ib_reporting_vmname}
```
## 修改 ESXi 管理 IP
使用 DCUI 命令進行修改。
首先用 SSH 連線至 ESXi 管理介面,並輸入 **`dcui`** 命令進行 **Direct Console 使用者介面**。

按下 **F2** 調整組態。

輸入管理者驗證資訊,按下 **`Enter`** 登入。





