Trong các hệ thống doanh nghiệp lớn, bạn có thể sẽ sử dụng các chương trình khác nhau cho từng dịch vụ mạng mà chúng ta đã đề cập trong mô-đun này. Tuy nhiên, với các hệ thống nhỏ hơn, việc tập trung tất cả các dịch vụ vào một giải pháp duy nhất có thể là lựa chọn tốt hơn. Hãy cùng tìm hiểu về dnsmasq, một chương trình cung cấp các dịch vụ DNS, DHCP, TFTP và PXE trong một gói đơn giản. Điều này sẽ cho phép chúng ta thực hành cấu hình các dịch vụ này một cách trực quan, mặc dù nó không phức tạp như các giải pháp mạng khác.
Đầu tiên, chúng ta sẽ cài đặt dnsmasq trên máy này. Tôi sẽ gõ lệnh sudo apt install dnsmasq.
Sau khi cài đặt dnsmasq, nó sẽ được kích hoạt ngay lập tức với các chức năng cơ bản nhất. Nó cung cấp bộ nhớ đệm cho các truy vấn DNS. Điều này có nghĩa là bạn có thể gửi yêu cầu DNS đến nó và nó sẽ ghi nhớ các câu trả lời, do đó máy tính của bạn không cần phải hỏi máy chủ DNS bên ngoài mỗi khi bạn thực hiện truy vấn. Để kiểm tra chức năng này, chúng ta sẽ sử dụng lệnh dig, cho phép chúng ta truy vấn các dịch vụ DNS và xem câu trả lời của chúng.
Hãy thử hỏi máy chủ DNS đang chạy trên localhost về địa chỉ của www.example.com. Chúng ta thực hiện việc này bằng cách chạy lệnh dig www.example.com @localhost. Phần sau dấu @ cho biết máy chủ DNS mà chúng ta muốn sử dụng.
Đây là câu trả lời từ truy vấn của chúng ta. Máy chủ DNS của chúng ta đang cho chúng ta biết địa chỉ IP cho tên miền example.com. Làm thế nào để biết được truy vấn này thực sự được trả lời bởi dịch vụ mà máy đang chạy? Chúng ta có thể chạy dịch vụ ở chế độ debug để có thêm thông tin về những gì đang diễn ra. Đây không phải là cách bạn thường chạy dịch vụ, nhưng nó hữu ích để hiểu rõ hơn về quy trình hoạt động.
Hãy dừng dịch vụ dnsmasq đang chạy và khởi động lại nó ở chế độ debug. Bây giờ, tôi sẽ gõ lệnh sudo service dnsmasq stop rồi gõ sudo dnsmasq -d -q. Bằng cách thêm -d và -q, chúng ta đang yêu cầu dnsmasq chạy ở chế độ debug và ghi lại các truy vấn mà chúng ta thực hiện. Khi khởi động, nó sẽ in ra các tùy chọn biên dịch được bật và các tệp cấu hình được sử dụng.
Bây giờ, chúng ta có thể truy vấn lại bằng lệnh dig. Nếu chúng ta chạy lại lệnh, chúng ta sẽ nhận được câu trả lời tương tự và sẽ thấy đầu ra debug trong console của dnsmasq.
Trên console thứ hai, bây giờ tôi sẽ gõ dig www.example.com @localhost. Điều này cho thấy dịch vụ dnsmasq của chúng ta đã nhận được truy vấn, chuyển tiếp nó đến máy chủ DNS đã được cấu hình và sau đó trả lời cho máy tính ban đầu. Nếu chúng ta truy vấn lại cùng một tên máy chủ, chúng ta sẽ thấy rằng thay vì hỏi máy chủ DNS khác, dnsmasq sẽ trả lời bằng truy vấn được lưu trong bộ nhớ cache.
Trên console thứ hai, tôi sẽ gõ lại dig www.example.com @localhost.
Hiện tại, dnsmasq đang hoạt động như một máy chủ DNS lưu trữ đơn giản, nhưng chúng ta có thể làm cho nó làm được nhiều hơn thế. Ví dụ: chúng ta có thể cung cấp cho nó một danh sách các tên máy chủ và địa chỉ IP, và để dịch vụ này đưa ra câu trả lời chính xác cho chúng.
Bạn có thể nhớ rằng khi cố gắng phân giải một tên máy chủ thành một địa chỉ IP, có thể có các dịch vụ lưu trữ thông tin về các ánh xạ này, sau đó có thể cung cấp câu trả lời chính xác, trong khi các máy chủ khác sẽ chỉ có thể chuyển tiếp và ủy quyền các truy vấn đến máy chủ có thông tin. Các tệp này có cùng định dạng với tệp /etc/hosts.
Tôi đã tạo tệp này liệt kê các máy chủ nội bộ mà tôi muốn có thể phân giải. Hãy gõ lệnh cat myhosts. Như bạn thấy, đó là một định dạng rất đơn giản. Bạn chỉ cần liệt kê địa chỉ IP nào được liên kết với mỗi máy chủ.
Chúng ta sử dụng tham số -H để báo cho dnsmasq rằng chúng ta muốn đưa danh sách này vào thông tin được phục vụ. Tôi sẽ hủy bỏ thao tác này, xóa màn hình và gõ sudo dnsmasq -d -q -H myhosts.
Bây giờ chúng ta đã tải danh sách máy chủ của mình, hãy truy vấn bằng dig. Trên console thứ hai, tôi sẽ gõ dig oxygen.local @localhost. Vì dnsmasq là nguồn xác thực về máy chủ này, nên không có ai để chuyển tiếp câu hỏi. Nó cũng liệt kê tệp nào đang được sử dụng để lấy thông tin, đó là myhosts.
Cuối cùng, hãy xem đầu ra trông như thế nào khi chúng ta yêu cầu thông tin mà nó không có. Tôi sẽ gõ dig hydrogen.local @localhost. Chúng ta thấy rằng nó đã trả lời rằng các máy chủ xác thực hoặc máy chủ gốc, nhưng nó không thể tìm thấy bất kỳ kết quả nào. Vậy dnsmasq đang chạy nói gì?
Vì tên được yêu cầu không có trong danh sách máy chủ mà máy chủ DNS của chúng ta biết, nên nó chuyển tiếp truy vấn đến máy chủ DNS đã được cấu hình. Câu trả lời cho đó là NXDOMAIN, có nghĩa là tên miền không tồn tại.
Mặc dù dnsmasq rất đơn giản, nhưng giờ bạn đã thấy một máy chủ DNS hoạt động như thế nào. Thật tuyệt!
Chúng ta đã biết cách sử dụng dnsmasq để phục vụ các truy vấn DNS. Nhưng như đã đề cập trước đó, dnsmasq cũng có thể được sử dụng cho các dịch vụ mạng khác. Hãy cùng xem cách sử dụng nó như một máy chủ DHCP.
Một máy chủ DHCP thường được thiết lập trên một máy hoặc thiết bị có địa chỉ IP tĩnh được cấu hình cho giao diện mạng đang được sử dụng để phục vụ các truy vấn DHCP. Giao diện đó sau đó được kết nối với mạng vật lý mà bạn muốn cấu hình thông qua DHCP, có thể có bất kỳ số lượng máy nào trên đó. Trong thực tế, máy chủ DHCP và máy khách DHCP thường chạy trên hai máy riêng biệt. Nhưng đối với ví dụ này, chúng ta sẽ thực hiện mô phỏng trên một máy.
Trên máy này, chúng ta có một giao diện có tên là eth_srv. Hãy cấu hình nó thành giao diện máy chủ DHCP. Bây giờ, tôi sẽ gõ lệnh ip address show eth_srv. Lệnh này cho chúng ta thấy rằng giao diện này có địa chỉ IP 192.168.1.1. Phần /24 cho biết IP này nằm trong một mạng từ 192.168.1.0 đến 192.168.1.255. Giao diện này cũng có cấu hình địa chỉ IPv6, nhưng chúng ta sẽ không đi sâu vào IPv6 trong ví dụ này.
Chúng ta cũng có một giao diện có tên là eth_cli, là giao diện mà chúng ta sẽ sử dụng để mô phỏng một máy khách yêu cầu địa chỉ bằng DHCP. Giao diện này chưa được cấu hình IP. Tôi sẽ gõ lệnh ip address show eth_cli. Chúng ta có thể thấy rằng giao diện này chưa được cấu hình địa chỉ IPv4. Chúng ta sẽ thay đổi điều này bằng cách sử dụng máy chủ DHCP của mình.
Để thực hiện việc này, chúng ta cần cung cấp cấu hình bổ sung cho dnsmasq. Có rất nhiều thứ chúng ta có thể cấu hình. Chúng ta sẽ sử dụng một tập hợp các tùy chọn rất cơ bản. Hãy xem tệp cấu hình. Tôi sẽ gõ lệnh cat dhcp.config.
Tùy chọn interface cho dnsmasq biết rằng nó nên lắng nghe các truy vấn DHCP trên giao diện eth_srv. Tùy chọn bind-interfaces yêu cầu nó không lắng nghe trên bất kỳ giao diện nào khác cho bất kỳ truy vấn nào. Điều này cho phép chúng ta có nhiều máy chủ dnsmasq chạy đồng thời, mỗi máy chủ trên giao diện riêng của nó.
Tùy chọn domain cho máy khách biết tên miền của mạng và sẽ được sử dụng để truy vấn tên máy chủ. Sau đó, chúng ta có hai tùy chọn DHCP khác nhau, là thông tin bổ sung sẽ được truyền đến máy khách DHCP khi IP được gán. Trong trường hợp này, chúng ta đang cho máy khách biết phải cấu hình gì làm cổng mặc định và nên sử dụng máy chủ DNS nào. Có rất nhiều tùy chọn khác mà chúng ta có thể thiết lập, nhưng hai tùy chọn này là phổ biến nhất.
Cuối cùng, chúng ta cấu hình phạm vi DHCP. Đây là phạm vi địa chỉ IP mà máy chủ DHCP có thể xử lý. Tùy thuộc vào thiết lập cụ thể của bạn, bạn có thể muốn dành riêng một số địa chỉ trong mạng của mình cho các máy cần có địa chỉ tĩnh. Chúng ta không định làm điều đó, bạn có thể làm cho phạm vi lớn hơn, nhưng hãy đảm bảo rằng bạn không bao gồm địa chỉ của chính máy chủ DHCP.
Giá trị cuối cùng trong dòng phạm vi DHCP là thời lượng thuê cho địa chỉ IP. Trong trường hợp này, là 12 giờ, có nghĩa là sau khi một địa chỉ được gán cho một máy, nó sẽ được dành riêng cho máy đó trong 12 giờ đó. Nếu thời gian thuê hết hạn mà máy khách không gia hạn, thì địa chỉ có thể được gán cho một máy khác.
Chúng ta đã xem qua tệp cấu hình. Hãy yêu cầu dnsmasq bắt đầu lắng nghe các truy vấn bằng cách sử dụng cấu hình này. Bây giờ, tôi sẽ gõ lệnh sudo dnsmasq -d -q -c dhcp.config và sau đó nhấn "Enter."
Chúng ta có thể thấy trong đầu ra rằng dnsmasq đang lắng nghe các truy vấn DHCP trên giao diện eth_srv với các tùy chọn mà chúng ta đã thiết lập trong tệp cấu hình của mình. Bây giờ, hãy chạy một máy khách DHCP trên một thiết bị đầu cuối thứ hai. Tôi sẽ mở thiết bị đầu cuối thứ hai.
Trên thiết bị đầu cuối thứ hai của tôi, tôi sẽ gõ sudo dhclient -i eth_cli -v.
Chúng ta đang sử dụng dhclient, là một máy khách DHCP rất phổ biến trên Linux. Chúng ta đang yêu cầu nó chạy trên giao diện eth_cli và chúng ta đang sử dụng cờ -v để xem đầy đủ đầu ra của những gì đang xảy ra.
Quay lại khóa học mạng, chúng ta đã giải thích toàn bộ quá trình máy khách DHCP nhận được hợp đồng thuê DHCP. Ở đây chúng ta thấy các gói tin đang được trao đổi và cách máy khách của chúng ta nhận được địa chỉ IP 192.168.1.80. Chúng ta cũng thấy rằng máy khách DHCP dự kiến sẽ gia hạn địa chỉ trước khi hết hạn.
Hãy xem giao diện của chúng ta bây giờ trông như thế nào. Bây giờ tôi sẽ gõ lệnh ip address show eth_cli. Giao diện eth_cli của chúng ta đã nhận được địa chỉ IP thành công.
Bây giờ, hãy xem dnsmasq đã in gì khi yêu cầu được thực hiện. Chúng ta thấy sự trao đổi gói tin giống như chúng ta đã thấy từ phía máy khách. Nhưng dnsmasq cũng cho thấy rằng bây giờ nó biết tên máy chủ của máy có địa chỉ 192.168.1.80 vì dnsmasq cũng có khả năng DNS. Điều này có nghĩa là nó cũng sẽ cung cấp điều này như một câu trả lời xác thực cho các truy vấn cục bộ. Bây giờ tôi sẽ gõ lệnh dig @localhost instance-1.
Như vậy, chúng ta đã thấy cách dnsmasq có thể hoạt động không chỉ như một máy chủ DNS mà còn như một máy chủ DHCP. Thiết lập này là một mô phỏng để cho bạn thấy những gì bạn có thể làm với dnsmasq. Như đã đề cập trước đó, trong thực tế, bạn sẽ có điều này trên các máy riêng biệt, vật lý hoặc ảo. Nếu bạn muốn kiểm tra một thiết lập như thế này, thông thường bạn sẽ thực hiện điều đó trên một mạng riêng biệt với mạng sản xuất. Hãy nhớ rằng, không bao giờ thử nghiệm trong môi trường sản xuất.
Chúng ta đã đề cập đến rất nhiều thông tin trong mô-đun này. Bạn đã tìm hiểu về các dịch vụ tổng thể cần thiết trong cơ sở hạ tầng CNTT. Trên hết, bạn đã tìm hiểu về các dịch vụ cơ sở hạ tầng vật lý như truy cập từ xa và ảo hóa giúp tổ chức của bạn hoạt động hiệu quả hơn. Bạn thậm chí đã tìm hiểu về các dịch vụ mạng thiết yếu như DNS và DHCP, cùng với bức tranh tổng thể về những gì cần thiết để thiết lập DNS cho một tổ chức và lý do tại sao bạn muốn làm điều đó.
Trong các tổ chức lớn, bạn có thể cần các giải pháp riêng biệt để xử lý tất cả các nhu cầu mạng của mình. Tuy nhiên, với các tổ chức nhỏ hơn, việc sử dụng một chương trình "tất cả trong một" để xử lý các yêu cầu DNS và DHCP có thể là lựa chọn hiệu quả hơn. Tài liệu tham khảo sau đây trình bày cách sử dụng dnsmasq để kích hoạt tất cả các chức năng này, cũng như cú pháp và cách cài đặt và cấu hình Hệ thống tên miền (DNS) và máy chủ Giao thức cấu hình máy chủ động (DHCP) trên mạng cục bộ của bạn.