Câu trả lời được chọn là không chính xác / không đầy đủ. Tôi phải đối mặt với một vấn đề tương tự, câu trả lời được chọn đã giúp đỡ, nhưng không đủ.
Đầu tiên, lệnh sau không thực sự cần thiết.
tc qdisc del dev eth0 root
Nó sẽ 'xóa' gốc qdisc, nhưng ngay lập tức được thay thế bằng pfifo_fast (vì vậy bạn không bị mất kết nối).
Lệnh thứ hai:
tc qdisc thêm dev eth0 root xử lý 1: tiên sinh
Sẽ thay thế qdisc pfifo_fast bằng một tiên tri. Theo mặc định, hàng đợi có 3 băng tần (0, 1, 2) được quản lý bởi một lớp (1: 1, 1: 2 và 1: 3).
Các gói sẽ được gửi đến một trong các băng tần đó bằng trường TOS của gói IP. Cấu hình này được hiển thị khi bạn thực thi:
tc qdisc ls
nhìn vào các giá trị 'tiên tri'.
Sau đó, bạn thêm một netem qdisc:
tc qdisc thêm dev eth0 cha 1: 1 xử lý 2: độ trễ netem 500ms
Với lệnh này, bạn trì hoãn tất cả lưu lượng truy cập vào băng tần 1: 1 (cho đến khi bộ lọc được đặt đúng chỗ).
Nhưng có hai hãy cẩn thận:
- Lưu lượng truy cập của bạn có thể có giá trị TOS khác nhau và sau đó được gửi đến một băng tần khác.
- Các qdisc có thể được cấu hình để lưu lượng truy cập đến một băng tần khác.
Sau đây đã giải quyết vấn đề của tôi để không bị ảnh hưởng bởi netem trong khi bộ lọc không được áp dụng. Thay vì các bước trên, tôi đã làm:
tc qdisc thêm dev eth0 root xử lý 1: tiên tri 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
Điều này sẽ gửi tất cả lưu lượng theo mặc định cho băng tần 1: 3.
Sau đó, tôi đã thêm quy tắc để trì hoãn lưu lượng:
tc qdisc thêm dev eth0 cha mẹ 1: 1 xử lý 10: độ trễ netem 100ms 10ms
Điều này tạo ra qdisc trong băng 0, nhưng vì tất cả lưu lượng truy cập vào băng 3, nên nó không ảnh hưởng đến tôi.
Sau đó, tôi đã thêm bộ lọc:
bộ lọc tc thêm dev eth0 giao thức ip cha mẹ 1: 0 tiên sinh 1 u32 khớp ip dst 10.0.0.1 / 32 kết hợp ip dport 80 0xffff Flowid 1: 1
Bây giờ với bộ lọc, chỉ IP / cổng được chọn sẽ bị ảnh hưởng, vì chúng tôi chuyển hướng lưu lượng đã chọn sang băng tần 0.
Tất cả các lưu lượng khác tiếp tục không bị ảnh hưởng kể từ khi nó tiếp tục chảy sang băng 3.