Tùy chọn để quản lý băng thông trên kết nối internet được chia sẻ


13

Tiền đề:

Vị trí nông thôn, không có nhiều lựa chọn cho kết nối internet băng thông cao. Nhanh nhất cho đến nay là Internet vệ tinh, nhưng nó đắt tiền (cả thiết bị và chi phí hàng tháng và có những hạn chế về độ trễ), vì vậy nhiều hộ gia đình muốn chia sẻ nó.

Bản thân việc này rất đơn giản - thiết lập bộ định tuyến với mạng con cho từng hộ gia đình (Vlan hoặc cổng vật lý), chặn lưu lượng giữa chúng và định cấu hình modem để định tuyến đến các mạng con đó hoặc thiết lập NAT kép.

Vấn đề:

Cách TCP hoạt động bình thường có nghĩa là mỗi kết nối TCP sẽ ít nhiều nhận được 1 / n băng thông có sẵn, trong đó n là số lượng kết nối. Vì vậy, nếu một hộ gia đình / người dùng tạo ra nhiều kết nối, họ sẽ nhận được một phần lớn hơn trong tổng thể kết nối. Điều này không đặc biệt công bằng - với một liên kết bão hòa, mỗi hộ gia đình sẽ có được một phần bằng nhau. Mặt khác, khi không có ai khác sử dụng kết nối, có thể sử dụng toàn bộ băng thông.

Ví dụ: có 4 hộ gia đình chia sẻ kết nối xuống 12Mbit / s. Nếu một trong số họ đang tải xuống / phát trực tuyến / bất cứ điều gì, họ sẽ có thể sử dụng toàn bộ 12Mbit / s (hoặc gần đủ). Nếu 2 hộ gia đình đang sử dụng kết nối, họ sẽ nhận được 6Mbit / s, bất kể một hộ gia đình đang tải xuống 1 tệp và 11. còn lại (không có quản lý băng thông, mỗi tệp sẽ tải xuống với tốc độ khoảng 1Mbit / giây trong trường hợp đó) nhận 4Mbit / s mỗi cái và cứ thế.

Những gì tôi đã làm việc cho đến nay:

Vị trí tốt nhất để thực hiện một chính sách như thế này (đối với hạ lưu) sẽ là ở đầu kia của đường ống hẹp, tức là tại ISP. Rõ ràng, điều đó là không thể trong trường hợp này, vì vậy sẽ tốt hơn nếu có thể ước chừng nó bằng cách nào đó. Nhưng bằng cách nào? Có bộ định tuyến ngoài hỗ trợ nào đó như thế này không? Tôi có thể định cấu hình hộp Linux hoặc BSD để làm việc đó không? Nó không phải chống đạn - máy chủ TCP hoạt động sai hoặc dịch vụ UDP tích cực có thể phá vỡ mọi thứ tôi có thể làm ở cuối - nhưng nó sẽ hoạt động trong trường hợp phổ biến của hầu hết lưu lượng truy cập bao gồm nhiều RFC tuân thủ RFC Kết nối TCP.

Để rõ ràng, tôi không nói về việc ưu tiên các ứng dụng cụ thể, mà là tổng hợp lưu lượng truy cập đến / từ các thiết bị ethernet cụ thể hoặc dải địa chỉ IP. Cung cấp cho một số lưu lượng truy cập có mức độ ưu tiên cao hơn các lưu lượng khác có vẻ được hỗ trợ tốt, nhưng tình huống không rõ ràng khi cố gắng phân bổ băng thông đều cho các lớp lưu lượng.

Có rất nhiều thông tin được viết xấu / không suy nghĩ lại / thông tin không được thông tin về định hình lưu lượng truy cập trên web. Các tài liệu về phần cứng bộ định tuyến là không đặc biệt khủng khiếp, vì vậy tôi dường như đang chạy xung quanh trong vòng tròn.

Theo tôi hiểu, cách để khiến TCP hoạt động theo cách này là thực tế mô phỏng một đường ống hẹp hơn một chút so với thực tế có sẵn và bỏ các gói một cách giả tạo để khiến nó quay trở lại. Vì vậy, tôi nghĩ rằng sẽ khá đơn giản để cung cấp cho mọi người chính xác 3Mbit / s trong ví dụ trên bằng cách bỏ bất kỳ gói tin bổ sung nào. Điều này không thực sự sử dụng kết nối một cách hiệu quả vì hầu hết thời gian có dung lượng dự phòng.

Có cách nào để làm những gì tôi yêu cầu không? Tôi đang đi về nó sai? Tôi (hoặc đúng hơn là các hộ gia đình trong câu hỏi) sẵn sàng chi tiền cho việc này - có thể là một bộ định tuyến / thiết bị có giá vừa phải hoặc một hộp chung để chạy bản phân phối Linux hoặc BSD.

Câu trả lời:


4

Nếu tôi xây dựng một cái gì đó để giải quyết vấn đề này, tôi sẽ thiết lập điều này:

Chúng tôi ở đây sẽ lấy ví dụ của bạn về 4 máy tính chia sẻ một liên kết. Mạng sẽ có hình dạng như thế này:

{ ISP }=========[ SOHO router] ===LAN1=== [eth0 |Linux Box| eth1] ===LAN2=== Home Desktops/Laptops

