Trang chủTin tứcTìm hiểu về Linux Network Namespace và Linux Bridge
Tìm hiểu về Linux Network Namespace và Linux Bridge

Kiến thức cần biết về Linux Network Namespace và Linux Bridge cho người mới bắt đầu, hiểu rõ cách chúng hoạt động và ứng dụng trong các hệ thống mạng.

Trong môi trường Linux, quản lý và tạo mạng ảo hiệu quả là một yếu tố quan trọng đối với các hệ thống hiện đại. Hai khái niệm nổi bật trong lĩnh vực này là Linux Network Namespace và Linux Bridge. Network Namespace cung cấp khả năng phân tách môi trường mạng, giúp tạo ra nhiều mạng ảo độc lập trên cùng một hệ thống. Trong khi đó, Linux Bridge đóng vai trò như một cầu nối, cho phép các interface giao tiếp với nhau trong cùng một môi trường ảo. Bài viết này sẽ giúp bạn hiểu rõ về hai công cụ này trong việc xây dựng hệ thống mạng linh hoạt và bảo mật.

Kiến thức về Linux Network Namespace và Linux Bridge
Kiến thức về Linux Network Namespace và Linux Bridge

1. Tìm hiểu về Linux Network Namespace

Để hiểu về network namespace thì ta cần hiểu sơ qua namespace. Namespace là một không gian cô lập, riêng biệt mà linux tạo ra để tránh các nhóm tiến trình bị cô lập với nhau. Ta hãy liên tưởng namespace như là các virtual machine trong VMware vậy. Các VM trong VMware cũng có 1 hệ thống mạng riêng, namespace cũng thế nó cũng cần hệ thống mạng riêng được gọi là network namespace.

>>> Xem thêm: VMware Networking - Hướng dẫn cấu hình mạng trên vCenter 7.0

1.1 Các thành phần của Network Namespace

Cách network namespace hoạt động
Cách network namespace hoạt động

Tương tự như Network của VM thì Network Namespace cũng bao gồm các thành phần:

  • Network Interfaces: Tên card mạng của namespace
  • IP: Địa chỉ IP của interface của namespace
  • Routing Table: Bảng định tuyến của namespace
  • Network connection: Dây mạng kết nối giữa các namespace

1.2 Các câu lệnh hay sử dụng

Mặc định khi chưa tạo namespace thì ta sẽ có root namespace chứa các namespace ta tạo ra và nó được sinh ra với PID = 1.

Để tạo ra namespace ta sử dụng lệnh:

ip netns add <name-namespace>

ip netns add blue

ip netns add yellow

Cấu trúc chung khi thao tác với 1 network namespace bất kỳ.

ip netns exec <name-namespace> <cmd>

ip netns exec blue ip a

Tạo 1 pipe kết nối 2 interface lại với nhau

ip link add veth-blue type veth peer name veth-yellow

Gắn interface vừa tạo vào vào namespace

ip link set veth-blue netns blue

ip link set veth-yellow netns yellow

Đặt IP cho các interface của namespace

ip -n blue addr add 192.168.10.3 dev veth-blue

ip -n yellow addr add 192.168.10.4 dev veth-yellow

Up interface

ip -n blue link set veth-blue up

ip -n yellow link set veth-yellow up

Linux Network Namespace

2. Tìm hiểu về Linux Bridge

Cách linux bridge hoạt động
Cách linux bridge hoạt động

2.1 Linux Bridge có thể làm được những gì?

Trong phần tìm hiểu ở trên ta nhận ra rằng việc cấu hình như trên rất tù, không thể giải quyết được vấn đề nếu như nhiều namespace muốn dùng cùng 1 dải mạng kết nối với nhau thì sao?

Chính vì thế ta cần 1 switch ảo để có thể làm được điều đó, docker sử dụng Linux bridge để tạo ra switch ảo, switch này hỗ trợ tối đa 4096 port. Linux Bridge sẽ tạo ra một switch ảo layer 2, những gì mà switch layer 2 có thể làm được thì switch ảo do Linux Bridge tạo ra đều có thể làm được:

  • Tính năng switching (chuyển mạch)
  • Spanning Tree Protocol
  • VLAN
  • ...

2.2 Các câu lệnh thường sử dụng

Tạo một linux bridge

ip link add <name-vswitch> type bridge

ip link add br-switch type bridge

Up vswitch vừa tạo lên:

ip link set dev br-switch up

Tiếp theo ta tạo một pairs:

ip link add veth-b type veth peer name veth-b-br

ip link add veth-y type veth peer name veth-y-br

Gắn interface vào namespace

ip link set veth-b netns blue

ip link set veth-y netns yellow

ip link set veth-b-br master br-switch

ip link set veth-y-br master br-switch

Up interface

ip netns exec blue ip link set veth-b up

ip link set veth-b-br up

ip netns exec yellow ip link set veth-y up

ip link set veth-y-br up

Đặt IP cho interface của namespace

ip netns exec yellow ip addr add 192.168.10.3/24 dev veth-y

ip netns exec blue ip addr add 192.168.10.4/24 dev veth-b

