-
-
Save dan82840/ac981a40c7a7c22234a8bfd47b97fec6 to your computer and use it in GitHub Desktop.
#!/bin/sh | |
# | |
#IFNAME="br0" | |
IFNAME="enp0s9" | |
_log_iptables() { | |
local method | |
if [ "$1" == "add" ]; then | |
method="-I" | |
else | |
method="-D" | |
fi | |
iptables -t mangle $method PREROUTING -p icmp -j LOG --log-level 6 \ | |
--log-prefix "mangle:PREROUTING " >/dev/null 2>&1 | |
iptables -t mangle $method INPUT -p icmp -j LOG --log-level 6 \ | |
--log-prefix "mangle:INPUT " >/dev/null 2>&1 | |
iptables -t mangle $method FORWARD -p icmp -j LOG --log-level 6 \ | |
--log-prefix "mangle:FORWARD " >/dev/null 2>&1 | |
iptables -t mangle $method OUTPUT -p icmp -j LOG --log-level 6 \ | |
--log-prefix "mangle:OUTPUT " >/dev/null 2>&1 | |
iptables -t mangle $method POSTROUTING -p icmp -j LOG --log-level 6 \ | |
--log-prefix "mangle:POSTROUTING " >/dev/null 2>&1 | |
} | |
flush_log_iptables() { | |
_log_iptables "del" | |
} | |
setup_log_iptables() { | |
#iptables -t raw -A OUTPUT -p icmp -j TRACE | |
#iptables -t raw -A PREROUTING -p icmp -j TRACE | |
_log_iptables "add" | |
} | |
_log_ebtables() { | |
local method | |
if [ "$1" == "add" ]; then | |
method="-I" | |
else | |
method="-D" | |
fi | |
ebtables -t broute $method BROUTING -p ipv4 --ip-proto 1 --log-level 6 --log-ip \ | |
--log-prefix "[EBT]broute:BROUTING" -j ACCEPT | |
ebtables -t nat $method OUTPUT -p ipv4 --ip-proto 1 --log-level 6 --log-ip \ | |
--log-prefix "[EBT]nat:OUTPUT" -j ACCEPT | |
ebtables -t nat $method PREROUTING -p ipv4 --ip-proto 1 --log-level 6 --log-ip \ | |
--log-prefix "[EBT]nat:PREROUTING" -j ACCEPT | |
ebtables -t filter $method INPUT -p ipv4 --ip-proto 1 --log-level 6 --log-ip \ | |
--log-prefix "[EBT]filter:INPUT" -j ACCEPT | |
ebtables -t filter $method FORWARD -p ipv4 --ip-proto 1 --log-level 6 --log-ip \ | |
--log-prefix "[EBT]filter:FORWARD" -j ACCEPT | |
ebtables -t filter $method OUTPUT -p ipv4 --ip-proto 1 --log-level 6 --log-ip \ | |
--log-prefix "[EBT]filter:OUTPUT" -j ACCEPT | |
ebtables -t nat $method POSTROUTING -p ipv4 --ip-proto 1 --log-level 6 --log-ip \ | |
--log-prefix "[EBT]nat:POSTROUTING" -j ACCEPT | |
} | |
flush_log_ebtables() { | |
_log_ebtables "del" | |
} | |
setup_log_ebtables() { | |
_log_ebtables "add" | |
} | |
flush_log_tc() { | |
tc qdisc del dev $IFNAME root | |
tc qdisc del dev $IFNAME handle ffff: ingress | |
tc qdisc del dev ifb0 root | |
tc qdisc add dev ifb0 root handle 1: htb | |
tc qdisc del dev ifb1 root | |
tc qdisc add dev ifb1 root handle 1: htb | |
} | |
setup_log_tc() { | |
tc qdisc add dev ifb0 root handle 1: htb default 2 | |
tc class add dev ifb0 parent 1: classid 1:1 htb rate 2Mbit | |
tc class add dev ifb0 parent 1: classid 1:2 htb rate 10Mbit | |
tc filter add dev ifb0 parent 1: protocol ip prio 1 u32 \ | |
match ip protocol 1 0xff flowid 1:1 \ | |
action simple "tc[ifb0]egress" | |
tc qdisc add dev ifb0 ingress | |
tc filter add dev ifb0 parent ffff: protocol ip prio 1 u32 \ | |
match ip protocol 1 0xff \ | |
action simple "tc[ifb0]ingress" | |
tc qdisc add dev ifb1 root handle 1: htb default 2 | |
tc class add dev ifb1 parent 1: classid 1:1 htb rate 2Mbit | |
tc class add dev ifb1 parent 1: classid 1:2 htb rate 10Mbit | |
tc filter add dev ifb1 parent 1: protocol ip prio 1 u32 \ | |
match ip protocol 1 0xff flowid 1:1 \ | |
action simple "tc[ifb1]egress" | |
tc qdisc add dev ifb1 ingress | |
tc filter add dev ifb1 parent ffff: protocol ip prio 1 u32 \ | |
match ip protocol 1 0xff \ | |
action simple "tc[ifb1]ingress" | |
tc qdisc add dev $IFNAME root handle 1: htb default 2 | |
tc class add dev $IFNAME parent 1: classid 1:1 htb rate 2Mbit | |
tc class add dev $IFNAME parent 1: classid 1:2 htb rate 10Mbit | |
tc filter add dev $IFNAME parent 1: protocol ip prio 1 u32 \ | |
match ip protocol 1 0xff flowid 1:1 \ | |
action simple "tc[$IFNAME]egress" pipe \ | |
action mirred egress redirect dev ifb0 | |
tc qdisc add dev $IFNAME ingress | |
tc filter add dev $IFNAME parent ffff: protocol ip prio 1 u32 \ | |
match ip protocol 1 0xff \ | |
action simple "tc[$IFNAME]ingress" pipe \ | |
action mirred egress redirect dev ifb1 | |
} | |
_flush_log() { | |
flush_log_iptables | |
flush_log_ebtables | |
flush_log_tc | |
} | |
_setup_log() { | |
_flush_log | |
setup_log_iptables | |
setup_log_ebtables | |
setup_log_tc | |
} | |
main() { | |
local argc=$1; shift | |
local action=$1 | |
[ "$(whoami)" != "root" ] && { | |
echo "Need root user to execute !!!" | |
exit 1 | |
} | |
rm -f /tmp/tc.log | |
case "$action" in | |
"") | |
_setup_log | |
;; | |
flush) | |
_flush_log | |
;; | |
esac | |
} | |
main $# $* | |
exit 0 |
(enp0s9)[QOSL1](enp0s8) -- (intnet-1) -- (enp0s8)[QoS-Router](enp0s3) | |
+---- (enp0s3) + | |
+-- (br0) --+-- (enp0s9) -- (intnet-2) -- (enp0s8)[QOSR1](enp0s3) | |
+-- (enp0s10) --(intnet-3) -- (enp0s8)[QOSR2](enp0s3) |
IFNAME="br0"
[EBT]broute:BROUTING IN=enp0s9 OUT= MAC source = 08:00:27:f9:14:fa MAC dest = 08:00:27:2c:06:4e proto = 0x0800
IP SRC=192.168.22.2 IP DST=192.168.11.2, IP tos=0x00, IP proto=1
[EBT]nat:PREROUTING IN=enp0s9 OUT= MAC source = 08:00:27:f9:14:fa MAC dest = 08:00:27:2c:06:4e proto = 0x0800
IP SRC=192.168.22.2 IP DST=192.168.11.2, IP tos=0x00, IP proto=1
[EBT]filter:INPUT IN=enp0s9 OUT= MAC source = 08:00:27:f9:14:fa MAC dest = 08:00:27:2c:06:4e proto = 0x0800
IP SRC=192.168.22.2 IP DST=192.168.11.2, IP tos=0x00, IP proto=1
simple: tc[br0]ingress_1
simple: tc[ifb1]egress_1
mangle:PREROUTING IN=br0 OUT= MAC=08:00:27:2c:06:4e:08:00:27:f9:14:fa:08:00 SRC=192.168.22.2 DST=192.168.11.2 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=42684 DF PROTO=ICMP TYPE=8 CODE=0 ID=2616 SEQ=1
mangle:FORWARD IN=br0 OUT=enp0s8 MAC=08:00:27:2c:06:4e:08:00:27:f9:14:fa:08:00 SRC=192.168.22.2 DST=192.168.11.2 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=42684 DF PROTO=ICMP TYPE=8 CODE=0 ID=2616 SEQ=1
mangle:POSTROUTING IN= OUT=enp0s8 SRC=192.168.22.2 DST=192.168.11.2 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=42684 DF PROTO=ICMP TYPE=8 CODE=0 ID=2616 SEQ=1
mangle:PREROUTING IN=enp0s8 OUT= MAC=08:00:27:ab:b9:b3:08:00:27:6a:dc:9d:08:00 SRC=192.168.11.2 DST=192.168.11.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=57017 PROTO=ICMP TYPE=0 CODE=0 ID=2616 SEQ=1
mangle:FORWARD IN=enp0s8 OUT=br0 MAC=08:00:27:ab:b9:b3:08:00:27:6a:dc:9d:08:00 SRC=192.168.11.2 DST=192.168.22.2 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=57017 PROTO=ICMP TYPE=0 CODE=0 ID=2616 SEQ=1
mangle:POSTROUTING IN= OUT=br0 SRC=192.168.11.2 DST=192.168.22.2 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=57017 PROTO=ICMP TYPE=0 CODE=0 ID=2616 SEQ=1
simple: tc[br0]egress_1
simple: tc[ifb0]egress_1
[EBT]nat:OUTPUT IN= OUT=enp0s9 MAC source = 08:00:27:2c:06:4e MAC dest = 08:00:27:f9:14:fa proto = 0x0800
IP SRC=192.168.11.2 IP DST=192.168.22.2, IP tos=0x00, IP proto=1
[EBT]filter:OUTPUT IN= OUT=enp0s9 MAC source = 08:00:27:2c:06:4e MAC dest = 08:00:27:f9:14:fa proto = 0x0800
IP SRC=192.168.11.2 IP DST=192.168.22.2, IP tos=0x00, IP proto=1
[EBT]nat:POSTROUTING IN= OUT=enp0s9 MAC source = 08:00:27:2c:06:4e MAC dest = 08:00:27:f9:14:fa proto = 0x0800
IP SRC=192.168.11.2 IP DST=192.168.22.2, IP tos=0x00, IP proto=1
IFNAME="enp0s9"
simple: tc[enp0s9]ingress_1
simple: tc[ifb1]egress_1
[EBT]broute:BROUTING IN=enp0s9 OUT= MAC source = 08:00:27:f9:14:fa MAC dest = 08:00:27:2c:06:4e proto = 0x0800
IP SRC=192.168.22.2 IP DST=192.168.11.2, IP tos=0x00, IP proto=1
[EBT]nat:PREROUTING IN=enp0s9 OUT= MAC source = 08:00:27:f9:14:fa MAC dest = 08:00:27:2c:06:4e proto = 0x0800
IP SRC=192.168.22.2 IP DST=192.168.11.2, IP tos=0x00, IP proto=1
[EBT]filter:INPUT IN=enp0s9 OUT= MAC source = 08:00:27:f9:14:fa MAC dest = 08:00:27:2c:06:4e proto = 0x0800
IP SRC=192.168.22.2 IP DST=192.168.11.2, IP tos=0x00, IP proto=1
mangle:PREROUTING IN=br0 OUT= MAC=08:00:27:2c:06:4e:08:00:27:f9:14:fa:08:00 SRC=192.168.22.2 DST=192.168.11.2 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=36901 DF PROTO=ICMP TYPE=8 CODE=0 ID=2642 SEQ=1
mangle:FORWARD IN=br0 OUT=enp0s8 MAC=08:00:27:2c:06:4e:08:00:27:f9:14:fa:08:00 SRC=192.168.22.2 DST=192.168.11.2 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=36901 DF PROTO=ICMP TYPE=8 CODE=0 ID=2642 SEQ=1
mangle:POSTROUTING IN= OUT=enp0s8 SRC=192.168.22.2 DST=192.168.11.2 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=36901 DF PROTO=ICMP TYPE=8 CODE=0 ID=2642 SEQ=1
mangle:PREROUTING IN=enp0s8 OUT= MAC=08:00:27:ab:b9:b3:08:00:27:6a:dc:9d:08:00 SRC=192.168.11.2 DST=192.168.11.1 LEN=84 TOS=0x00 PREC=0x00 TTL=64 ID=58072 PROTO=ICMP TYPE=0 CODE=0 ID=2642 SEQ=1
mangle:FORWARD IN=enp0s8 OUT=br0 MAC=08:00:27:ab:b9:b3:08:00:27:6a:dc:9d:08:00 SRC=192.168.11.2 DST=192.168.22.2 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=58072 PROTO=ICMP TYPE=0 CODE=0 ID=2642 SEQ=1
mangle:POSTROUTING IN= OUT=br0 SRC=192.168.11.2 DST=192.168.22.2 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=58072 PROTO=ICMP TYPE=0 CODE=0 ID=2642 SEQ=1
[EBT]nat:OUTPUT IN= OUT=enp0s9 MAC source = 08:00:27:2c:06:4e MAC dest = 08:00:27:f9:14:fa proto = 0x0800
IP SRC=192.168.11.2 IP DST=192.168.22.2, IP tos=0x00, IP proto=1
[EBT]filter:OUTPUT IN= OUT=enp0s9 MAC source = 08:00:27:2c:06:4e MAC dest = 08:00:27:f9:14:fa proto = 0x0800
IP SRC=192.168.11.2 IP DST=192.168.22.2, IP tos=0x00, IP proto=1
[EBT]nat:POSTROUTING IN= OUT=enp0s9 MAC source = 08:00:27:2c:06:4e MAC dest = 08:00:27:f9:14:fa proto = 0x0800
IP SRC=192.168.11.2 IP DST=192.168.22.2, IP tos=0x00, IP proto=1
simple: tc[enp0s9]egress_1
simple: tc[ifb0]egress_1