Skip to content

Instantly share code, notes, and snippets.

@uchidev
Created October 2, 2020 14:43
Show Gist options
  • Save uchidev/a2b098451c8571868d078a517fd24774 to your computer and use it in GitHub Desktop.
Save uchidev/a2b098451c8571868d078a517fd24774 to your computer and use it in GitHub Desktop.

PRIO qdisc による特定ポートからの送信遮断

初期設定

$ sudo tc qdisc add dev enp3s0 root handle 1: prio priomap 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
$ sudo tc qdisc add dev enp3s0 parent 1:1 handle 10: netem loss 0%
$ sudo tc filter add dev enp3s0 protocol ip parent 1:0 prio 1 u32 match ip dport 50001 0xffff flowid 1:1

PRIO qdisc はデフォルトで三つのクラスのクラスを持つ。 priomap の設定により、三つのクラスを均等に設定すると、すべてのトラフィックは 1:3 に向かう。 1:1 に netem を設定する。loss 0% はパケットロスを起こさない設定。 filter を追加して、50001ポートに向かうトラフィックだけは 1:1 に向かうよう設定。

クラス確認

$ sudo tc class show dev enp3s0
class prio 1:1 parent 1: leaf 10:
class prio 1:2 parent 1:
class prio 1:3 parent 1:

切り替え

netem のパケットロス率を操作して、遮断状態と通過状態を切り替える。

$ sudo tc qdisc change dev enp3s0 parent 1:1 handle 10: netem loss 100%
$ sudo tc qdisc change dev enp3s0 parent 1:1 handle 10: netem loss 0%

トラフィック確認

切り替え前は 1:1 から送り出されたデータ数は 0 バイト。

$ sudo tc -s qdisc ls dev enp3s0
qdisc prio 1: root refcnt 2 bands 3 priomap  2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 Sent 1148 bytes 10 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
qdisc netem 10: parent 1:1 limit 1000
 Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0

削除

PRIO qdisc を消せば、関連するすべてが消えてデフォルトに戻る。

$ sudo tc qdisc del dev enp3s0 root
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment