109.2 Bài 2
Chứng chỉ: |
LPIC-1 |
---|---|
Phiên bản: |
5.0 |
Chủ đề: |
109 Những yếu tố cơ bản về Mạng |
Mục tiêu: |
109.2 Cấu hình Mạng bền vững |
Bài: |
2 trên 2 |
Giới thiệu
Linux hỗ trợ hầu hết mọi công nghệ mạng được sử dụng để kết nối máy chủ, bộ chứa, máy ảo, máy tính và các thiết bị di động. Các kết nối giữa tất cả các nút mạng này có thể là các kết nối động và không đồng nhất, vì vậy mà chúng đòi hỏi một hệ thống quản lý thích hợp được cung cấp bởi hệ điều hành chạy bên trong.
Trước đây, các nhà phân phối đã phát triển các giải pháp tùy chỉnh của riêng họ để quản lý cơ sở hạ tầng mạng động. Ngày nay, các công cụ như NetworkManager và systemd đã cung cấp các tính năng tích hợp cao và toàn diện hơn để đáp ứng nhiều nhu cầu cụ thể.
NetworkManager
Hầu hết các bản phân phối Linux đều sử dụng trình nền dịch vụ NetworkManager để định cấu hình và kiểm soát các kết nối mạng của hệ thống. Mục đích của NetworkManager là làm cho cấu hình mạng trở nên đơn giản và tự động nhất có thể. Ví dụ: khi sử dụng DHCP, NetworkManager sẽ sắp xếp các thay đổi về tuyến, tìm nạp địa chỉ IP và cập nhật danh sách máy chủ DNS cục bộ nếu cần. Khi có cả kết nối có dây và không dây, NetworkManager sẽ ưu tiên kết nối có dây theo mặc định. NetworkManager, bất cứ khi nào có thể, sẽ cố gắng duy trì ít nhất một kết nối luôn hoạt động.
Note
|
Một yêu cầu sử dụng DHCP (Giao thức cấu hình máy chủ động) thường được gửi qua bộ điều hợp mạng ngay khi liên kết tới mạng được thiết lập. Sau đó, máy chủ DHCP đang hoạt động trên mạng sẽ phản hồi bằng các cài đặt (địa chỉ IP, mặt nạ mạng, tuyến mặc định, v.v.) mà người yêu cầu phải sử dụng để liên lạc qua giao thức IP. |
Theo mặc định, trình nền NetworkManager sẽ kiểm soát các giao diện mạng không được đề cập tới trong tệp /etc/network/interfaces
. Nó làm như vậy để không can thiệp vào các phương pháp cấu hình khác có thể có, từ đó chỉ sửa đổi các giao diện không được giám sát.
Dịch vụ NetworkManager chạy ở chế độ nền với quyền gốc và sẽ kích hoạt các hành động cần thiết để duy trì hệ thống trực tuyến. Người dùng thông thường có thể tạo và sửa đổi các kết nối mạng với các ứng dụng khách; dù bản thân họ không có quyền gốc nhưng họ vẫn sẽ có khả năng giao tiếp với dịch vụ cơ bản để thực hiện các hành động được yêu cầu.
Các ứng dụng khách dành cho NetworkManager có sẵn cho cả dòng lệnh và môi trường đồ họa. Đối với môi trường đồ hoạ, ứng dụng khách sẽ xuất hiện dưới dạng một chương trình phụ trợ của môi trường máy tính (dưới các tên như nm-tray, network-manager-gnome, nm-applet hoặc plasma-nm) và nó thường có thể được truy cập thông qua một biểu tượng ở góc của thanh máy tính hoặc từ tiện ích cấu hình hệ thống.
Trong dòng lệnh, bản thân NetworkManager sẽ tự cung cấp hai chương trình máy khách là nmcli
và nmtui
. Cả hai chương trình này đều có các tính năng cơ bản giống nhau, nhưng nmtui
có giao diện dựa trên thư viện lập trình curses, trong khi nmcli
lại là một lệnh toàn diện hơn cũng có thể được sử dụng trong tệp lệnh. Lệnh nmcli
sẽ chia tất cả các đặc tính liên quan đến mạng do NetworkManager kiểm soát thành các danh mục được gọi là đối tượng (objects):
general
-
Trạng thái và các hoạt động tổng quát của NetworkManager.
networking
-
Kiểm soát mạng tổng thể.
radio
-
Bộ chuyển mạch vô tuyến của NetworkManager.
connection
-
Các kết nối của NetworkManager.
device
-
Các thiết bị được quản lý bởi NetworkManager.
agent
-
Tác nhân bí mật hoặc tác nhân polkit của NetworkManager.
monitor
-
Giám sát các thay đổi của NetworkManager.
Tên đối tượng là đối số chính của lệnh nmcli
. Ví dụ: để hiển thị trạng thái kết nối tổng thể của hệ thống, đối tượng general
phải được đưa ra làm đối số:
$ nmcli general STATE CONNECTIVITY WIFI-HW WIFI WWAN-HW WWAN connected full enabled enabled enabled enabled
Cột STATE
sẽ cho biết hệ thống có được kết nối với mạng hay không. Nếu kết nối bị hạn chế do cấu hình sai từ bên ngoài hoặc hạn chế truy cập thì cột CONNECTIVITY
sẽ không báo cáo trạng thái kết nối là full
. Nếu Portal
xuất hiện trong cột CONNECTIVITY
thì tức là cần phải có các bước xác thực bổ sung (thường thông qua trình duyệt web) để hoàn tất quá trình kết nối. Các cột còn lại sẽ báo cáo trạng thái của các kết nối không dây (nếu có), WIFI
hoặc WWAN
(Mạng diện rộng không dây - tức mạng di động). Hậu tố HW
cho biết trạng thái tương ứng với thiết bị mạng chứ không phải kết nối mạng hệ thống - tức phần cứng đang được kích hoạt hay vô hiệu hoá để tiết kiệm điện.
Ngoài đối số đối tượng, nmcli
cũng cần một đối số lệnh để thực thi. Lệnh status
sẽ được sử dụng theo mặc định nếu không có đối số lệnh nào, do đó nên lệnh nmcli General
thực sự nên được hiểu là nmcli General status
.
Chúng ta hầu như không cần thực hiện bất kỳ một hành động nào khi bộ điều hợp mạng được kết nối trực tiếp với điểm truy cập thông qua cáp, nhưng mạng không dây sẽ yêu cầu các tương tác ở mức cao hơn để chấp nhận các thành viên mới. nmcli
sẽ tạo điều kiện thuận lợi cho quá trình kết nối và sẽ lưu cài đặt để tự động kết nối trong tương lai, do đó nên nó rất hữu ích cho máy tính xách tay hoặc bất kỳ một thiết bị di động nào.
Trước khi kết nối với wi-fi, chúng ta trước tiên nên liệt kê các mạng khả dụng trong khu vực. Nếu hệ thống có một bộ điều hợp wi-fi đang hoạt động thì đối tượng device
sẽ sử dụng nó để quét các mạng khả dụng bằng lệnh nmcli device wifi list
:
$ nmcli device wifi list IN-USE BSSID SSID MODE CHAN RATE SIGNAL BARS SECURITY 90:F6:52:C5:FA:12 Hypnotoad Infra 11 130 Mbit/s 67 ▂▄▆_ WPA2 10:72:23:C7:27:AC Jumbao Infra 1 130 Mbit/s 55 ▂▄__ WPA2 00:1F:33:33:E9:BE NETGEAR Infra 1 54 Mbit/s 35 ▂▄__ WPA1 WPA2 A4:33:D7:85:6D:B0 AP53 Infra 11 130 Mbit/s 32 ▂▄__ WPA1 WPA2 98:1E:19:1D:CC:3A Bruma Infra 1 195 Mbit/s 22 ▂___ WPA1 WPA2
Hầu hết mọi người dùng đều sẽ sử dụng tên trong cột SSID
để xác định mạng họ cần. Ví dụ: lệnh nmcli
có thể kết nối với mạng có tên Hypnotoad
bằng cách sử dụng lại đối tượng device
:
$ nmcli device wifi connect Hypnotoad
Nếu lệnh được thực thi bên trong một trình mô phỏng cửa sổ dòng lệnh trong môi trường đồ họa thì một hộp thoại sẽ xuất hiện để yêu cầu cụm mật khẩu của mạng. Khi được thực thi trong bảng điều khiển thuần văn bản, mật khẩu có thể được cung cấp cùng với các đối số khác:
$ nmcli device wifi connect Hypnotoad password MyPassword
Nếu mạng wi-fi ẩn tên SSID của nó, nmcli
vẫn có thể kết nối với mạng đó bằng các đối số hidden yes
bổ sung:
$ nmcli device wifi connect Hypnotoad password MyPassword hidden yes
Nếu hệ thống có nhiều bộ điều hợp wi-fi, bộ điều hợp được sử dụng có thể được biểu thị bằng ifname
. Ví dụ: để kết nối bằng bộ điều hợp có tên wlo1
:
$ nmcli device wifi connect Hypnotoad password MyPassword ifname wlo1
Sau khi kết nối thành công, NetworkManager sẽ đặt tên nó theo SSID tương ứng (nếu đó là kết nối wi-fi) và sẽ giữ nó lại cho các kết nối trong tương lai. Tên kết nối và UUID của chúng có thể được liệt kê bằng lệnh nmcli Connection show
:
$ nmcli connection show NAME UUID TYPE DEVICE Ethernet 53440255-567e-300d-9922-b28f0786f56e ethernet enp3s5 tun0 cae685e1-b0c4-405a-8ece-6d424e1fb5f8 tun tun0 Hypnotoad 6fdec048-bcc5-490a-832b-da83d8cb7915 wifi wlo1 4G a2cf4460-0cb7-42e3-8df3-ccb927f2fd88 gsm --
Loại của mỗi kết nối cũng sẽ được hiển thị — có thể là ethernet
, wifi
, tun
, gsm
, bridge
, v.v. — cũng như thiết bị mà chúng được liên kết tới. Để thực hiện các hành động trên một kết nối cụ thể, ta phải cung cấp tên hoặc UUID của chúng. Ví dụ: để tắt kết nối Hypnotoad
:
$ nmcli connection down Hypnotoad Connection 'Hypnotoad' successfully deactivated
Tương tự như vậy, lệnh nmcli connect up Hypnotoad
cũng có thể được sử dụng để khởi động kết nối vì giờ đây nó đã được NetworkManager lưu lại. Tên giao diện cũng có thể được sử dụng để kết nối lại nhưng trong trường hợp này ta nên sử dụng đối tượng device
:
$ nmcli device disconnect wlo2 Device 'wlo1' successfully disconnected.
Tên giao diện cũng có thể được sử dụng để thiết lập lại kết nối:
$ nmcli device connect wlo2 Device 'wlo1' successfully activated with '833692de-377e-4f91-a3dc-d9a2b1fcf6cb'.
Hãy lưu ý rằng UUID kết nối sẽ thay đổi mỗi khi kết nối được kích hoạt nên chúng ta nên sử dụng tên của nó để đảm bảo được tính nhất quán.
Nếu có sẵn bộ điều hợp không dây đang không sử dụng tới thì chúng ta có thể tắt nó để tiết kiệm điện. Lần này, đối tượng radio phải được truyền tới nmcli
:
$ nmcli radio wifi off
Tất nhiên, thiết bị không dây có thể được bật lại bằng lệnh nmcli radio wifi on
.
Sau khi kết nối được thiết lập, chúng ta sẽ không cần phải tương tác thủ công trong tương lai nữa vì NetworkManager sẽ xác định các mạng đã biết có sẵn và tự động kết nối với chúng. Nếu cần, NetworkManager sẽ có các trình cắm có thể mở rộng chức năng của nó (chẳng hạn như trình cắm hỗ trợ kết nối VPN).
systemd-networkd
Các hệ thống chạy systemd có thể tùy ý sử dụng các trình nền tích hợp sẵn của nó để quản lý kết nối mạng: systemd-networkd
để kiểm soát các giao diện mạng và systemd-resolved
để quản lý việc phân giải tên cục bộ. Các dịch vụ này có thể tương thích ngược với các phương pháp cấu hình Linux cũ, nhưng riêng về cấu hình của giao diện mạng chúng cũng có các tính năng rất đáng để biết đến.
Chúng ta có thể tìm thấy các tệp cấu hình được systemd-networkd sử dụng để thiết lập giao diện mạng trong bất kỳ một thư mục nào trong ba thư mục sau:
/lib/systemd/network
-
Thư mục mạng hệ thống.
/run/systemd/network
-
Thư mục mạng thời gian chạy khả biến.
/etc/systemd/network
-
Thư mục mạng quản trị cục bộ.
Các tệp sẽ được xử lý theo thứ tự từ điển nên tên của chúng nên được bắt đầu bằng các số để dễ đọc và đặt thứ tự hơn.
Các tệp trong /etc
có mức độ ưu tiên cao nhất trong khi các tệp trong /run
sẽ được ưu tiên hơn các tệp có cùng tên trong /lib
. Điều này có nghĩa là nếu các tệp cấu hình trong các thư mục khác nhau có cùng tên thì systemd-networkd sẽ bỏ qua các tệp có mức độ ưu tiên thấp hơn. Việc tách các tệp như vậy là một cách để thay đổi cài đặt giao diện mà không cần phải sửa đổi các tệp gốc: các sửa đổi có thể được đặt trong /etc/systemd/network
để ghi đè những cài đặt đó trong /lib/systemd/network
.
Mục đích của mỗi tệp cấu hình sẽ phụ thuộc vào hậu tố của nó. Tên tệp kết thúc bằng .netdev
sẽ được systemd-networkd sử dụng để tạo các thiết bị mạng ảo như thiết bị bridge hoặc tun. Các tệp kết thúc bằng .link
sẽ đặt cấu hình cấp thấp cho giao diện mạng tương ứng. systemd-networkd sẽ tự động phát hiện và định cấu hình các thiết bị mạng khi chúng xuất hiện — cũng như bỏ qua các thiết bị đã được định cấu hình bằng các phương tiện khác — vì vậy nên trong hầu hết các trường hợp chúng ta sẽ không cần phải thêm các tệp này
Hậu tố quan trọng nhất là .network
. Các tệp sử dụng hậu tố này có thể được sử dụng để thiết lập địa chỉ và tuyến mạng. Giống như các loại tệp cấu hình khác, tên của tệp sẽ xác định thứ tự tệp sẽ được xử lý. Giao diện mạng mà tệp cấu hình tham chiếu đến sẽ được xác định trong phần [Match]`
bên trong tệp.
Ví dụ: chúng ta có thể chọn giao diện mạng ethernet enp3s5
trong tệp /etc/systemd/network/30-lan.network
bằng cách sử dụng mục nhập Name=enp3s5
trong phần [Match]
:
[Match] Name=enp3s5
Một danh sách các tên được phân tách bằng khoảng trắng cũng sẽ được chấp nhận để khớp với nhiều giao diện mạng với cùng một tệp này trong cùng một lúc. Tên có thể chứa các khối khớp kiểu vỏ như en*
. Các mục khác sẽ cung cấp các quy tắc khớp khác nhau như chọn thiết bị mạng theo địa chỉ MAC của nó:
[Match] MACAddress=00:16:3e:8d:2b:5b
Các cài đặt cho thiết bị sẽ nằm trong phần [Network]
của tệp. Một cấu hình mạng tĩnh đơn giản sẽ chỉ yêu cầu các mục Address
(Địa chỉ) và Gateway
(Cổng):
[Match] MACAddress=00:16:3e:8d:2b:5b [Network] Address=192.168.0.100/24 Gateway=192.168.0.1
Để sử dụng giao thức DHCP thay vì địa chỉ IP tĩnh, chúng ta nên sử dụng mục DHCP
:
[Match] MACAddress=00:16:3e:8d:2b:5b [Network] DHCP=yes
Dịch vụ systemd-networkd sẽ cố gắng tìm nạp cả địa chỉ IPv4 và IPv6 cho giao diện mạng. Để chỉ sử dụng IPv4, chúng ta nên sử dụng DHCP=ipv4
. Tương tự, DHCP=ipv6
sẽ bỏ qua cài đặt IPv4 và chỉ sử dụng địa chỉ IPv6 được cung cấp.
Các mạng không dây được bảo vệ bằng mật khẩu cũng có thể được cấu hình bởi systemd-networkd nhưng bộ điều hợp mạng phải được xác thực trong mạng trước khi systemd-networkd có thể định cấu hình nó. Việc xác thực được thực hiện bởi WPA supplicant - một chương trình dành riêng để định cấu hình bộ điều hợp mạng cho các mạng được bảo vệ bằng mật khẩu.
Bước đầu tiên là tạo tệp thông tin đăng nhập bằng lệnh wpa_passphrase
:
# wpa_passphrase MyWifi > /etc/wpa_supplicant/wpa_supplicant-wlo1.conf
Lệnh này sẽ lấy cụm mật khẩu cho mạng không dây MyWifi
từ đầu vào tiêu chuẩn và lưu trữ hàm băm của nó trong /etc/wpa_supplicant/wpa_supplicant-wlo1.conf
. Hãy lưu ý rằng tên tệp phải chứa tên thích hợp của giao diện không dây (do đó mà tên tệp có chứa wlo1
).
Trình quản lý systemd sẽ đọc các tệp cụm mật khẩu WPA trong /etc/wpa_supplicant/
và tạo dịch vụ tương ứng để chạy WPA supplicant và đưa giao diện lên. Khi đó, tệp cụm mật khẩu được tạo trong ví dụ sẽ có đơn vị dịch vụ tương ứng được gọi là wpa_supplicant@wlo1.service
. Lệnh systemctl start wpa_supplicant@wlo1.service
sẽ liên kết bộ điều hợp không dây với điểm truy cập từ xa. Lệnh systemctl Enable wpa_supplicant@wlo1.service
sẽ làm cho việc liên kết trở thành tự động trong thời gian khởi động.
Cuối cùng, tệp .network
khớp với giao diện wlo1
phải hiện hữu trong /etc/systemd/network/
vì systemd-networkd sẽ sử dụng nó để định cấu hình giao diện ngay khi WPA supplicant kết thúc liên kết với điểm truy cập.
Bài tập Hướng dẫn
-
Ý nghĩa của từ
Portal
trong cộtCONNECTIVITY
trong đầu ra của lệnhnmcli General status
là gì? -
Trong một cửa sổ dòng lệnh bảng điều khiển, làm cách nào để một người dùng thông thường có thể sử dụng lệnh
nmcli
để kết nối với mạng không dâyMyWifi
được bảo vệ bằng mật khẩuMyPassword
? -
Lệnh nào có thể bật bộ điều hợp không dây nếu trước đó nó đã bị hệ điều hành tắt đi?
-
Các tệp cấu hình tùy chỉnh nên được đặt trong thư mục nào khi systemd-networkd đang quản lý giao diện mạng?
Bài tập Mở rộng
-
Làm cách nào để một người dùng có thể chạy lệnh
nmcli
để xóa một kết nối không sử dụng tới có tênHotel Internet
? -
NetworkManager sẽ quét mạng wi-fi định kỳ và lệnh
nmcli device wifi list
sẽ chỉ liệt kê các điểm truy cập được tìm thấy trong lần quét cuối cùng. Lệnhnmcli
nên được sử dụng như thế nào để yêu cầu NetworkManager quét lại ngay lập tức tất cả các điểm truy cập có sẵn? -
Nên sử dụng mục
name
nào trong phần[Match]
của tệp cấu hình systemd-networkd để khớp với tất cả các giao diện ethernet? -
Lệnh
wpa_passphrase
nên được thực thi như thế nào để sử dụng cụm mật khẩu làm đối số mặc định chứ không phải từ đầu vào tiêu chuẩn?
Tóm tắt
Bài học này đã đề cập đến các công cụ phổ biến được sử dụng trong Linux để quản lý các kết nối mạng động và không đồng nhất. Mặc dù hầu hết các phương pháp cấu hình không yêu cầu sự can thiệp của người dùng nhưng đôi khi điều đó lại là cần thiết và các công cụ như NetworkManager và systemd-networkd có thể giảm thiểu các rắc rối đến mức tối thiểu. Bài học đã đi qua các chủ đề sau:
-
Cách NetworkManager và systemd-networkd tích hợp với hệ thống.
-
Cách người dùng có thể tương tác với NetworkManager và systemd-networkd.
-
Cấu hình giao diện cơ bản với cả NetworkManager và systemd-networkd.
Các khái niệm, lệnh và quy trình đã được đề cập tới là:
-
Các lệnh máy khách của NetworkManager:
nmtui
vànmcli
. -
Quét và kết nối với mạng không dây bằng các lệnh
nmcli
thích hợp. -
Kết nối mạng wi-fi bền vững bằng cách sử dụng systemd-networkd.
Đáp án Bài tập Hướng dẫn
-
Ý nghĩa của từ
Portal
trong cộtCONNECTIVITY
trong đầu ra của lệnhnmcli General status
là gì?Nó có nghĩa là chúng ta cần phải có các bước xác thực bổ sung (thường thông qua trình duyệt web) để hoàn tất quá trình kết nối.
-
Trong một cửa sổ dòng lệnh bảng điều khiển, làm cách nào để một người dùng thông thường có thể sử dụng lệnh
nmcli
để kết nối với mạng không dâyMyWifi
được bảo vệ bằng mật khẩuMyPassword
?Trong một cửa sổ dòng lệnh thuần văn bản, lệnh sẽ là:
$ nmcli device wifi connect MyWifi password MyPassword
-
Lệnh nào có thể bật bộ điều hợp không dây nếu trước đó nó đã bị hệ điều hành tắt đi?
$ nmcli radio wifi on
-
Các tệp cấu hình tùy chỉnh nên được đặt trong thư mục nào khi systemd-networkd đang quản lý giao diện mạng?
Trong thư mục mạng quản trị cục bộ:
/etc/systemd/network
.
Đáp án Bài tập Mở rộng
-
Làm cách nào để một người dùng có thể chạy lệnh
nmcli
để xóa một kết nối không sử dụng tới có tênHotel Internet
?$ nmcli connection delete "Hotel Internet"
-
NetworkManager sẽ quét mạng wi-fi định kỳ và lệnh
nmcli device wifi list
sẽ chỉ liệt kê các điểm truy cập được tìm thấy trong lần quét cuối cùng. Lệnhnmcli
nên được sử dụng như thế nào để yêu cầu NetworkManager quét lại ngay lập tức tất cả các điểm truy cập có sẵn?Siêu người dùng có thể chạy
nmcli device wifi rescan
để yêu cầu NetworkManager quét lại các điểm truy cập khả dụng. -
Nên sử dụng mục
name
nào trong phần[Match]
của tệp cấu hình systemd-networkd để khớp với tất cả các giao diện ethernet?Mục nhập
name=en*
vìen
là tiền tố cho giao diện ethernet trong Linux và systemd-networkd sẽ chấp nhận các khối khớp mẫu giống vỏ. -
Lệnh
wpa_passphrase
nên được thực thi như thế nào để sử dụng cụm mật khẩu làm đối số mặc định chứ không phải từ đầu vào tiêu chuẩn?Mật khẩu phải được đặt ngay sau SSID như trong
wpa_passphrase MyWifi MyPassword
.