tc は -j MARK とマークされたパケットを見ることができません。

tc は -j MARK とマークされたパケットを見ることができません。

サーバーには2つのネットワークインターフェースがあります。

  • アドレス13.0.0.254/24のeth1
  • eth0、アドレスは172.20.203.4/24です。

これら2つのネットワーク間のトラフィックをルーティングします。ミッションは、これら2つのネットワーク間の帯域幅を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ターゲットが期待どおりに機能しない問題は、その特定の機能を有効にするカーネルモジュールがないために発生します。Webフィルタ機能。このターゲットを使用するには、Linuxカーネルにコンパイルする必要があるモジュールをロードするMARK必要があります。XT_MARK

カーネル構成でプロジェクトを確認し、プロジェクトとその前提条件がコンパイルされていることをCONFIG_NETFILTER_...確認してください。プロジェクトがモジュールにコンパイルされている...XT_MARK場合は。XT_MARKmodprobe xt_mark

おすすめ記事