Đặt IP cho interface của namespace

3. Kiến thức Linux Bridge nâng cao

Chúng ta sẽ bắt đầu thực hành với một số bài toán cụ thể giúp bạn hiểu chi tiết về Linux bridge.

3.1 Bài toán 1

Mô hình bài toán 1
Mô hình bài toán 1

Ở mục trước ta đã cấu hình các namespace liên lạc được với nhau thông qua switch nhưng như vậy mới chỉ là cô lập môi trường các namespace không thể liên lạc ra internet, phần này sẽ hướng dẫn bạn làm cách nào để từ vSwitch có thể thông ra môi trường internet.

Phần này sẽ lấy kết quả cấu hình ở mục 2.2.

Mặc định linux không cho phép forward ip, ta cần phải bật tính năng này lên

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

Ta cần phải đặt IP cho vSwwitch để nó làm default gateway của các namespace

ip addr add 192.168.10.1/24 dev br-switch

Tiếp theo ta cần set default route cho các namespace thì mới có hiệu quả

ip netns exec blue ip route add default via 192.168.10.1

ip netns exec yellow ip route add default via 192.168.10.1

Ta cần sử dụng IPtables để NAT dải mạng 192.168.10.0/24 đến ens160

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o ens160 -j MASQUERADE

Nếu ta chỉ muốn chỉ định IP 192.168.10.4/24 ra internet thì có thể thay thế bằng lệnh sau:

iptables -t nat -A POSTROUTING -s 192.168.10.4/24 -o ens160 -j MASQUERADE

Kết quả sau khi bài toán 1

Kết quả sau bài toán 1
Kết quả sau bài toán 1

3.2 Bài toán 2

Tôi muốn từ namespace 2,3,4 là 3 backend chạy đằng sau và từ internet muốn kết nối đến backend 2 port 80 thì phải gọi qua namespace 1 port 8080.

Mô hình bài toán 2
Mô hình bài toán 2

Tương tự như các bước trước ta cần tạo namespace và linux bridge

ip netns add nginx

ip link add br-switch type bridge

ip link set dev br-switch up

Tạo và kết nối cặp veth:

ip link add veth-nginx type veth peer name veth-nginx-br

ip link set veth-nginx netns nginx

ip link set veth-nginx-br master br-switch

Cấu hình veth bên trong namespace và bridge:

ip netns exec nginx ip link set veth-nginx up

ip link set veth-nginx-br up

Cấu hình địa chỉ IP:

ip netns exec nginx ip addr add 192.168.10.3/24 dev veth-nginx

ip addr add 192.168.10.1/24 dev br-switch

Cấu hình routing bên trong namespace:

ip netns exec nginx ip route add default via 192.168.10.1

Bật IP forwarding:

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

Tiếp theo ta cần phải thiết lập lại rule mới cho IPtables

# Chuyển tiếp port 8080 từ ens160 tới port 80 của namespace nginx

iptables -t nat -A PREROUTING -i ens160 -p tcp --dport 8080 -j DNAT --to-destination 192.168.10.3:80

# Cho phép các gói tin chuyển tiếp từ ens160 đến bridge br-switch (chiều đi)

iptables -A FORWARD -i ens160 -o br-switch -p tcp --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# Cho phép các gói tin chuyển tiếp từ bridge br-switch đến ens160 (chiều về)

iptables -A FORWARD -i br-switch -o ens160 -p tcp --sport 80 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Cấu hình NAT để cho phép các gói tin từ namespace blue trả lời lại internet

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o ens160 -j MASQUERADE

Khởi động dịch vụ Nginx trong namespace (với deamon off để khi ta ctrl + C sẽ ngừng dịch vụ này):

apt install nginx

ip netns exec nginx nginx -g 'daemon off;'

kiểm tra kết quả
kiểm tra kết quả

Tổng kết

Linux Network Namespace và Linux Bridge là hai công cụ quan trọng, đặc biệt hữu ích trong việc thiết kế và quản lý các hệ thống mạng ảo hóa. Hiểu rõ cách sử dụng chúng sẽ giúp bạn tối ưu hóa hiệu suất, bảo mật và khả năng mở rộng của hệ thống mạng. Dù bạn là người mới bắt đầu hay đã có kinh nghiệm, việc nắm vững những công cụ này sẽ mang lại lợi thế lớn trong việc triển khai các môi trường mạng phức tạp và hiệu quả.

Tác giả:
author avatar
Mình là Huy, hiện mình đang là kỹ sư hệ thống tại SunCloud. Mình có nhiều năm kinh nghiệm, kiến thức chuyên môn về mạng, hệ thống, điện toán mây và an ninh bảo mật. Mình đã triển khai và vận hành rất nhiều dự án thực tế cho doanh nghiệp, cơ quan. Mình đã đạt được một số chứng chỉ quốc tế như CCNP, LPI, VCP, đồng thời mình vẫn đang tiếp tục học tập để trau dồi kiến thức mỗi ngày. Mình rất yêu thích công nghệ, đam mê chia sẻ những kiến thức, thông tin hữu ích cho mọi người.

Tin tức nổi bật