서버에는 2개의 네트워크 인터페이스가 있습니다.
- 주소가 13.0.0.254/24인 eth1
- eth0, 주소는 172.20.203.4/24입니다.
이 두 네트워크 간의 트래픽을 라우팅합니다. 임무는 이 두 네트워크 사이의 대역폭을 1Vbit/sec로 제한하는 것이지만 서버와 네트워크 호스트 사이의 대역폭은 제한하지 않는 것입니다(즉, FORWARD를 통과하는 모든 패킷을 제한).
iptables -t mangle -A POSTROUTING -s 13.0.0.0/24 -d 172.20.203.0/24 -j MARK --set-mark 0x0001
iptables -t mangle -A POSTROUTING -s 172.20.203.0/24 -d 13.0.0.0/24 -j MARK --set-mark 0x0002
# eth1
tc qdisc add dev eth1 root handle 1:0 htb default 2
tc class add dev eth1 parent 1:0 classid 1:1 htb rate 1000mbps ceil 1000mbps
tc class add dev eth1 parent 1:1 classid 1:2 htb rate 999mbps ceil 1000mbps
tc class add dev eth1 parent 1:1 classid 1:3 htb rate 1mbps
tc qdisc add dev eth1 parent 1:2 handle 2:0 sfq perturb 10
tc qdisc add dev eth1 parent 1:3 handle 3:0 sfq perturb 10
tc filter add dev eth1 parent 1:0 handle 1 fw flowid 1:3
tc filter add dev eth1 parent 1:0 handle 2 fw flowid 1:3
# eth0
tc qdisc add dev eth0 root handle 1:0 htb default 2
tc class add dev eth0 parent 1:0 classid 1:1 htb rate 1000mbps ceil 1000mbps
tc class add dev eth0 parent 1:1 classid 1:2 htb rate 999mbps ceil 1000mbps
tc class add dev eth0 parent 1:1 classid 1:3 htb rate 1mbps
tc qdisc add dev eth0 parent 1:2 handle 2:0 sfq perturb 10
tc qdisc add dev eth0 parent 1:3 handle 3:0 sfq perturb 10
tc filter add dev eth0 parent 1:0 handle 2 fw flowid 1:3
tc filter add dev eth0 parent 1:0 handle 1 fw flowid 1:3
이것은 작동하지 않습니다. 이것으로 시작하면:
tc qdisc add dev eth1 root handle 1:0 htb default 3
tc qdisc add dev eth0 root handle 1:0 htb default 3
효과가있다. 문제는 필터 설정에 있습니다.
iptables -L -v -n -t mangle
패킷이 MARK 규칙을 통과하고 있음을 나타냅니다. POSTROUTING에서는 패킷을 표시하지 않고 FORWARD 또는 PREROUTING에서는 표시하려고 했지만 이 역시 작동하지 않았습니다. 내가 뭘 잘못했나요?
다음은 몇 가지 진단입니다.
# tc -s -d -r filter show dev eth0
filter parent 1: protocol [768] pref 49151 fw
filter parent 1: protocol [768] pref 49151 fw handle 0x1 classid 1:3
filter parent 1: protocol [768] pref 49152 fw
filter parent 1: protocol [768] pref 49152 fw handle 0x2 classid 1:3
# tc -s -d -r filter show dev eth1
filter parent 1: protocol [768] pref 49151 fw
filter parent 1: protocol [768] pref 49151 fw handle 0x2 classid 1:3
filter parent 1: protocol [768] pref 49152 fw
filter parent 1: protocol [768] pref 49152 fw handle 0x1 classid 1:3
커널 구성:
/boot # uname -a
Linux armada-sc-02 2.6.32-5-amd64 #1 SMP Sun May 6 04:00:17 UTC 2012 x86_64 GNU/Linux
/boot # grep CONFIG_IP_MULTIPLE_TABLES config-2.6.32-5-amd64
CONFIG_IP_MULTIPLE_TABLES=y
/boot # grep CONFIG_IP_ADVANCED_ROUTER config-2.6.32-5-amd64
CONFIG_IP_ADVANCED_ROUTER=y
/boot # grep CONFIG_IP_ROUTE_FWMARK config-2.6.32-5-amd64
답변1
MARK
IPTABLES
타겟이 예상대로 작동하지 않는 문제는 해당 특정 기능을 활성화하는 커널 모듈이 없기 때문에 발생합니다.웹 필터기능. 이 타겟을 사용하려면 Linux 커널로 컴파일해야 하는 모듈을 MARK
로드해야 합니다 .XT_MARK
커널 구성에서 프로젝트를 확인 하고 프로젝트 와 해당 전제조건이 컴파일되었는지 CONFIG_NETFILTER_...
확인하세요 . 프로젝트가 모듈로 컴파일된 ...XT_MARK
경우에는 .XT_MARK
modprobe xt_mark