আমি কীভাবে আইপি দ্বারা লিনাক্সে ট্র্যাফিক রূপ দিতে পারি?


16

আমাদের একটি স্বচ্ছ প্রক্সি সেটআপ আছে। আমি লিনাক্সে ট্র্যাফিক গঠনের চেষ্টা করেছি এবং অনলাইনে যা খুজে পাচ্ছিলাম তা হ'ল ইন্টারফেসের মাধ্যমে ট্র্যাফিক সীমাবদ্ধ করা (eth0 / eth1 ...)।

আইপি ঠিকানা বা আইপি ব্যাপ্তি দ্বারা আমাকে ব্যান্ডউইথ (কোনও নির্দিষ্ট সীমা অতিক্রম না করা) সীমাবদ্ধ করতে হবে এবং আমি এটি করার কোনও উপায় খুঁজে পাচ্ছি না।

এটা করার কোন উপায় আছে?

উত্তর:


18

কার্নেলের ট্র্যাফিক আকার দেওয়ার স্তরটি মূলত আপনার নেটওয়ার্ক কার্ডের সাথে একটি প্যাকেট শিডিয়ুলার সংযুক্ত থাকে। সুতরাং একটি ট্র্যাফিক আকার দেওয়ার নীতিটি একটি নেটওয়ার্ক কার্ডে প্রযোজ্য।

আপনার ক্ষেত্রে আপনি যা করতে পারেন তা হ'ল সংযুক্ত আইপি এবং ব্যান্ডউইথের একটি তালিকা তৈরি করা এবং তারপরে প্রতিটি আইপি-র জন্য আপনি তৈরি করুন:

  • শ্রেণিবদ্ধ দ্বারা চিহ্নিত একটি ট্র্যাফিক আকার দেওয়ার নিয়ম
  • একটি নেটফিল্টার নিয়ম যা প্যাকেটগুলিকে নির্দিষ্ট চিহ্নের মান হিসাবে চিহ্নিত করবে
  • একটি ফিল্টার যা সেই প্যাকেটগুলিকে শ্রেণিবদ্ধের সাথে চিহ্নিত করে, এইভাবে নির্দিষ্ট প্যাকেটে ট্র্যাফিক নিয়ন্ত্রণের নিয়ম প্রয়োগ করে।

@ জোরেদাচে প্রদত্ত উদাহরণটি কাজ করে তবে আমি ব্যক্তিগতভাবে প্যাকেটগুলি ফিল্টার করতে টিসির পরিবর্তে নেটফিল্টার সক্ষমতা এবং শেপিং অ্যালগরিদমের জন্য সিবিকিউয়ের পরিবর্তে এইচটিবি ব্যবহার করতে পছন্দ করি। সুতরাং আপনি এই জাতীয় কিছু চেষ্টা করতে পারেন (সহযোগী অ্যারেগুলির জন্য বাশ 4 প্রয়োজন):

#! /bin/bash
NETCARD=eth0
MAXBANDWIDTH=100000

# reinit
tc qdisc del dev $NETCARD root handle 1
tc qdisc add dev $NETCARD root handle 1: htb default 9999

# create the default class
tc class add dev $NETCARD parent 1:0 classid 1:9999 htb rate $(( $MAXBANDWIDTH ))kbit ceil $(( $MAXBANDWIDTH ))kbit burst 5k prio 9999

# control bandwidth per IP
declare -A ipctrl
# define list of IP and bandwidth (in kilo bits per seconds) below
ipctrl[192.168.1.1]="256"
ipctrl[192.168.1.2]="128"
ipctrl[192.168.1.3]="512"
ipctrl[192.168.1.4]="32"

mark=0
for ip in "${!ipctrl[@]}"
do
    mark=$(( mark + 1 ))
    bandwidth=${ipctrl[$ip]}

    # traffic shaping rule
    tc class add dev $NETCARD parent 1:0 classid 1:$mark htb rate $(( $bandwidth ))kbit ceil $(( $bandwidth ))kbit burst 5k prio $mark

    # netfilter packet marking rule
    iptables -t mangle -A INPUT -i $NETCARD -s $ip -j CONNMARK --set-mark $mark

    # filter that bind the two
    tc filter add dev $NETCARD parent 1:0 protocol ip prio $mark handle $mark fw flowid 1:$mark

    echo "IP $ip is attached to mark $mark and limited to $bandwidth kbps"
done

#propagate netfilter marks on connections
iptables -t mangle -A POSTROUTING -j CONNMARK --restore-mark

- সম্পাদনা: ডিফল্ট ক্লাসটি ভুলে গিয়ে স্ক্রিপ্টের শেষে চিহ্নগুলি প্রচার করতে।


umm .. তালিকায় নেই এমনদের জন্য কীভাবে ডিফল্ট ব্যান্ডউইথ সীমা যুক্ত করবেন?
কোকিজু

আপনি প্রিও সংজ্ঞা হিসাবে used চিহ্ন ব্যবহার করেছেন। সবার জন্য একই অগ্রাধিকারটি ব্যবহার করা ভাল না?
motobói

যদি আমি "iptables -t mangle -A INPUT" কে "iptables -t mangle -A OUTPUT" তে পরিবর্তন করি আমি কি আমার সার্ভার থেকে নির্দিষ্ট আইপি-তে রেটটি নিয়ন্ত্রণ করতে পারি ??
ফ্রাঙ্ক বারসেনেস

এর পরে আমি কীভাবে সেটিংস পুনরুদ্ধার করব?
স্টিফান রোগিন

একক আইপি-র লুপ ছাড়াই ম্যানুয়ালি কমান্ড লিখতে, এই কাজটি মনে হচ্ছে না Cant
অ্যাডোনস পিটোগো

5

ঠিকাদারের ওয়েব ক্যাম সীমাবদ্ধ পরিমাণ ব্যান্ডউইদথের মধ্যে সীমাবদ্ধ করার জন্য এ জাতীয় কিছু আমার পক্ষে কাজ করেছিল। টিসির জন্য বিশদটির জন্য ম্যান পৃষ্ঠাটি দেখুন।

#!/bin/bash
set -x

DEV=eth0
export DEV

tc qdisc del dev $DEV root
tc qdisc del dev $DEV root
tc qdisc add dev $DEV root handle 1: cbq avpkt 1000 bandwidth 100mbit

# setup a class to limit to 1500 kilobits/s
tc class add dev $DEV parent 1: classid 1:1 cbq rate 1500kbit \
   allot 1500 prio 5 bounded isolated

# add traffic from 10.2.1.37 to that class
tc filter add dev $DEV parent 1: protocol ip prio 16 u32 \
   match ip src 10.2.1.37 flowid 1:1

3
সিবিকিউ কিছুটা পরিত্যাজ্য ... আপনি এইচটিবি ব্যবহার করতে এবং একই ফলাফলটি অর্জন করতে খুব সহজ পাবেন
জুলিয়েন ভেহেন্ট

1
ডিইভি রফতানি করার প্রয়োজন নেই যদি এটি কেবল এই স্ক্রিপ্টে ব্যবহৃত হয় ....
গার্ট ভ্যান ডান বার্গ

1

আমি নিশ্চিত না যে আমি আপনার প্রশ্নটি সঠিকভাবে বুঝতে পেরেছি।

স্বচ্ছ প্রক্সিং (এইচটিটিপি-র স্কুইড হিসাবে) বেশিরভাগ আগত ডেটা নিয়ন্ত্রণ করতে ব্যবহৃত হয়। বহির্গামী ডেটা নিয়ন্ত্রণ করতে ট্র্যাফিক শেপিংয়ের সময় ব্যবহৃত হয়।

আপনাকে আরও বিশদ সরবরাহ করতে হবে। যদি আপনার এইচটিটিপি প্রক্সিটির পিছনে প্রচুর ওয়ার্কস্টেশন রয়েছে এবং তাদের ডাউনলোডের গতি সীমাবদ্ধ করার চেষ্টা করছেন, আপনি স্কুইড + বিলম্ব পুলের মতো আরও কিছু পেতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.