Cấu hình DHCP trên Centos 7

Cấu hình DHCP trên Centos 7

I. Cấu hình căn bản DHCP

Dynamic Host Configuration Protocol (DHCP) là một network protocol có chức năng tự động cung cấp các thông số TCP/IP (Địa chỉ IP, gateway, DNS Server,...) cho các máy client

Điểm mạnh của DHCP là giúp ta cấu hình địa chỉ IP của hàng loạt các máy client chỉ bằng việc thay đổi cấu hình file config. Thay đổi sẽ có hiệu lực khi restart mạng hoặc reboot các máy client

1. Cài đặt DHCP

Kiểm tra xem DHCP đã được cài đặt trên server hay chưa:

# rpm -q dhcp

Cài đặt DHCP:

# yum install dhcp

2. File cấu hình

File cấu hình dhcp nằm tại:

/etc/dhcp/dhcpd.conf

File cấu hình ban đầu sẽ không có thông số cấu hình nên ta copy file mẫu và chỉnh sửa theo nhu cầu:

# cp /usr/share/doc/dhcp-<version>/dhcpd.conf.example /etc/dhcp/dhcpd.conf

Chỉnh sửa file cấu hình DHCP:

# vi /etc/dhcp/dhcpd.conf

Sau khi chỉnh sửa, restart DHCP để các thay đổi có hiệu lực:

# systemctl restart dhcpd

Khởi động/kết thúc dịch vụ DHCP:

# systemctl [start] [stop] dhcpd

Xem trạng thái dịch vụ và thông báo lỗi của DHCP:

# systemctl status dhcpd

2.1. Khai báo subnet

subnet 192.168.1.0 netmask 255.255.255.0 {
         option routers                  192.168.1.254; # địa chỉ gateway
         option subnet-mask              255.255.255.0; # subnet mask gateway
         option domain-name              "yourhost.com"; # tên domain
         option domain-name-servers     192.168.1.1; # địa chỉ DNS Server
         option time-offset              -18000;     # Eastern Standard Time
         range 192.168.1.10 192.168.1.100; # miền IP được gán tự động cho client
}

2.2. Khai báo shared-network

Các subnet có chung một mạng vật lý nên được cấu hình nằm trong một shared-network. Các tham số nằm trong shared-network nhưng nằm ngoài subnet gọi là các tham số global (tức tham số global được gán cho các subnet này)

shared-network name {

    # các tham số chung cho cả hai subnet
    option domain-name              "test.redhat.com";
    option domain-name-servers      ns1.redhat.com, ns2.redhat.com;
    option routers                  192.168.0.254;
   
    # hai subnet có chung mạng vật lý
    subnet 192.168.1.0 netmask 255.255.252.0 {
    # tham số riêng cho subnet 1.0
    range 192.168.1.1 192.168.1.254}
    
    subnet 192.168.2.0 netmask 255.255.252.0 {
    # tham số riêng cho subnet 2.0
    range 192.168.2.1 192.168.2.254;}
    
}

2.3. Khai báo range

Gán một miền địa chỉ IP cho các client một cách tự động. Có hai tham số về thời gian cần phải phân biệt:

  • max-lease-time: là thời gian tối đa mà một địa chỉ IP được lưu tại client trước khi bị DHCP thu hồi và gán cho client khác. VD: client yêu cầu lưu IP trong 2 ngày nhưng max-lease-time là 1 ngày thì IP gán cho client đó sẽ bị lấy lại sau 1 ngày.

  • default-lease-time: là thời hạn mặc định nếu các client không có yêu cầu về thời hạn IP được thu hồi.

default-lease-time 600;
max-lease-time 7200;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.1.255;
option routers 192.168.1.254;
option domain-name-servers 192.168.1.1, 192.168.1.2;
option domain-name "example.com";
subnet 192.168.1.0 netmask 255.255.255.0 {
   range 192.168.1.10 192.168.1.100;
}

2.4. Gán IP tĩnh cho hosts

