Cách thích hợp để làm điều này là liên kết () với giao diện bạn muốn sử dụng cho các gói gửi đi. Vì sau đó, bạn có thể thiết lập các tuyến đường với các lệnh ip route
và ip rule
để kiểm soát cách các gói được định tuyến dựa trên giao diện gửi đi của chúng. Ví dụ của tôi, tôi sẽ giả sử mạng sau:
- eth0:
- Địa chỉ: 192.168.0.2/24
- Cổng mặc định: 192.168.0.1
- eth1:
- Địa chỉ: 192.168.1.2/24
- Cổng mặc định: 192.168.1.1
Tôi sẽ tạo hai bảng định tuyến, một bảng cho lưu lượng đi cho eth0 được gọi là thay thế và một bảng cho eth1 được gọi là chính. Bảng định tuyến chính luôn tồn tại và là bảng bình thường được sử dụng bởi các lệnh route
và ip route
. Hầu hết mọi người không bao giờ giao dịch với bất kỳ bảng khác. Để tạo bảng được gọi là thay thế, chúng tôi sẽ thêm dòng sau vào /etc/iproute2/rt_tables
:
10 alternate
Bảng chính có mức ưu tiên mặc định là 254. Các quy tắc mà bảng định tuyến có hiệu lực được điều khiển bởi ip rule
lệnh. Theo mặc định, lệnh đó sẽ in ra một danh sách các quy tắc hiện có trông giống như thế này:
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
Điều này về cơ bản nói rằng nó sẽ tìm một tuyến đường trong bảng local
là một bảng đặc biệt được duy trì bởi kernel cho các tuyến địa phương như địa chỉ IP của riêng tôi. Sau đó nó sẽ thử bảng chính và bảng mặc định. Bảng mặc định thường trống, vì vậy nếu không có kết quả chính, thì không có tuyến nào để lưu trữ. Đầu tiên, cho phép điền vào bảng xen kẽ với các quy tắc cho eth0.
sudo ip route add table alternate 192.168.0.0/24 dev eth0
sudo ip route add table alternate 192.168.1.0/24 dev eth1
sudo ip route add table alternate default via 192.168.0.1
Bạn thường sẽ muốn alternate
bảng trông tương tự như main
bảng. Sự khác biệt duy nhất là khi định tuyến nên khác nhau. Bạn có thể không muốn bao gồm dòng thứ hai ở trên nếu bạn thực sự muốn tất cả lưu lượng truy cập NFS, HTTP, v.v. đi qua cổng mặc định trên eth0 ngay cả khi nó được dành cho mạng trên eth1. Bước tiếp theo là thêm quy tắc khi nào nên sử dụng bảng định tuyến thay thế này:
sudo ip rule add from 192.168.0.0/24 pref 10 table alternate
Quy tắc này cho biết mọi lưu lượng truy cập đến từ một địa chỉ trên mạng 192.168.0 sẽ sử dụng alternate
bảng định tuyến thay vì main
bảng thông thường . Bước cuối cùng là đảm bảo tất cả các máy khách phải sử dụng eth0
liên kết với nó. Với wget
, ví dụ, được đặt --bind-address=192.168.0.2
, cho NFS, đặtclientaddr=192.168.0.2
tùy chọn gắn kết. Nếu sử dụng LibWWW với Perl, bạn có thể đặt tùy chọn localaddr trong LWP :: UserAgent để điều khiển giao diện cục bộ mà nó liên kết. Nếu bạn tình cờ có một máy khách, bạn không thể kiểm soát nguồn ràng buộc và biên dịch không phải là một tùy chọn, bạn có thể sử dụng quy tắc iptables để sửa đổi địa chỉ của nó, nhưng đây là một vụ hack và có thể không hoạt động. Bạn sẽ cần một quy tắc SNAT được thiết lập trong chuỗi PREROUTING của bảng nat hoặc bảng mangle. Bạn vẫn sẽ cần các bảng định tuyến đã sửa đổi ở trên để làm việc này.
iftop
và chúng đều hiển thị loại lưu lượng truy cập phù hợp. Cảm ơn bạn rất nhiều.