ユーザー空間の内外でパケットをキューに入れるようにNetfilterテーブルを設定しています。これまでのテーブル構成は次のとおりです。
table inet filter {
# protocols to allow
set allowed_protocols {
type inet_proto
elements = { icmp, icmpv6 }
}
# interfaces to accept any traffic on
set allowed_interfaces {
type ifname
elements = { "lo" }
}
# services to allow
set allowed_tcp_dports {
type inet_service
elements = { ssh, 9090 }
}
# this chain gathers all accept conditions
chain allow {
ct state established,related accept
meta l4proto @allowed_protocols accept
iifname @allowed_interfaces accept
tcp dport @allowed_tcp_dports accept
}
# base-chain for traffic to this host
chain INPUT {
type filter hook input priority filter + 20
policy accept
jump allow
reject with icmpx type port-unreachable
}
chain input {
type filter hook input priority 0;
}
chain forward {
type filter hook forward priority 0;
}
chain output {
type filter hook output priority 0;
}
}
これまではよくロードされているようですnft -f
。
しかし、これらのコマンドのいずれかを実行すると...
nft add inet filter input counter queue num 0
または
nft add inet filter output counter queue num 1
...私の仮想マシンは入力への応答を完全に停止し、接続が終了したときにvagrant reload
再起動するには仮想マシンを強制終了する必要があると聞きました。これらのキューを正しく設定する方法についてお役に立てば幸いです。
オペレーティングシステム:Linux fedora 5.19.8-200.fc36.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Sep 8 19:02:21 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
徒歩旅行者:Vagrant 2.3.0
答え1
アプリケーションがキューを受信していない場合は、bypass
パケットを受け入れてみてください。
nft add inet filter input counter queue num 0 bypass
これを読んでください https://wiki.nftables.org/wiki-nftables/index.php/Queueing_to_userspace