Là thao tác gán địa chỉ IP nhất định cho 1 host thông qua địa chỉ MAC Address từ host đó.

host apex {
   option host-name "apex.example.com"; # tên host mà ta muốn gán cho host
   hardware ethernet 00:A0:78:8E:9E:AA;  #Địa chỉ MAC của host
   fixed-address 192.168.1.4; # địa chỉ IP tĩnh cho host
}

Lưu ý chọn địa chỉ IP nằm ngoài miền IP đã khai báo.

2.5. Khai báo group

Khai báo group khi ta muốn áp các tham số global cho các nhóm đặc biệt như: shared-network, subnets, hoặc hosts. VD dưới đây áp các tham số global cho 2 host.

group {
       option routers                  192.168.1.254;
       option subnet-mask              255.255.255.0;
       option domain-name              "example.com";
       option domain-name-servers       192.168.1.1;
       option time-offset              -18000;     # Eastern Standard Time
host apex {
       option host-name "apex.example.com";
       hardware ethernet 00:A0:78:8E:9E:AA; 
       fixed-address 192.168.1.4;
   }
host raleigh {
      option host-name "raleigh.example.com";
      hardware ethernet 00:A1:DD:74:C3:F2;
      fixed-address 192.168.1.6;
   }
}

3. Lease Database

Khi DHCP gán IP cho 1 client nào đó DHCP Server sẽ ghi nhận lại các IP mà nó đã gán cho các host vào lease database file, ta có thể xem chi tiết tại:

cat /var/lib/dhcpd/dhcpd.lease

** Lưu ý chung:**

  • Lease database sẽ được tái tạo lại thường xuyên để kích thước file không quá lớn.
  • Không tự ý xóa và tạo file mới. trước khi thay đổi nên tạo backup
  • Nếu khởi động dịch vụ DHCP thất bại, nguyên nhân có thể do file dhcpd.lease không tồn tại. Tạo file này bằng lệnh sau:
# touch /var/lib/dhcpd/dhcpd.lease
  • Trường hợp Server có nhiều network interfaces, một interface được cấu hình làm dhcp client nhận Public IP address để ra Internet, interface còn lại ta cấu hình (cho mạng nội bộ đứng sau firewall) nhận request từ local client bằng cách thêm dòng sau vào file dhcpd.conf:
DHCPDARGS=enp3s0 # enp3s0 là tên interface nhận request từ local client

II. DHCP Relay Agent

DHCP Relay Agent có nhiệm vụ nhận các DHCP request từ các client (nơi không có DHCP Server hay nằm cách xa DHCP Server) và chuyển tiếp các gói tin này cho DHCP Server để xử lý và sẽ reply bằng broadcast hay unicast đến subnet đã gửi các gói request. Mặc định DHCP Relay Agent sẽ lắng nghe trên tất cả các interface của nó trừ phi ta cấu hình lắng nghe trên một số interface nhất định như sau:

1. Cấu hình DHCPv4 Relay Agent

Copy file dhcrelay mẫu và chỉnh sửa theo nhu cầu:

# cp /lib/systemd/system/dhcrelay.service /etc/systemd/system/
# vi /etc/systemd/system/dhcrelay.service

Nhập địa chỉ IP của DHCP Server:

ExecStart=/usr/sbin/dhcrelay -d --no-pid 192.168.1.1

Khai báo interface mà DHCP Relay sẽ lắng nghe:

ExecStart=/usr/sbin/dhcrelay -d --no-pid 192.168.1.1 -i enp3s0

Khởi động lại DHCPv4 Relay:

# systemctl restart dhcrelay

2. Cấu hình DHCPv6 Relay Agent

Copy dhcrelay.service thành dhcrelay6 . service và chỉnh sữa =dưới quyền root:

cp /lib/systemd/system/dhcrelay.service /etc/systemd/system/dhcrelay6.service
vi /etc/systemd/system/dhcrelay6.service