Giả sử bạn sử dụng địa chỉ IP tĩnh trong LAN2:

Linux Box 192.168.1.1
Home 1    192.168.1.11
Home 2    192.168.1.12
Home 3    192.168.1.13
Home 4    192.168.1.14

Trước tiên tôi sẽ viết một đoạn script nhỏ để phát hiện khách hàng nào đang tăng bằng cách ping chúng và viết kết quả ở đâu đó. "Đây là một bài tập cho người đọc" Tính tổng số máy chủ được kết nối (1-4)

Hãy chắc chắn để xử lý trường hợp không có máy chủ trực tuyến.

Chia tổng số băng thông nhưng số lượng máy chủ được kết nối. (12Mb cho 1, 6Mb cho 2, 4Mb cho 3, 3Mb cho 4)

Tiếp theo sử dụng tc với thuật toán HTB để giới hạn băng thông của từng địa chỉ trên thiết bị phía WAN. Đầu tiên, tạo lớp gốc:

DEV="eth0"
TC="/sbin/tc"
TOT_BW=12
$TC qdisc add dev $DEV root handle 1: htb default 99

Sau đó, thêm một lớp cho mỗi "khách hàng" (Ở đây, ví dụ: 3 khách hàng)

NB_CLT=3
CLT_BW=$(($TOT_BW/$NB_CLT))mbit
for i in seq $NB_CLT
do
    $TC class add def $DEV parent 1: classid 1:$i htb rate $CLT_BW ceil $CLT_BW burst 15k cburst 1500
    $TC filter add dev $DEV protocol ip parent 1:0 prio 1 flowid 1:$i u32 \
     match ip dst 192.168.1.1$i/32 \
     match ip src [Router IP in LAN1]/32
done

(tập lệnh trên hoàn toàn chưa được kiểm tra và KHÔNG gõ lỗi)

Bây giờ bạn vẫn phải viết đúng kịch bản để được chạy mỗi phút và làm mới các thùng / bộ lọc mỗi khi máy chủ mới tăng hoặc giảm.

Tôi hy vọng điều đó sẽ chỉ cho bạn đi đúng hướng, chúc may mắn.

Giải pháp thay thế

Cài đặt phần mềm QoS cục bộ trên tất cả các máy chủ để hạn chế băng thông của chúng. Tôi cá nhân sử dụng NetLimiter (Không miễn phí)


Vấn đề với cách tiếp cận của tôi là mọi máy chủ lưu trữ đều giảm băng thông của người khác ngay cả khi họ không sử dụng tất cả phần của mình. Nhưng thiết kế một cái gì đó chỉ thực thi chia sẻ khi nhu cầu cao ... rất khó.
mveroone

2

OpenWRT dường như hỗ trợ nó, mặc dù tôi chưa bao giờ sử dụng nó. Bạn có thể xem trang Kiểm soát lưu lượng mạng trên trang web của họ và đặc biệt là ví dụ thứ hai: chia sẻ băng thông đơn giản (hay còn gọi là định hình lưu lượng truy cập) với HTB . Điều này liên quan đến các cuộc gọi đơn giản đến qdisc, vì vậy bất kỳ hộp Linux nào cũng có thể thực hiện được.


Tôi nhận thấy rằng ví dụ đó là dành cho phía tải lên . Tôi hiện đang đọc theo cách của mình thông qua Linux Advanced Routing & Control Control HOWTO có vẻ hơi hứa hẹn và hy vọng cho phép tôi hiểu được tất cả các tcquy tắc này . Máy ép giao thông của Linux chắc chắn đang có triển vọng.
pmdj

0

Thiết lập được mô tả trong /superuser//a/1210164/257859 thực hiện chính xác điều đó:

[...] Các hàng đợi phân phối đồng đều giới hạn BW giữa tất cả các máy khách LAN (chính xác là IP LAN).


1
Xin vui lòng không gửi cùng một câu trả lời cho nhiều câu hỏi. Nếu cùng một thông tin thực sự trả lời cả hai câu hỏi, thì một câu hỏi (thường là câu hỏi mới hơn) nên được đóng lại như một bản sao của câu hỏi khác. Bạn có thể chỉ ra điều này bằng cách bỏ phiếu để đóng nó dưới dạng trùng lặp hoặc, nếu bạn không đủ danh tiếng cho điều đó, hãy giơ cờ để cho biết đó là bản sao. Mặt khác, điều chỉnh câu trả lời của bạn cho câu hỏi này và không chỉ dán cùng một câu trả lời ở nhiều nơi.
DavidPostill

@DavidPostill Tôi nghĩ về việc bỏ phiếu để đóng như một bản sao nhưng do dự vì đây là câu hỏi 3 năm tuổi. Tôi thậm chí đã tìm kiếm meta.superuser và tìm thấy một câu hỏi có liên quan tại meta.superuser.com/questions35324/iêu . Sau khi đọc meta tôi nghĩ rằng tình hình rất phức tạp (tôi có câu trả lời cho hai câu hỏi cũ với đủ thảo luận trong mỗi câu hỏi) và để lại một câu trả lời con trỏ ngắn có vẻ ít nhất là "không tệ". Tôi đang mở để nghe suy nghĩ của bạn mặc dù.
ndemou
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.