Cấu hình multi default gateways trên hệ điều hành Linux.
Khi bạn có hai hoặc nhiều card mạng trên hệ thống Linux và mỗi card này có một gateway mặc định riêng. Theo mặc định, bạn chỉ có thể có một gateway mặc định trên một hệ thống. Trường hợp được mô tả sẽ dẫn đến định tuyến không đồng bộ, trong đó bộ định tuyến sẽ từ chối các gói tin khi cần thiết.
Chương trình iproute2, được bao gồm trong tất cả các bản hệ điều hành Linux hiện tại và thậm chí đã được cài đặt sẵn, có thể được sử dụng để giải quyết vấn đề này. Thông thường, một hệ thống Linux chỉ có một bảng định tuyến, trong đó chỉ có một gateway mặc định có thể tạo mục nhập. Với iproute2, bạn có khả năng thiết lập một bảng định tuyến bổ sung, cho một mục đích và cho phép bảng này được sử dụng bởi hệ thống dựa trên các quy tắc, cho một mục đích khác.
Chúng tôi sẽ giả định rằng chúng tôi có hai giao diện: eth0 và eth1. Hai mạng được sử dụng là 192.168.0.0/24 và 10.10.0.0/24, trong đó địa chỉ IP đầu tiên trong mỗi mạng tương ứng sẽ là gateway. Trong Debian, cấu hình ban đầu sẽ xuất hiện như sau. /etc/network/interfaces
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 iface eth0 inet static address 192.168.0.10 netmask 255.255.255.0 gateway 192.168.0.1 # The secondary network interface allow-hotplug eth1 iface eth1 inet static address 10.10.0.10 netmask 255.255.255.0
Thêm bảng định tuyến thứ hai
Để thêm một bảng định tuyến mới, tệp /etc/iproute2/rt_tables phải được chỉnh sửa. Chúng tôi sẽ gọi bảng định tuyến là "rt2" và đặt ưu tiên của nó thành 1. Tệp được đặt tên sau đó sẽ xuất hiện như sau.
# # reserved values # 255 local 254 main 253 default 0 unspec # # local # #1 inr.ruhep 1 rt2
Cấu hình bảng định tuyến mới
Đầu tiên, bảng định tuyến mới cần được điền dữ liệu, được thực hiện bằng lệnh sau.
ip route add 10.10.0.0/24 dev eth1 src 10.10.0.10 table rt2 ip route add default via 10.10.0.1 dev eth1 table rt2
Quy tắc định tuyến
Để hệ thống biết khi nào sử dụng bảng định tuyến mới của chúng ta, hai quy tắc phải được cấu hình.
ip rule add from 10.10.0.10/32 table rt2 ip rule add to 10.10.0.10/32 table rt2
Các quy tắc này cho biết rằng cả lưu lượng truy cập từ địa chỉ IP 10.10.0.10 cũng như lưu lượng truy cập được định tuyến đến hoặc thông qua địa chỉ IP này sẽ sử dụng bảng định tuyến rt2.
Making the Configuration permanent
Các lệnh ip rule và ip route sẽ trở nên không hợp lệ sau khi khởi động lại, vì lý do đó, chúng nên trở thành một phần của một tập lệnh (ví dụ: /etc/rc.local) sẽ được thực thi sau khi mạng đã được khởi động. Đối với Debian, các lệnh này cũng có thể được viết trực tiếp vào tệp /etc/network/interfaces, sau đó sẽ xuất hiện như sau.
iface eth1 inet static address 10.10.0.10 netmask 255.255.255.0 post-up ip route add 10.10.0.0/24 dev eth1 src 10.10.0.10 table rt2 post-up ip route add default via 10.10.0.1 dev eth1 table rt2 post-up ip rule add from 10.10.0.10/32 table rt2 post-up ip rule add to 10.10.0.10/32 table rt2
Nếu có nhiều hơn 2 card mạng hoặc default gateways chúng ta cũng làm tương tự như ví dụ trên.
Kiếm tra cấu hình chúng ta dùng câu lệnh sau:
ip route list table rt2 ip rule show
Các bạn có thể tham khảo thêm cấu hình iproute2 tại đây.