Cấu hình lower interface (interface lắng nghe client) và upper interface (interface chuyển tiếp request cho DHCP Server)

ExecStart=/usr/sbin/dhcrelay - d  - -no-pid -6 -l enp2s0 - u enp3s0

Restart DHCPv6 Relay:

# systemctl restart dhcrelay6

III. Multihomed DHCP

Cấu hình multi subnet trên DHCP. Sau đây là file cấu hình mẫu với 2 subnet:

default-lease-time 600;
max-lease-time 7200;
subnet 10.0.0.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option routers 10.0.0.1;
range 10.0.0.5 10.0.0.15;
}
subnet 172.16.0.0 netmask 255.255.255.0 {
option subnet-mask 255.255.255.0;
option routers 172.16.0.1;
range 172.16.0.5 172.16.0.15;
}

1. Cấu hình 1 host vào nhiều mạng

Đây là trường hợp DHCP có 2 subnet nhưng chỉ có 1 host. Host này được cấu hình địa chỉ IP nằm trong miền IP của cả 2 subnet. Host mang IP của subnet nào tùy thuộc vào việc nó được kết nối vật lý tới mạng nào. Cấu hình này hữu ích trong trường hợp ta muốn thay đổi nhanh địa chỉ của 1 host về 1 subnet dự phòng.

default-lease-time 600;
max-lease-time 7200;
subnet 10.0.0.0 netmask 255.255.255.0
option subnet- mask 255.255.255.0
option routers 10.0.0.1;
range 10.0.0.5 10.0.0.15;
}
subnet 172.16.0.0 netmask 255.255.255.0
option subnet-mask 255.255.255.0
option routers 172.16.0.1;
range 172.16.0.5 172.16.0.15;

}
host example0 {
hardware ethernet 00: 1A: 6B: 6A: 2E: 0B;
fixed- address 10. 0. 0. 20;
}
host example1 {
hardware ethernet 00: 1A: 6B: 6A: 2E: 0B;
fixed- address 172. 16. 0. 20;
}

2. Cấu hình nhiều host vào 1 mạng

Trong một trường hợp khác. Ta có 2 network interface khác nhau của 2 host và được gán cùng 1 địa chỉ IP. Lưu ý là cấu hình sau không hiệu quả nếu cả 2 host cùng kết nối tới cùng một network. Cấu hình này ứng dụng trong trường hợp 1 host bị down thì ta chỉ việc kết nối host dự phòng vào mạng là host dự phòng sẽ mang địa chỉ IP của host bị down và thay thế nó.

host interface0 {
hardware ethernet 00: 1a: 6b: 6a: 2e: 0b;
fixed- address 10. 0. 0.18;
}

host interface1 {
hardware ethernet 00: 1A: 6B: 6A: 27: 3A;
fixed- address 10. 0. 0.18;
}

IV. DHCP for IPv6

DHCP hỗ trợ IPv6 kể từ khi version 4.x ra đời bao gồm DHCPv6 Server, Client và Relay Agent. Agent hỗ trợ IPv4 lẫn IPv6 nhưng chỉ có thể quản lý 1 giao thức tại 1 thời điểm nên ta cần khởi động 2 dhcp của 2 phiên bản 1 cách riêng biệt như sau:

# systemctl start dhcpd
# systemctl start dhcpd6

File cấu hình mẫu của DHCPv6 nằm tại

/usr/share/doc/dhcp-<version>/dhcpd6.conf.example

Copy file mẫu và tiến hành chỉnh sửa:

# cp /usr/share/doc/dhcp-<version>/dhcpd6.conf.example /etc/dhcp/dhcpd6.conf

File mẫu cấu hình DHCPv6 như sau:

subnet6 2001: db8: 0: 1: : /64 {
    range6 2001: db8: 0: 1: : 129 2001: db8: 0: 1: : 254;
    option dhcp6. name- servers fec0: 0: 0: 1: : 1;
    option dhcp6. domain- search " domain. example" ;
}