IPルールはfwmarkには適用されません

IPルールはfwmarkには適用されません

私はiptablesを使用してパケットを表示し、指示に従ってルーティングし、複数のDSL回線を介してWebトラフィックの負荷を分散したいと思います。私はCentOS 6.6、カーネル2.6.32-504.16.2.el6.x86_64、Iptables v1.4.7を使用しています。

現在、私は概念証明として次のことを行いました。

iptables -t mangle -A PREROUTING -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -j MARK --set-mark 2

また、リモート接続用のいくつかのロギングおよび安全装置も提供されています。

iptables -t mangle -A PREROUTING -p tcp --dport 22 -j ACCEPT
iptables -t mangle -A OUTPUT -j LOG --log-prefix "output "
iptables -t mangle -A PREROUTING -j LOG --log-prefix "prerouting "

だからiptables -t mangle -L -v私に与えた

Chain PREROUTING (policy ACCEPT 177 packets, 93050 bytes)
 pkts bytes target     prot opt in     out     source               destination
  164 13112 ACCEPT     tcp  --  any    any     anywhere             anywhere            tcp dpt:ssh
 7687 4287K MARK       all  --  any    any     anywhere             anywhere            MARK set 0x2
 7687 4287K LOG        all  --  any    any     anywhere             anywhere            LOG level warning prefix `prerouting '

Chain INPUT (policy ACCEPT 184 packets, 91203 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 25 packets, 3100 bytes)
 pkts bytes target     prot opt in     out     source               destination
  304 38367 MARK       all  --  any    any     anywhere             anywhere            MARK set 0x2
  304 38367 LOG        all  --  any    any     anywhere             anywhere            LOG level warning prefix `output '

Chain POSTROUTING (policy ACCEPT 25 packets, 3100 bytes)
 pkts bytes target     prot opt in     out     source               destination

代替ルーティングテーブルを設定しました。 ip route show table DSL2私にください

10.77.0.0/16 via 112.112.224.1 dev eth4
112.112.0.0/16 via 112.112.224.1 dev eth4
default via 10.177.55.33 dev eth2

(eth4 経由の 112.112.0.0/16 および 10.77.0.0/16 は LAN、eth2 経由の 10.177.55.33 は DSL ルータの 1 つです.)

タグが2に設定されている場合は、テーブルDSL2を使用するようにポリシーを追加しましたip rule。示す:

0:      from all lookup local
32764:  from all fwmark 0x2 lookup DSL2
32765:  from all fwmark 0x1 lookup DSL1
32766:  from all lookup main
32767:  from all lookup default

(今はDSL1を無視してください。これまでは機能します。)

ログにはタグが適用されていることが表示されます。 (行末)

Jun  1 17:05:03 squidXXX kernel: output IN= OUT=eth4 SRC=112.112.xxx.xxx DST=10.77.xxx.xxx LEN=312 TOS=0x08 PREC=0x00 TTL=64 ID=60789 DF PROTO=TCP SPT=22 DPT=49328 WINDOW=543 RES=0x00 ACK PSH URGP=0 MARK=0x2 

ただし、ローカルコンピュータからpingを送信したり、別のコンピュータからプロキシに接続して外部アドレスに接続しようとすると、ネットワークに接続できないという応答が表示されます。注:そのコンピュータでイカプロキシも実行されており、期待どおりに機能します。デフォルトルートテーブルにデフォルトルートとして10.177.55.33を追加すると、外部ネットワークに正常にアクセスできます。

今、誰かが同じ問題があることを読んで、デフォルトパスをターゲットネットワーク0.0.0.0/1に置き換えることで問題を解決しました。これは間違っているだけでなく(128.0.0.0以上のアドレスにはアクセスできません)、私の場合は機能しません。とにかく、ここで得たのは、私のルーティングテーブルに問題がある可能性があるため、デフォルトのルーティングテーブルを使用しますが、エラーは表示されません。または既知のバグがありますか?

このスレッドに応じて予想されるパケットルーティングを追加してみましたが、ip rule add from all lookup DSL2 prio 1002そうでない可能性があります。

ip ruleしたがって、タグを正しく読み取らないか、指定されたテーブルを使用していないようです。しかし、なぜ?

関連情報