跳到主要內容

IPv6 系列(五):KEA DHCP SERVER

學校在純 IPv4 的環境時,採用 ISC-DHCP Server 來發放教學區域的私有 IP(10.10.xxx.xxx),並使用閘道 Fortigate 作 NAT 連接到 Internet。

採用 IPv6 後,原本是要使用 ISC-DHCPv6 來作為 IPv6 發放,結果 ISC-DHCPv6 架不起來。不過在查詢 DHCPv6 的過程中,發現 ISC(Internet System Consortium)已開發出下一代的 DHCP Server:Kea Dhcp Server。


Kea Dhcp Server 官網:https://www.isc.org/kea/

摘錄 https://www.itread01.com/content/1548712273.html 對 Kea DHCP Server 的介紹:
Kea DHCP Server 由 Internet Systems Consortium(ISC) 開發的開源 DHCPv4/DHCPv6 伺服器。Kea DHCP Server 是一個高效能的,可擴充套件的DHCP伺服器引擎。通過hooks library可以很容易的修改和擴充套件。
Kea包含的功能元件
keactrl — kea伺服器啟動,停止,配置重置和狀態查詢元件
kea-dhcp4 — DHCPv4伺服器程式,用於響應客戶端的DHCPv4查詢。
kea-dhcp6 — DHCPv6伺服器程式,用於響應客戶端的DHCPv6查詢。
kea-dhcp-ddns — DHCP動態DNS程式.這個程式在DHCP伺服器和DNS伺服器之間扮演者調解者。它接收來自DHCP伺服器域名更新請求和傳送DNS更新訊息給DNS伺服器。也就是說DDNS捕獲使用者每次變化的IP地址,然後將其與域名相對應,這樣其他上網使用者就可以通過域名來進行交流。而最終客戶所要記憶的全部,就是記住動態域名商給予的域名即可,而不用去管他們是如何實現的。
軟體執行環境
加密庫Botan或者OpenSSL
log4cplus 1.0.3+
如果有需要mysql,需要MySQL headers and libraries。可選(postgresql、cassandra類同)

選用 Kea DHCP Server 的原因,第一,提供 DHCPv4 和 DHCPv6,第二,可以使用資料庫儲存相關資訊,這樣子便可以多台 DHCP 伺服器共享同一發放資訊,所以目前將使用一台 Ubuntu 伺服器作為主要的 DCHP,而網頁/DNS 伺服器作為備援。

Kea DHCP 設定檔有三個:/etc/kea/kea-dhcp4.conf、kea-dhcp6.conf、kea-dhcp-ddns.conf,分別管理 DHCPv4、DHCPv6 和 DDNS(沒有用到)。

kea-dhcp4.conf 簡錄
{
"Dhcp4":
{
  "interfaces-config": {
    "interfaces": ["*"]
  },
  "lease-database": {
"host": "xxxx",
        "type": "mysql",
"name": "xxxx",
"user": "xxxx",
"password": "xxxx"
  },
  
  "expired-leases-processing": {
    "reclaim-timer-wait-time": 10,
    "flush-reclaimed-timer-wait-time": 25,
    "hold-reclaimed-time": 7200,
    "max-reclaim-leases": 100,
    "max-reclaim-time": 250,
    "unwarned-reclaim-cycles": 5
  },
  "valid-lifetime": 14400,
  "subnet4": [
  {    "subnet": "10.10.10.0/24",
       "pools": [ { "pool": "10.10.10.100 - 10.10.10.200" } ], 
   "option-data": [{
                "name": "domain-name-servers",
                "data": "1.1.1.3, 120.96.252.40"
            }, {
                "name": "routers",
                "data": "10.10.10.254"
            }],
"reservations": [
            {
                "hw-address": "00:14:fd:1a:79:71",
                "ip-address": "10.10.10.10",
"hostname": "a5-nas-N2810PRO"
            },
……
           {
                "hw-address": "ac:84:c6:71:ef:0d",
                "ip-address": "10.10.10.111",
"hostname": "tplink-ac1200"
            }
]
   }     
  ]
},

"option-data": [
        {
           "name": "domain-name-servers",
           "data": "1.1.1.3, 120.96.252.40, 8.8.8.8",
           "always-send": true
        }
],
"Logging":
{
  "loggers": [
    {
      "name": "kea-dhcp4",
      "output_options": [
          {
            "output": "/var/log/kea-dhcp4.log"
          }
      ],
      "severity": "ERROR",
      "debuglevel": 0
    },
  ]
}
}

kea-dhcp6.conf 簡錄:
{
"Dhcp6":
{
  "interfaces-config": {
    "interfaces": ["p2p1/2001:288:102b:a4::12"]
  },
  "lease-database": {
    "type": "mysql",
"host": "xxxx",
"name": "xxxx",
"user": "xxxx",
"password": "xxxx"
},
  "expired-leases-processing": {
    "reclaim-timer-wait-time": 10,
    "flush-reclaimed-timer-wait-time": 25,
    "hold-reclaimed-time": 7200,
    "max-reclaim-leases": 100,
    "max-reclaim-time": 250,
    "unwarned-reclaim-cycles": 5
  },
  "preferred-lifetime": 3000,
  "valid-lifetime": 14400,
  "renew-timer": 1000,
  "rebind-timer": 2000,
  "subnet6": [
  {    "subnet": "2001:288:102b:a4::/64",
       "pools": [ { "pool": "2001:288:102b:a4:1::1-2001:288:102b:a4:1::ffff" } ],
"option-data": [{
                "name": "dns-servers",
                "data": "2606:4700:4700::1113, 2001:288:102b::120:96:252:40, 2001:4860:4860::8888"
            }]
},
  ……
  {    "subnet": "2001:288:102b:bb20::/64",
       "pools": [ { "pool": "2001:288:102b:bb20:1::1-2001:288:102b:bb20:1::ffff" } ],
"option-data": [{
                "name": "dns-servers",
                "data": "2606:4700:4700::1113, 2001:288:102b::120:96:252:40, 2001:4860:4860::8888"
            }]
}
   ]
},

"option-data": [
        {
           "name": "dns-servers",
           "data": "2606:4700:4700::1113, 2001:288:102b::120:96:252:40, 2001:4860:4860::8888",
           "always-send": true
        }
],
"Logging":
{
  "loggers": [
    {
      "name": "kea-dhcp6",
      "output_options": [
          {
            "output": "/var/log/kea-dhcp6.log"
          }
      ],
      "severity": "ERROR",
      "debuglevel": 0
    },
  ]
}

}


而以往使用 Webmin 來觀察 ISC-DHCP 發放情形,現在因為採用資料庫系統來儲存,可以自己寫 PHP 來列表:




參考資料:



留言

這個網誌中的熱門文章

Arudino 教學(三):多顆 LEDs

本次實作將加深 LED 電路,練習多顆 LEDs 與共地線電路,並使用 Arduino Uno 進行控制。另外, 本次實作每個同學需要抄寫「實作目的」、「線路說明」、「程式說明」與「進階」作為實作報告。 實作目的: 熟悉多顆 LEDs 與共地線電路接線 使用 Arduino 程式進行多顆 LEDs 控制 電路圖: 線路說明: LEDs 負極(短腳)共同連接在一起,再接至 Arduino GND(接地)腳位 LEDs 正極(長腳)先連接一220Ω 電阻之後,再分別連接至 Arduino 10 號與 11號腳位 程式截圖: 程式說明: 在 setup 區塊中,利用 pinMode 設定 10 腳位為輸出用途,設定 11 腳位為輸出用途 在 loop 區域中,利用 digitalWrite 送出 HIGH 點亮  LED,LOW 關閉 LED 燈,其中 10 號腳位 HIGH 時,11號腳位則為 LOW,反之亦然 delay(1000) 延遲一秒 進階: 改變延遲時間 增加閃動變化 增加 LED 的數量

SSH Tunnel(Port Forwarding)的應用

自己在管理伺服器和防火牆原則是最小開放原則,一定需要的服務 port 才會開放,例如網頁伺服器的 80、443 等。而管理用的 ssh ,可以的話就限縮來源 IP 範圍,加上限制可以登入的帳號或群組,要不然就改 port 編號;不過,改 port 編號會變成自己在遠端登入時要回想是改成多少,有點不是很方便。 所以最近建置的伺服器就不改 port 了,會加上 fail2ban 的防衛機制。 因為最小開放原則,像是 webmin(10000)這樣的 port 就不會開放,如果想要用的話,就用 ssh tunnel 方式作跳板連接。 例如伺服器的 public ip:123.123.123.123,要連 webmin 的話,就用: ssh 123.123.123.123 -L 10000:127.0.0.1:10000 SSH 登入後就會在客戶端開啟 127.0.0.1:10000 的監聽埠,用瀏覽器連本機的 127.0.0.1:10000 就會跳到伺服器端的 10000 埠。 一直以來,我都以為 ssh -L (Local Port Forwarding)方式只會在本機端綁定 127.0.0.1:xxxx的情形。不過,最近因為要解決一個臨時伺服器的設定問題,才發現原來不是只能綁在 127.0.0.1 上。 網路架構: 外部 public ip:123.123.123.0/24 內部 private ip:10.1.0.0/16 內部切出多個 class C的網路區域,其中 10.1.1.0/24 是 ServerZone,在外面用 DNAT 的方式將服務要求導入內部的伺服器。 其他 10.1.n.0/24 是各個區域內容IP,只能 NAT 出去,外部不能訪問到。 需求: Server-01:10.1.1.2,Server-02:10.1.20.2 Server-01在 ServerZone 內,從外部可以訪問,Server-02 在 PrivateZone 內,外部連不到。ServerZone 和 PrivateZone 彼此可以 SSH 互連。 現在希望可以在不變動兩台 Server 的 IP 區域,讓 Server-02可以被外部訪問到。 最簡單的方式就是先登 Server-01後,再從 Server-01 terminal 登到 Server-02上。但是需求是,...