Cầu nối các giao diện mạng trong Linux

Tác giả sysadmin, T.Chín 15, 2023, 05:42:46 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Cầu nối các giao diện mạng trong Linux


1. Giới thiệu

Trong Linux, cầu nối các giao diện mạng là một phương pháp phổ biến để kết hợp hai hoặc nhiều giao diện mạng thành một giao diện ảo duy nhất. Cầu nối rất hữu ích vì nhiều lý do, chẳng hạn như cải thiện hiệu suất mạng, dự phòng và cân bằng tải.


Trong bài viết này, chúng tôi sẽ giải thích cầu nối mạng là gì, cách thiết lập nó và cung cấp một số ví dụ về cách sử dụng nó trong thực tế.

2. Cầu nối mạng là gì?

Cầu nối mạng là một thành phần phần mềm cầu nối hai hoặc nhiều giao diện mạng với nhau để tạo ra một mạng ảo. Khi cầu nối các giao diện mạng, chúng hoạt động như một giao diện mạng duy nhất, cho phép dữ liệu truyền giữa chúng một cách liền mạch. Để đạt được điều này, chúng tôi tạo một giao diện cầu nối logic hoạt động như một bộ chuyển mạch lớp 2, chuyển tiếp các gói giữa các giao diện vật lý.

Chúng tôi có thể cầu nối các giao diện mạng, chẳng hạn như Ethernet, không dây và ảo. Việc bắc cầu có thể hữu ích trong nhiều tình huống khác nhau, chẳng hạn như:

  • Kết hợp hai hoặc nhiều giao diện mạng để tăng băng thông và cải thiện hiệu suất mạng
  • Tạo giao diện mạng dự phòng để đảm bảo tính sẵn sàng cao trong trường hợp có sự cố
  • Lưu lượng mạng cân bằng tải trên nhiều giao diện để phân phối tải mạng
  • Tạo mạng ảo giữa các máy ảo chạy trên cùng một máy chủ vật lý

3. Cách cầu nối giao diện mạng

Trong Linux, công cụ phổ biến nhất được sử dụng để bắc cầu mạng là  gói bridge-utils, gói này cung cấp  công cụ dòng lệnh brctl để định cấu hình và quản lý các cầu nối.

Trước khi tạo cầu nối, điều quan trọng là phải xác định các giao diện mạng mà chúng ta muốn cầu nối. Chúng ta có thể thực hiện điều này bằng cách sử dụng lệnh ip để liệt kê tất cả các giao diện mạng có sẵn trên hệ thống. Lệnh ip là một công cụ mạnh mẽ để cấu hình và quản lý các giao diện mạng trong Linux.

3.1. ip link show

Để liệt kê tất cả các giao diện mạng có sẵn, chúng ta có thể sử dụng lệnh ip link show  trong terminal hoặc shell:

Mã nguồn [Chọn]
$ ip link show
Lệnh này sẽ hiển thị danh sách tất cả các giao diện mạng cũng như trạng thái và cấu hình của chúng. Hãy xem một ví dụ đầu ra:

Mã nguồn [Chọn]
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
    link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff

3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 66:77:88:99:aa:bb brd ff:ff:ff:ff:ff:ff

4: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 1000
    link/ether dd:ee:ff:00:11:22 brd ff:ff:ff:ff:ff:ff

Trong ví dụ đầu ra này, chúng ta có thể thấy rằng có bốn giao diện mạng: lo, eth0, eth1 và wlan0. Chúng tôi sử dụng giao diện lo làm giao diện loopback, được sử dụng để liên lạc mạng cục bộ. Giao diện eth0 và eth1 là giao diện Ethernet, trong khi giao diện wlan0 là giao diện không dây.

Để cầu nối hai hoặc nhiều giao diện mạng, chúng ta cần xác định tên hoặc mã định danh giao diện của chúng. Trong ví dụ này, chúng ta có thể cầu nối giao diện eth0 và eth1 bằng cách tạo giao diện cầu nối có tên br0 và thêm eth0 và eth1, như được hiển thị trong các ví dụ sau.

3.2. ifconfig

Để tạo giao diện cầu nối, chúng tôi phải đảm bảo rằng chúng tôi chưa định cấu hình giao diện mạng mà chúng tôi muốn cầu nối bằng địa chỉ IP hoặc các cài đặt mạng khác. Chúng ta có thể sử dụng lệnh ifconfig để kiểm tra cấu hình của giao diện và tắt nó nếu cần.

Ví dụ: để giới hạn cấu hình của giao diện eth0 và tắt nó, chúng ta có thể chạy:

