Kết nối dhcp server với client linux

Bài số 2: Làm việc với DHCP

Bài này yêu cầu thiết lập cơ chế gán địa chỉ tự động cho các trạm bằng giao thức DHCP. Các bước thực hiện như sau:

  • Bước 1: Cài đặt và thiết lập cấu hình DHCP server
  • Bước 2: Thiết lập cấu hình DHCP client
  • Bước 3: Bắt gói tin để tìm hiểu cơ chế hoạt động của giao thức DHCP
  • Bước 4: Kịch bản tương tranh nhiều DHCP server

Bước 1: cài đặt & cấu hình DHCP server

DHCP server phổ biến trên hệ thống Linux là gói DHCP (phiên bản hiện tại là 4.1). Có thể dùng lệnh yum để tải về và cài đặt:

> yum install dhcp
Loaded plugins: fastestmirror
Setting up Install Process
Loading mirror speeds from cached hostfile
* base: mirror.rise.ph
* extras: mirror.pregi.net
* updates: mirror.rise.ph
base                                                     | 3.7 kB     00:00
extras                                                   | 2.9 kB     00:00
updates                                                  | 3.4 kB     00:00
Package 12:dhcp-4.1.1-49.P1.el6.centos.x86_64 already installed and latest version
Nothing to do
[root@mydomain ~]#

Cấu hình DHCP server được mô tả trong file /etc/dhcp/dhcpd.conf. DHCP server sẽ cũng cấp địa chỉ IP cho các máy trong cùng mạng vật lý của máy chủ. Trong cấu hình bên dưới, DHCP server sẽ cung cấp địa chỉ IP trong dải 192.168.2.10 đến 192.168.2.20 với cấu hình mạng 192.168.2.0/25. Như vậy, máy chủ DHCP này phải có 1 kết nối mạng vào mạng 192.168.2.0/25. Ngoài ra, nó cung cấp thêm địa chỉ Default Gateway là 192.168.2.1 và DNS server là 4.4.4.4 và 8.8.8.8.

> nano /etc/dhcp/dhcpd.conf

subnet 192.168.2.0 netmask 255.255.255.128 {
  range 192.168.2.10 192.168.2.20;

  default-lease-time 86400;
  max-lease-time 86400;

  option routers 192.168.1.1;
  option domain-name-servers 4.4.4.4,8.8.8.8;
}
			 

Bước 2: thiết lập DHCP client

Trên Windows, cấu hình địa chỉ IP động chỉ IP động thông qua các cửa sổ thiết lập cấu hình IP cho từng kết nối mạng.

Kết nối dhcp server với client linux
Kết nối dhcp server với client linux

Trên Linux, các card mạng cấu hình địa chỉ IP động được thiết lập bằng file cấu hình /etc/sysconfig/network-scripts/ifcfg-ethX trong đó ethX là tên của card mạng. Ví dụ:

> nano /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
BOOTPROTO=dhcp
ONBOOT=yes

Với cấu hình như trên, khi khởi động trạm làm việc, card mạng eth2 sẽ tự động thực hiện giao thức DHCP để tìm kiếm DHCP server trên mạng và xin cấp địa chỉ IP.

Bước 3: Tương tác DHCP client-server

Khởi động service DHCP trên máy chủ:

> service dhcpd restart
Shutting down dhcpd:                                       [  OK  ]
Starting dhcpd:                                            [  OK  ]

Trên máy client, có thể dùng lệnh dhclient -r để giải phóng IP đã được gán cho card mạng khi khởi động. Sau khi giải phóng địa chỉ IP, dùng ifconfig để hiển thị thông tin card mạng sẽ không thấy địa chỉ IP nào được gán cho card mạng này nữa. Tiếp theo, sử dụng lệnh dhclient -v để yêu cầu thiết lập lại địa chỉ IP và lại dụng ifconfig để xem cấu hình card mạng với địa chỉ IP vừa được gán. Để kiểm tra thông số Default Gateway, sử dụng lệnh route -n để xem bảng routing. Default Gateway được thiết lập (cho mạng 0.0.0.0) là 192.168.2.1.

[root@C1 ~]# dhclient -r eth2
[root@C1 ~]# ifconfig eth2
eth2      Link encap:Ethernet  HWaddr 08:00:27:D6:C1:02  
          inet6 addr: fec1::7/64 Scope:Site
          inet6 addr: fe80::a00:27ff:fed6:c102/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:63 errors:0 dropped:0 overruns:0 frame:0
          TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:5334 (5.2 KiB)  TX bytes:2380 (2.3 KiB)

[root@C1 ~]# dhclient -v eth2
Internet Systems Consortium DHCP Client 4.1.1-P1
Copyright 2004-2010 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/eth2/08:00:27:d6:c1:02
Sending on   LPF/eth2/08:00:27:d6:c1:02
Sending on   Socket/fallback
DHCPDISCOVER on eth2 to 255.255.255.255 port 67 interval 5 (xid=0x3ddd558b)
DHCPOFFER from 192.168.2.2
DHCPREQUEST on eth2 to 255.255.255.255 port 67 (xid=0x3ddd558b)
DHCPACK from 192.168.2.2 (xid=0x3ddd558b)
bound to 192.168.2.10 -- renewal in 41397 seconds.

