DHCP OMAPI


  什麼是 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 .. ?

流程(參考):

  1. 用 dnssec-keygen 產生 key
  2. 設定 dhcpd.conf 將 omapi 打開設定 key 並指定 port(7911)
  3. 打開防火牆
  4. 使用 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,就有專案在做這種事~

dhcpstauts

透過指令來檢視的範例:

[root@192.168.100.1 ~]# 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

[root@192.168.100.1 ~]# 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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *