Trong thiết lập của tôi, lưu lượng truy cập TX đa hướng được đánh dấu bằng iptables nhưng định tuyến chính sách sử dụng các bảng định tuyến mới không bao giờ hoạt động. Mặc dù nó hoạt động cho các gói TX unicast (chuyển hướng các gói có nguồn gốc từ eth0 sang eth5). Sử dụng tc tôi có thể nhận lưu lượng eth0 mcast thành eth5 Địa chỉ ip src mac và src được thay đổi so với eth5 vì vậy sẽ không tạo ra vấn đề với việc học chuyển đổi. Tất cả hỗ trợ kernel cho lập lịch gói kernel CONFIG_NET_SCHED phải được bật
Dưới đây CÔNG TRÌNH cho chuyển hướng unicast và multicast chuyển hướng từ eth0 sang eth5
Netfilter có thể được sử dụng để tương tác trực tiếp với cấu trúc đại diện cho một gói trong kernel. Cấu trúc này, sk_buff, chứa một trường có tên là __u32 nfmark, mà chúng ta sẽ sửa đổi. TC sau đó sẽ đọc giá trị đó để chọn lớp đích của gói.
IP_ADDR_ETH0 = ifconfig eth0 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n'
iptables -t mangle -A OUTPUT -s $ {IP_ADDR_ETH0} -p udp --match Multiport --dports 329.330 -o eth0 -j Mark --set-mark 2
Sẽ tạo một cây đại diện cho chính sách lập lịch của chúng tôi và sử dụng PRIO qdisc (bộ lập lịch gói) (có thể thử các chính sách có sẵn khác). qdiscs gắn ở gốc của thiết bị
tc qdisc thêm dev eth0 root xử lý 15: tiên sinh
Bây giờ có một mặt chính sách định hình lưu lượng và mặt khác đánh dấu các gói. Để kết nối cả hai, chúng ta cần một bộ lọc.
tham khảo man tc-mirred (8): Hành động kỳ diệu cho phép phản chiếu gói (sao chép) hoặc chuyển hướng (đánh cắp) gói mà nó nhận được. Phản chiếu là thứ đôi khi được gọi là Bộ phân tích cổng chuyển đổi (SPAN) và thường được sử dụng để phân tích và / hoặc các luồng gỡ lỗi.
tham khảo man tc-fw (8): bộ lọc điều khiển lưu lượng fw - fwmark bộ lọc fw cho phép phân loại các gói dựa trên một fwmark được đặt trước đó bởi iptables. Nếu nó giống hệt với 'tay cầm' của bộ lọc, bộ lọc khớp. iptables cho phép đánh dấu các gói đơn bằng mục tiêu MARK hoặc toàn bộ kết nối bằng CONNophone.
MAC_ADDR_ETH1 = cat /sys/class/net/eth1/address
IP_ADDR_ETH1 = ifconfig eth1 | grep 'inet addr'| cut -d ':' -f 2 | cut -d ' ' -f 1 | tr -d '\n'
tc bộ lọc thêm dev eth0 Parent 15: 0 giao thức ip prô 1 xử lý 0x2 fw hành động pedit ex munge eth src đặt $ {MAC_ADDR_ETH1} pipe \ action pedit ex munge ip src set dev eth1
hiển thị các quy tắc đặt ở trên: tc qdisc hiển thị bộ lọc dev eth0 tc hiển thị dev eth0
xóa / bỏ đặt ở trên quy tắc đặt: tc qdisc del dev eth0 root