[root@C1 ~]# ifconfig eth2
eth2      Link encap:Ethernet  HWaddr 08:00:27:D6:C1:02  
          inet addr:192.168.2.10  Bcast:192.168.2.127  Mask:255.255.255.128
          inet6 addr: fec1::7/64 Scope:Site
          inet6 addr: fe80::a00:27ff:fed6:c102/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:68 errors:0 dropped:0 overruns:0 frame:0
          TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:6198 (6.0 KiB)  TX bytes:3148 (3.0 KiB)

[root@C1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.2.1     0.0.0.0         UG    0      0        0 eth2
			 

Để bắt và phân tích gói tin DHCP, sử dụng file log của hệ thống Linux /etc/log/messages. Thực hiện chạy DHCP server và tiến hành giải phóng địa chỉ IP (dhclient -r) rồi cấp lại IP (dhclient -v) ở máy client như trên. Tại máy server, hiển thị thông tin log (lọc theo DHCP):

> tail -f /var/log/messages | grep DHCP
Jan 11 03:23:59 mydomain dhcpd: DHCPRELEASE of 192.168.2.10 from 08:00:27:56:81:0c via eth2 (found)

Jan 11 03:24:04 mydomain dhcpd: DHCPDISCOVER from 08:00:27:56:81:0c via eth2
Jan 11 03:24:05 mydomain dhcpd: DHCPOFFER on 192.168.2.10 to 08:00:27:56:81:0c via eth2
Jan 11 03:24:05 mydomain dhcpd: DHCPREQUEST for 192.168.2.10 (192.168.2.3) from 08:00:27:56:81:0c via eth2
Jan 11 03:24:05 mydomain dhcpd: DHCPACK on 192.168.2.10 to 08:00:27:56:81:0c via eth2

Chú ý rằng VirtualBox mặc định cũng thiết lập một máy chủ DHCP để tự động gán địa chỉ IP cho các máy ảo sử dụng card mạng kiểu Host-only. Có thể cấu hình DHCP của VirtualBox thông qua menu File/Preference… và chọn mục Network.

Cũng trong mạng LAN hiện tại, thiết lập thêm một DHCP server tại địa chỉ IP 192.168.2.5 với các thông số sau:

[root@hack ~]# cat /etc/dhcp/dhcpd.conf 
#
# DHCP Server Configuration file.
#   see /usr/share/doc/dhcp*/dhcpd.conf.sample
#   see 'man 5 dhcpd.conf'
#
subnet 192.168.2.0 netmask 255.255.255.128 {
  range 192.168.2.40 192.168.2.50;

  default-lease-time 86400;
  max-lease-time 86400;

  option routers 192.168.2.13;
  option domain-name-servers 1.2.3.4;
}

[root@C0 ~]# service dhcpd start
Starting dhcpd:                                            [  OK  ]
			 

Có thể thấy DHCP server này cũng cung cấp dải địa chỉ IP trong mạng 192.168.2.0/25 nhưng gán các thông số Default Gateway và DNS Server khác với DHCP server trước. Khởi động cả hai DHCP server này và kết nối một DHCP Client vào mạng:

[root@C1 ~]# dhclient -r eth2
[root@C1 ~]# dhclient -v eth2
Internet Systems Consortium DHCP Client 4.1.1-P1
Copyright 2004-2010 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/eth2/08:00:27:d6:c1:02
Sending on   LPF/eth2/08:00:27:d6:c1:02
Sending on   Socket/fallback
DHCPDISCOVER on eth2 to 255.255.255.255 port 67 interval 7 (xid=0x3072be37)
DHCPOFFER from 192.168.2.5
DHCPREQUEST on eth2 to 255.255.255.255 port 67 (xid=0x3072be37)
DHCPACK from 192.168.2.5 (xid=0x3072be37)
bound to 192.168.2.40 -- renewal in 39348 seconds.

[root@C1 ~]# ifconfig eth2
eth2      Link encap:Ethernet  HWaddr 08:00:27:D6:C1:02  
          inet addr:192.168.2.40  Bcast:192.168.2.127  Mask:255.255.255.128
          inet6 addr: fec1::7/64 Scope:Site
          inet6 addr: fe80::a00:27ff:fed6:c102/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:68 errors:0 dropped:0 overruns:0 frame:0
          TX packets:24 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:6198 (6.0 KiB)  TX bytes:3148 (3.0 KiB)

[root@C1 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.2.13     0.0.0.0         UG    0      0        0 eth2
			 

Nhìn vào thông tin hiển thị log khi máy trạm nhận địa chỉ IP có thể thấy, một cách ngẫu nhiên, máy trạm nhận lời mời của DHCP server mới (thay vì sử dụng DHCP server cũ) và được gán địa chỉ IP cùng với các thông số cấu hình theo server này. Đây là điểm yếu của giao thức DHCP cho phép hacker đột nhập vào một trạm trong mạng và tự tạo ra DHCP server với cấu hình Gateway, DNS giả mạo để ăn cắp các thông tin người dùng trên mạng.