什麼是 OMAPI?在 linux 下預設的 DHCP 伺服器是由 ISC(Internet Software Consortium) 所開發維護的,而這個伺服器提供一個介面(api)來跟伺服器互動。例如可以查詢已經發出去的租賃 IP 的機器資訊或用MAC 查 IP 等等這些紀錄在 DHCP 伺服器內的資訊。
不曉得為什麼都找不到 OMAPI 的官方文件,只有看到這個 DHCP-API 。
他的 C library 在 dhcp-devel 這個 package 裡面 header 是 dhcpctl/dhcpctl.h,不知道為什麼又要叫做 OMAPI(Object Management Application Programming Interface),實在是找不到 ISC 官方文件。反而 wireshark 的協定介紹頁面看到比較完整的資訊。
client : 指令與函式庫
- omshell – 互動式的 shell 工具
- omcmd – 直接用指令下 omapi
- pypureomapi – 純 python 的 omapi 實作,wiki 有一個範例能直接跑(先把伺服器設好)。
- phpomshell – php 對 omshell 的 wrapper,只是找不到地方抓 src .. ?
流程(參考):
- 用 dnssec-keygen 產生 key
- 設定 dhcpd.conf 將 omapi 打開設定 key 並指定 port(7911)
- 打開防火牆
- 使用 client 透過 omapi 指定 key 與 action(delete/create/lookup) 操作 dhcp server 。
omcmd
透過 omcmd 當作 client 來測試,這邊的 key 用跟上面 pypureomapi 提供的一樣,透過 lookup 指定 ip 來查詢 mac address
# -s dhcp server ip -k keyname secret $ omcmd -k "defomapi" "+bFQtBCta6j2vWkjPkNFtgA==" -s 192.168.8.200 lookup lease ip-address=192.168.1.101 hardware-address 00:40:33:22:11:cc
dhcpstatus
加碼贈送,omapi 的查詢只能針對 ip 跟 mac,而且沒辦法列出所有的 lease,所以用在管理 lease 還可以,要做查詢等等的就有點小缺陷。因此如果要 list lease 只能靠 parse dhcpd.lease,就有專案在做這種事~
透過指令來檢視的範例:
[[email protected] ~]# dhcpstatus DHCP Subnet Information Subnet: 192.168.100.0 Netmask: 255.255.255.0 IP range: 192.168.100.1 - 192.168.100.254 Router: 192.168.100.1 IPs defined: 252 IPs used: 0 IPs free: 252 Subnet: 10.1.1.0 Netmask: 255.255.255.0 IP range: 10.1.1.1 - 10.1.1.254 IPs defined: 53 IPs used: 4 IPs free: 49 [[email protected] ~]# dhcpstatus -s 192.168.100.0 DHCP Subnet Information: Subnet: 192.168.100.0 Netmask: 255.255.255.0 Broadcast: Router: 192.168.100.1 DNS servers: 8.8.8.8 WINS servers: IP range: 192.168.100.1 - 192.168.100.254 IP address: 192.168.100.2 Lease status: FREE IP address: 192.168.100.3 Lease status: Active Lease start: 01/03/2012 02:14:39 Lease end: 01/03/2012 02:24:39 Mac address: 00:11:22:90:32:1a WINS name: ubuntu ..
註:
CentOS 5.x 目前的 dhcp 是 3.0.5 在 remove lease 的時候會寫說 not implemented,這篇文章說大於 3.0.6 …才有支援。實際測其實也沒有…?
主要用的到的 object 有分成 host 跟 lease,create host 、remove host 跟 modify lease 目前好像是已知可行的操作,對 lease 做 creating 或 removing 都會說是 not implemented 實際組成的元件有分成 libdhcpctl 跟 dhcpd 的 clinet and server。
根據文件 ISC DHCP API Interface 提到,The lease object corresponding to a lease can neither be created nor deleted using the API, but it can be fetched and modified。
links:
. automating-dhcp-management-with-omapi