de linuxmanr4, 10 meses han pasado desde su publicación, escrito en Bash.
Insertar vínculo
  1. #! /bin/bash
  2. NETCARD=eth0
  3. MAXBANDWIDTH=100000
  4.  
  5. # reinit
  6. tc qdisc del dev $NETCARD root handle 1
  7. tc qdisc add dev $NETCARD root handle 1: htb default 9999
  8.  
  9. # create the default class
  10. tc class add dev $NETCARD parent 1:0 classid 1:9999 htb rate $(( $MAXBANDWIDTH ))kbit ceil $(( $MAXBANDWIDTH ))kbit burst 5k prio 9999
  11.  
  12. # control bandwidth per IP
  13. declare -A ipctrl
  14.  
  15. # define list of IP and bandwidth (in kilo bits per seconds) below
  16. ipctrl[192.168.1.1]="256"
  17. ipctrl[192.168.1.2]="256"
  18. ipctrl[192.168.1.3]="256"
  19. ipctrl[192.168.1.4]="256"
  20. ipctrl[192.168.1.5]="256"
  21. ipctrl[192.168.1.6]="256"
  22. ipctrl[192.168.1.7]="256"
  23. ipctrl[192.168.1.8]="256"
  24. ipctrl[192.168.1.9]="256"
  25. ipctrl[192.168.1.10]="256"
  26. ipctrl[192.168.1.11]="256"
  27. ipctrl[192.168.1.12]="256"
  28. ipctrl[192.168.1.13]="256"
  29. ipctrl[192.168.1.14]="256"
  30. ipctrl[192.168.1.15]="256"
  31. ipctrl[192.168.1.16]="256"
  32. ipctrl[192.168.1.17]="256"
  33. ipctrl[192.168.1.18]="256"
  34. ipctrl[192.168.1.19]="256"
  35. ipctrl[192.168.1.20]="256"
  36. ipctrl[192.168.1.21]="256"
  37. ipctrl[192.168.1.22]="256"
  38. ipctrl[192.168.1.23]="256"
  39. ipctrl[192.168.1.24]="256"
  40. ipctrl[192.168.1.25]="256"
  41. ipctrl[192.168.1.26]="256"
  42. ipctrl[192.168.1.27]="256"
  43. ipctrl[192.168.1.28]="256"
  44. ipctrl[192.168.1.29]="256"
  45. ipctrl[192.168.1.30]="256"
  46. ipctrl[192.168.1.31]="256"
  47. ipctrl[192.168.1.32]="256"
  48. ipctrl[192.168.1.33]="256"
  49. ipctrl[192.168.1.34]="256"
  50. ipctrl[192.168.1.35]="256"
  51. ipctrl[192.168.1.36]="256"
  52. ipctrl[192.168.1.37]="256"
  53. ipctrl[192.168.1.38]="256"
  54. ipctrl[192.168.1.39]="256"
  55. ipctrl[192.168.1.40]="256"
  56. ipctrl[192.168.1.41]="256"
  57. ipctrl[192.168.1.42]="256"
  58. ipctrl[192.168.1.43]="256"
  59. ipctrl[192.168.1.44]="256"
  60. ipctrl[192.168.1.45]="256"
  61. ipctrl[192.168.1.46]="256"
  62. ipctrl[192.168.1.47]="256"
  63. ipctrl[192.168.1.48]="256"
  64. ipctrl[192.168.1.49]="256"
  65. ipctrl[192.168.1.50]="256"
  66. ipctrl[192.168.1.51]="256"
  67. ipctrl[192.168.1.52]="256"
  68. ipctrl[192.168.1.53]="256"
  69. ipctrl[192.168.1.54]="256"
  70. ipctrl[192.168.1.55]="256"
  71. ipctrl[192.168.1.56]="256"
  72. ipctrl[192.168.1.57]="256"
  73. ipctrl[192.168.1.58]="256"
  74. ipctrl[192.168.1.59]="256"
  75. ipctrl[192.168.1.60]="256"
  76. ipctrl[192.168.1.61]="256"
  77. ipctrl[192.168.1.62]="256"
  78. ipctrl[192.168.1.63]="256"
  79. ipctrl[192.168.1.64]="256"
  80. ipctrl[192.168.1.65]="256"
  81. ipctrl[192.168.1.66]="256"
  82. ipctrl[192.168.1.67]="256"
  83. ipctrl[192.168.1.68]="256"
  84. ipctrl[192.168.1.69]="256"
  85. ipctrl[192.168.1.70]="256"
  86. ipctrl[192.168.1.71]="256"
  87. ipctrl[192.168.1.72]="256"
  88. ipctrl[192.168.1.73]="256"
  89. ipctrl[192.168.1.74]="256"
  90. ipctrl[192.168.1.75]="256"
  91. ipctrl[192.168.1.76]="256"
  92. ipctrl[192.168.1.77]="256"
  93. ipctrl[192.168.1.78]="256"
  94. ipctrl[192.168.1.79]="256"
  95. ipctrl[192.168.1.80]="256"
  96. ipctrl[192.168.1.81]="256"
  97. ipctrl[192.168.1.82]="256"
  98. ipctrl[192.168.1.83]="256"
  99. ipctrl[192.168.1.84]="256"
  100. ipctrl[192.168.1.85]="256"
  101. ipctrl[192.168.1.86]="256"
  102. ipctrl[192.168.1.87]="256"
  103. ipctrl[192.168.1.88]="256"
  104. ipctrl[192.168.1.89]="256"
  105. ipctrl[192.168.1.90]="256"
  106. ipctrl[192.168.1.91]="256"
  107. ipctrl[192.168.1.92]="256"
  108. ipctrl[192.168.1.93]="256"
  109. ipctrl[192.168.1.94]="256"
  110. ipctrl[192.168.1.95]="256"
  111. ipctrl[192.168.1.96]="256"
  112. ipctrl[192.168.1.97]="256"
  113. ipctrl[192.168.1.98]="256"
  114. ipctrl[192.168.1.99]="256"
  115. ipctrl[192.168.1.100]="256"
  116. ipctrl[192.168.1.101]="256"
  117. ipctrl[192.168.1.102]="256"
  118. ipctrl[192.168.1.103]="256"
  119. ipctrl[192.168.1.104]="256"
  120. ipctrl[192.168.1.105]="256"
  121. ipctrl[192.168.1.106]="256"
  122. ipctrl[192.168.1.107]="256"
  123. ipctrl[192.168.1.108]="256"
  124. ipctrl[192.168.1.109]="256"
  125. ipctrl[192.168.1.110]="256"
  126. ipctrl[192.168.1.111]="256"
  127. ipctrl[192.168.1.112]="256"
  128. ipctrl[192.168.1.113]="256"
  129. ipctrl[192.168.1.114]="256"
  130. ipctrl[192.168.1.115]="256"
  131. ipctrl[192.168.1.116]="256"
  132. ipctrl[192.168.1.117]="256"
  133. ipctrl[192.168.1.118]="256"
  134. ipctrl[192.168.1.119]="256"
  135. ipctrl[192.168.1.120]="256"
  136. ipctrl[192.168.1.121]="256"
  137. ipctrl[192.168.1.122]="256"
  138. ipctrl[192.168.1.123]="256"
  139. ipctrl[192.168.1.124]="256"
  140. ipctrl[192.168.1.125]="256"
  141. ipctrl[192.168.1.126]="256"
  142. ipctrl[192.168.1.127]="256"
  143. ipctrl[192.168.1.128]="256"
  144. ipctrl[192.168.1.129]="256"
  145. ipctrl[192.168.1.130]="256"
  146. ipctrl[192.168.1.131]="256"
  147. ipctrl[192.168.1.132]="256"
  148. ipctrl[192.168.1.133]="256"
  149. ipctrl[192.168.1.134]="256"
  150. ipctrl[192.168.1.135]="256"
  151. ipctrl[192.168.1.136]="256"
  152. ipctrl[192.168.1.137]="256"
  153. ipctrl[192.168.1.138]="256"
  154. ipctrl[192.168.1.139]="256"
  155. ipctrl[192.168.1.140]="256"
  156. ipctrl[192.168.1.141]="256"
  157. ipctrl[192.168.1.142]="256"
  158. ipctrl[192.168.1.143]="256"
  159. ipctrl[192.168.1.144]="256"
  160. ipctrl[192.168.1.145]="256"
  161. ipctrl[192.168.1.146]="256"
  162. ipctrl[192.168.1.147]="256"
  163. ipctrl[192.168.1.148]="256"
  164. ipctrl[192.168.1.149]="256"
  165. ipctrl[192.168.1.150]="256"
  166. ipctrl[192.168.1.151]="256"
  167. ipctrl[192.168.1.152]="256"
  168. ipctrl[192.168.1.153]="256"
  169. ipctrl[192.168.1.154]="256"
  170. ipctrl[192.168.1.155]="256"
  171. ipctrl[192.168.1.156]="256"
  172. ipctrl[192.168.1.157]="256"
  173. ipctrl[192.168.1.158]="256"
  174. ipctrl[192.168.1.159]="256"
  175. ipctrl[192.168.1.160]="256"
  176. ipctrl[192.168.1.161]="256"
  177. ipctrl[192.168.1.162]="256"
  178. ipctrl[192.168.1.163]="256"
  179. ipctrl[192.168.1.164]="256"
  180. ipctrl[192.168.1.165]="256"
  181. ipctrl[192.168.1.166]="256"
  182. ipctrl[192.168.1.167]="256"
  183. ipctrl[192.168.1.168]="256"
  184. ipctrl[192.168.1.169]="256"
  185. ipctrl[192.168.1.170]="256"
  186. ipctrl[192.168.1.171]="256"
  187. ipctrl[192.168.1.172]="256"
  188. ipctrl[192.168.1.173]="256"
  189. ipctrl[192.168.1.174]="256"
  190. ipctrl[192.168.1.175]="256"
  191. ipctrl[192.168.1.176]="256"
  192. ipctrl[192.168.1.177]="256"
  193. ipctrl[192.168.1.178]="256"
  194. ipctrl[192.168.1.179]="256"
  195. ipctrl[192.168.1.180]="256"
  196. ipctrl[192.168.1.181]="256"
  197. ipctrl[192.168.1.182]="256"
  198. ipctrl[192.168.1.183]="256"
  199. ipctrl[192.168.1.184]="256"
  200. ipctrl[192.168.1.185]="256"
  201. ipctrl[192.168.1.186]="256"
  202. ipctrl[192.168.1.187]="256"
  203. ipctrl[192.168.1.188]="256"
  204. ipctrl[192.168.1.189]="256"
  205. ipctrl[192.168.1.190]="256"
  206. ipctrl[192.168.1.191]="256"
  207. ipctrl[192.168.1.192]="256"
  208. ipctrl[192.168.1.193]="256"
  209. ipctrl[192.168.1.194]="256"
  210. ipctrl[192.168.1.195]="256"
  211. ipctrl[192.168.1.196]="256"
  212. ipctrl[192.168.1.197]="256"
  213. ipctrl[192.168.1.198]="256"
  214. ipctrl[192.168.1.199]="256"
  215. ipctrl[192.168.1.200]="256"
  216. ipctrl[192.168.1.201]="256"
  217. ipctrl[192.168.1.202]="256"
  218. ipctrl[192.168.1.203]="256"
  219. ipctrl[192.168.1.204]="256"
  220. ipctrl[192.168.1.205]="256"
  221. ipctrl[192.168.1.206]="256"
  222. ipctrl[192.168.1.207]="256"
  223. ipctrl[192.168.1.208]="256"
  224. ipctrl[192.168.1.209]="256"
  225. ipctrl[192.168.1.210]="256"
  226. ipctrl[192.168.1.211]="256"
  227. ipctrl[192.168.1.212]="256"
  228. ipctrl[192.168.1.213]="256"
  229. ipctrl[192.168.1.214]="256"
  230. ipctrl[192.168.1.215]="256"
  231. ipctrl[192.168.1.216]="256"
  232. ipctrl[192.168.1.217]="256"
  233. ipctrl[192.168.1.218]="256"
  234. ipctrl[192.168.1.219]="256"
  235. ipctrl[192.168.1.220]="256"
  236. ipctrl[192.168.1.221]="256"
  237. ipctrl[192.168.1.222]="256"
  238. ipctrl[192.168.1.223]="256"
  239. ipctrl[192.168.1.224]="256"
  240. ipctrl[192.168.1.225]="256"
  241. ipctrl[192.168.1.226]="256"
  242. ipctrl[192.168.1.227]="256"
  243. ipctrl[192.168.1.228]="256"
  244. ipctrl[192.168.1.229]="256"
  245. ipctrl[192.168.1.230]="256"
  246. ipctrl[192.168.1.231]="256"
  247. ipctrl[192.168.1.232]="256"
  248. ipctrl[192.168.1.233]="256"
  249. ipctrl[192.168.1.234]="256"
  250. ipctrl[192.168.1.235]="256"
  251. ipctrl[192.168.1.236]="256"
  252. ipctrl[192.168.1.237]="256"
  253. ipctrl[192.168.1.238]="256"
  254. ipctrl[192.168.1.239]="256"
  255. ipctrl[192.168.1.240]="256"
  256. ipctrl[192.168.1.241]="256"
  257. ipctrl[192.168.1.242]="256"
  258. ipctrl[192.168.1.243]="256"
  259. ipctrl[192.168.1.244]="256"
  260. ipctrl[192.168.1.245]="256"
  261. ipctrl[192.168.1.246]="256"
  262. ipctrl[192.168.1.247]="256"
  263. ipctrl[192.168.1.248]="256"
  264. ipctrl[192.168.1.249]="256"
  265. ipctrl[192.168.1.250]="256"
  266. ipctrl[192.168.1.251]="256"
  267. ipctrl[192.168.1.252]="256"
  268. ipctrl[192.168.1.253]="256"
  269. ipctrl[192.168.1.254]="256"
  270.  
  271. mark=0
  272. for ip in "${!ipctrl[@]}"
  273. do
  274.     mark=$(( mark + 1 ))
  275.     bandwidth=${ipctrl[$ip]}
  276.  
  277.     # traffic shaping rule
  278.     tc class add dev $NETCARD parent 1:0 classid 1:$mark htb rate $(( $bandwidth ))kbit ceil $(( $bandwidth ))kbit burst 5k prio $mark
  279.  
  280.     # netfilter packet marking rule
  281.     iptables -t mangle -A INPUT -i $NETCARD -s $ip -j CONNMARK --set-mark $mark
  282.  
  283.     # filter that bind the two
  284.     tc filter add dev $NETCARD parent 1:0 protocol ip prio $mark handle $mark fw flowid 1:$mark
  285.  
  286.     echo "IP $ip is attached to mark $mark and limited to $bandwidth kbps"
  287. done
  288.  
  289. #propagate netfilter marks on connections
  290. iptables -t mangle -A POSTROUTING -j CONNMARK --restore-mark