Mã nguồn [Chọn]
$ sudo ifconfig eth0
$ sudo ifconfig eth0 down

Lệnh đầu tiên sẽ hiển thị thông tin chi tiết về cấu hình hiện tại của giao diện eth0. Lệnh thứ hai sẽ đặt giao diện eth0 về trạng thái ngừng hoạt động, tạm thời vô hiệu hóa nó và cho phép chúng ta cấu hình lại nó mà không bị xung đột.

Chúng tôi có thể lặp lại quy trình này cho bất kỳ giao diện nào khác mà chúng tôi muốn cầu nối, đảm bảo rằng chúng cũng ở trạng thái ngừng hoạt động trước khi tiếp tục. Khi đã chuẩn bị xong các giao diện, chúng ta có thể chuyển sang tạo giao diện cầu nối và thêm các giao diện vào đó.

Đây là ví dụ đầu ra về việc chạy lệnh ifconfig trên giao diện eth0:

Mã nguồn [Chọn]
$ sudo ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::a00:27ff:fefc:e856  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:fc:e8:56  txqueuelen 1000  (Ethernet)
        RX packets 317  bytes 33996 (33.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 103  bytes 10998 (10.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Đầu ra này cho thấy giao diện eth0 hiện được cấu hình với địa chỉ IP là  192.168.1.100 và netmask là 255.255.255.0. Để chuẩn bị giao diện này cho việc bắc cầu, chúng ta cần vô hiệu hóa nó bằng lệnh ifconfig như mô tả ở trên.

3.3. brctl addbr

Sau khi xác định các giao diện mạng mà chúng ta muốn cầu nối, chúng ta có thể tạo giao diện cầu nối bằng lệnh brctl. Lệnh brctl là một tiện ích dòng lệnh được sử dụng để định cấu hình giao diện cầu Ethernet trong Linux.

Để tạo giao diện bridge mới, chúng ta có thể sử dụng lệnh brctl addbr theo sau là tên của giao diện bridge mà chúng ta muốn tạo. Ví dụ: hãy tạo giao diện cầu nối mới có tên br0:

Mã nguồn [Chọn]
$ sudo brctl addbr br0
Lệnh này tạo giao diện cầu nối mới có tên br0. Lệnh sudo c chạy lệnh brctl với các đặc quyền quản trị, vì việc tạo giao diện cầu nối yêu cầu quyền truy cập cấp gốc.

3.4. brctl addif

Khi giao diện cầu nối đã được tạo, chúng ta có thể thêm các giao diện mạng mà chúng ta muốn cầu nối với nó. Việc này được thực hiện bằng cách sử dụng lệnh brctl addif, theo sau là tên của giao diện cầu nối và tên của giao diện mạng mà chúng ta muốn thêm. Ví dụ: hãy thêm giao diện eth0 và eth1 vào giao diện cầu br0 mới tạo của chúng tôi :

Mã nguồn [Chọn]
$ sudo brctl addif br0 eth0
$ sudo brctl addif br0 eth1

Chúng tôi có thể xác nhận rằng các giao diện mạng đã được thêm vào giao diện cầu nối bằng cách chạy lệnh brctl show  :

Mã nguồn [Chọn]
$ sudo brctl show
bridge name  bridge id          STP enabled  interfaces
br0          8000.000000000000  no           eth0
                                             eth1

Sau khi thêm các giao diện mạng vào giao diện cầu nối, chúng ta có thể định cấu hình giao diện cầu nối như bất kỳ giao diện mạng nào khác. Điều này bao gồm việc gán địa chỉ IP cho giao diện cầu nối và định cấu hình mọi cài đặt mạng cần thiết, chẳng hạn như máy chủ DNS hoặc bảng định tuyến.

Cuối cùng, chúng ta cần hiển thị giao diện cầu nối và giao diện vật lý:

Mã nguồn [Chọn]
$ sudo ifconfig br0 up
$ sudo ifconfig eth0 up
$ sudo ifconfig eth1 up

Lệnh này hiển thị giao diện br0 và giao diện vật lý, làm cho chúng sẵn sàng để sử dụng. Hãy chạy lệnh ifconfig để kiểm tra trạng thái của các giao diện mạng:

Mã nguồn [Chọn]
$ ifconfig br0
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.10  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::c72:83ff:fe1c:88c6  prefixlen 64  scopeid 0x20<link>
        ether c6:72:83:1c:88:c6  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 100  bytes 10370 (10.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:11:22:33:44:55  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 100  bytes 10370 (10.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

$ ifconfig eth1
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:11:22:33:44:56  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 100  bytes 10370 (10.3 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Kết quả đầu ra này cho thấy các giao diện br0, eth0 và eth1 đều đang hoạt động. Trường inet hiển thị địa chỉ IP được gán cho mỗi giao diện, trong khi trường ether hiển thị địa chỉ MAC của giao diện. Các trường TX và  RX  lần lượt hiển thị số lượng gói và byte được truyền và nhận bởi giao diện.

4. Ví dụ thực tế

Hãy xem xét một số ví dụ thực tế về cách sử dụng cầu nối mạng trong Linux.

4.1. Cải thiện hiệu suất mạng

Một trong những trường hợp sử dụng chính của cầu nối mạng là kết hợp hai hoặc nhiều giao diện mạng để tăng băng thông và cải thiện hiệu suất mạng. Bằng cách cầu nối các giao diện, chúng tôi tạo ra một giao diện ảo duy nhất để xử lý nhiều lưu lượng mạng hơn và cải thiện thông lượng mạng tổng thể.

Ví dụ: chúng tôi có hai giao diện Ethernet, eth0 và eth1, mỗi giao diện có thông lượng tối đa là 1 Gbps. Nếu chúng ta cầu nối các giao diện này thành một giao diện ảo duy nhất, chúng ta có thể đạt được thông lượng tối đa là 2 Gbps. Điều này có thể hữu ích trong các tình huống mà chúng ta cần truyền lượng lớn dữ liệu một cách nhanh chóng hoặc hỗ trợ các ứng dụng băng thông cao.

4.2. Tạo giao diện mạng dự phòng

Một trường hợp sử dụng khác của cầu nối mạng là tạo giao diện mạng dự phòng để đảm bảo tính sẵn sàng cao trong trường hợp xảy ra lỗi. Bằng cách cầu nối hai hoặc nhiều giao diện mạng, chúng tôi tạo ra cơ chế chuyển đổi dự phòng tự động chuyển sang giao diện dự phòng nếu giao diện chính bị lỗi.

Ví dụ: nếu chúng ta cầu nối eth0 và eth1 thành một giao diện ảo duy nhất, chúng ta có thể định cấu hình hệ thống để sử dụng eth0 làm giao diện chính và eth1 làm giao diện dự phòng. Nếu eth0 bị lỗi, hệ thống sẽ tự động chuyển sang eth1 để duy trì cầu nối mạng.

4.3. Cân bằng tải lưu lượng mạng

Một trường hợp sử dụng khác của cầu nối mạng là cân bằng tải lưu lượng mạng trên nhiều giao diện để phân phối tải mạng. Bằng cách phân phối lưu lượng mạng trên nhiều giao diện, chúng tôi có thể tránh tắc nghẽn và đảm bảo rằng không có giao diện nào bị quá tải.

Ví dụ: nếu chúng ta cầu nối eth0 và eth1 vào một giao diện ảo duy nhất, chúng ta có thể định cấu hình hệ thống để phân phối lưu lượng mạng đồng đều trên cả hai giao diện. Điều này có thể hữu ích trong các tình huống có nhiều máy khách truy cập đồng thời vào một máy chủ hoặc khi chúng tôi cần hỗ trợ các ứng dụng băng thông cao.

4.4. Tạo một mạng ảo

Một trường hợp sử dụng khác của cầu nối mạng là tạo một mạng ảo giữa các máy ảo chạy trên cùng một máy chủ vật lý. Bằng cách cầu nối giao diện mạng ảo của các máy ảo, chúng ta có thể tạo một mạng ảo cho phép chúng giao tiếp với nhau như thể chúng được cầu nối với cùng một mạng vật lý.

Ví dụ: nếu chúng ta có hai máy ảo chạy trên cùng một máy chủ vật lý, chúng ta có thể cầu nối các giao diện mạng ảo của chúng thành một giao diện ảo duy nhất. Điều này sẽ cho phép các máy ảo giao tiếp trực tiếp với nhau mà không cần thông qua mạng vật lý.

5. Kết luận

Cầu nối mạng là một kỹ thuật có giá trị để kết hợp hai hoặc nhiều giao diện mạng thành một giao diện ảo duy nhất. Chúng tôi đã sử dụng cầu nối này cho nhiều mục đích khác nhau, chẳng hạn như cải thiện hiệu suất mạng, dự phòng và cân bằng tải.

Trong Linux, việc cầu nối mạng có thể được thiết lập dễ dàng bằng gói bridge-utils  và công cụ dòng lệnh brctl. Bằng cách cầu nối các giao diện mạng, chúng tôi có thể tạo các cấu hình mạng linh hoạt và mạnh mẽ hơn để thích ứng với các yêu cầu mạng đang thay đổi.