當前位置:編程學習大全網 - 源碼下載 - linux中如何控制端口流量

linux中如何控制端口流量

配置網卡

建立壹臺虛擬機,並安裝完成後以橋接的方式在虛擬機上面添加兩張網卡。分別為eth0和eth1。

eth0: a.b.c.d(外網的上網地址)

eth1: 172.16.44.1(做為內網的網關)

Tip

原先我使用eth0:0的這種虛擬網卡的形式去配置壹直不成功,後來使用雙網卡的時候壹直忘了把eth0:0這張虛擬網卡刪掉導致了限速配置壹直不成功,浪費了大把的青蔥。

配置iptables nat

#開啟ip_forward

echo "1">/proc/sys/net/ipv4/ip_forward

#清除原來的防火墻規則

iptables -F

iptables -t nat -F

iptables -t mangle -F

#添加nat轉發

iptables -t nat -A POSTROUTING -s 172.16.44.0/24 -o eth0 -j MASQUERADE

通過執行上面的代碼後,局域網內的電腦就可以上網了。

端口轉發

由於我的內網還掛了網站,所以要開啟80端口的轉發。

iptables -t nat -I PREROUTING -p tcp -d a.b.c.d --dport 80 -j DNAT --to 172.16.44.210:80

iptables -t nat -I POSTROUTING -p tcp -d 172.16.44.210 --dport 80 -j SNAT --to 172.16.44.1

這條命令指定外網地址a.b.c.d的80端口轉發到172.16.44.210:80上。由於是雙網卡,所以需要做壹下回路。

下載限速

下載限速要在eth1上面做,判斷數據包的目的地址來做限制。tc包括三部分:隊列、類、過濾器。我使用了htb方式去限制速度,也可以使用cbq,但cbq配置比較復雜壹點,而且據說性能沒htb好。

#刪除原來的tc規則隊列

tc qdisc del dev eth1 root

#添加tc規則隊列

tc qdisc add dev eth1 root handle 10: htb default 256

#生成根類

tc class add dev eth1 parent 10: classid 10:1 htb rate 100mbit ceil 100mbit

#支類列表用於限制速度

#這裏的rate指的是保證帶寬,ceil是最大帶寬。

tc class add dev eth1 parent 10:1 classid 10:10 htb rate 400kbps ceil 400kbps prio 1

#添加支類規則隊列

#采用sfq偽隨機隊列,並且10秒重置壹次散列函數。

tc qdisc add dev eth1 parent 10:10 handle 101: sfq perturb 10

#建立網絡包過濾器,設置fw。

tc filter add dev eth1 parent 10: protocol ip prio 10 handle 1 fw classid 10:10

#在iptables裏面設定mark值,與上面的handle值對應。

iptables -t mangle -A POSTROUTING -d 172.16.44.130 -j MARK --set-mark 1

通過上面的代碼就可以限制172.16.44.130這臺機子的下載速度到400kbps。

Tip

經過實際測試這裏的kbps實際上就是KB/S每秒千字節。另壹個單位是kbit,這個才是每秒千比特。這裏的172.16.44.130也可以寫成壹個網段,比如:172.16.44.0/24

上傳限速

上傳限速的原理其實跟下載的差不多,只不過限制的網卡不同,要在eth0上過濾來源地址去限制。

#刪除原來的tc規則隊列

tc qdisc del dev eth0 root

#添加tc規則隊列

tc qdisc add dev eth0 root handle 20: htb default 256

#生成根類

tc class add dev eth0 parent 20: classid 20:1 htb rate 100mbit ceil 100mbit

#支類列表用於限制速度

tc class add dev eth0 parent 20:1 classid 20:10 htb rate 40kbps ceil 40kbps prio 1

#添加支類規則隊列

tc qdisc add dev eth0 parent 20:10 handle 201: sfq perturb 10

#建立網絡包過濾器

tc filter add dev eth0 parent 20: protocol ip prio 100 handle 2 fw classid 20:10

iptables -t mangle -A PREROUTING -s 172.16.44.130 -j MARK --set-mark 2

Tip

跟下載不同的是POSTROUTING要改成PREROUTING,-d改成-s。

觀察連接數

通過iptables的nat連接可以通過下面的代碼查看。至於統計連接數可以寫代碼實現,也可以利用awk,grep等工具。反正裏面的內容就是文本,處理起來也比較簡單。

cat /proc/net/ip_conntrack

寫在結尾

到此上網、端口轉發和流量限制都已經實現。下次再考慮配置個dhcp server和dnsmasq。至於壹些路由器其它諸如mac地址綁定,限制上網等用到的時候再去研究研究。

  • 上一篇:魔獸仿盛大傳奇 求極品裝備存檔(最好特戒都有)
  • 下一篇:急!!!誰有把NERO刻錄在光盤上的軟件-英文版
  • copyright 2024編程學習大全網