我有这种情况。
我需要阻止从专用网络(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
谢谢!