1

我有这种情况。

设想

我需要阻止从专用网络(10.0.30.0)到互联网的大量上传。我通过堡垒/路由器 eth1 从专用网络路由 0.0.0.0/0 流量。

我在那里转发: sudo sysctl -w net.ipv4.ip_forward=1

因为我们在 NAT 后面: iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

有用。

然后我试图限制来自 eth1 的下载带宽(因此限制从子网上传),但我无法正确标记包:

#! /bin/bash
NETCARDOUT=eth0
NETCARDIN=eth1
MAXBANDWIDTH=1000000
SUBNET=10.0.30.0/24
mark=1
bandwidth=100

#Allow forwarding using one interface only
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o $NETCARDOUT -j MASQUERADE
iptables -t mangle -A FORWARD -i $NETCARDIN -j MARK --set-mark $mark

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

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

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

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

echo "Subnet $SUBNET is attached to mark $mark and limited to $bandwidth kbps"

似乎带有标记的 iptables 规则不起作用。

到目前为止,我已经设法阻止了 eth0 上传,但它不一样。为此,我使用仅 TC 脚本而不标记连接或包。我不希望堡垒上传受到限制,因此它不是一个有效的解决方案。

下一步将是减少具有大量字节的连接的带宽。我认为 connbytes 是要走的路,但我需要先解决这一步。我认为 MASQUERADE 让我的生活变得更加艰难:D

谢谢!

4

0 回答 0