私は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
したがって、タグを正しく読み取らないか、指定されたテーブルを使用していないようです。しかし、なぜ?