OSPF(Quagga)、Shorewall、およびポリシールーティング:非アクティブルートの問題

誰かがクアガ(OSPF)を使用していて、Shorewallを使用してOSPFが動作するチャネルのバランスを取ることを計画している場合は、catを要求します。



だから問題自体



ルートを完全に交換する通常動作するOSPFがあり、すべて正常です。 しかし、2番目のプロバイダーが必要であると判断し、QoSの状況を改善するために、QoSサービスにLXCのようなものを適用しました(ifbをvethに置き換えます) (OSPFとのインターフェースでバランシングを開始しました)。 ここで問題が発生します:非常に通常のライブチャネル、ルートなど。 quaggaはルートをルーティングテーブルにマップしません。 さらにわかりにくいのは、vtyshのコマンド: show ip osfp routeはすべてのルートを表示し、 show ip routeではこれらのルートが非アクティブなルートステータスであるということです。



理由



「Shorewall」が原因であることが判明しました。これにより、バランスの取れたインターフェースに不要なフォームのルートが追加されます。



10.0.11.0/24 dev eth1 proto kernel scope link src 10.0.11.2 10.0.11.1 dev eth1 scope link src 10.0.11.2 <=============    10.0.12.0/24 dev eth2 proto kernel scope link src 10.0.12.2 10.0.12.1 dev eth2 scope link src 10.0.12.2 <=============   
      
      





これに遭遇すると、クアッガは失われ、これを通過するルートを確立しません。



解決策



shorewallを開始するときに実行する小さなスクリプト:



/usr/local/bin/shorewall-prov-fix.sh
 #!/bin/bash IF=$(grep -v -e '^#' -e '^?' /etc/shorewall/providers | sort -u -t $'\t' -k1,1 | cut -d$'\t' -f 5 | eval $(for i in $(grep -v -e '^#' -e '^\[' /etc/shorewall/params);do echo -e "$i \c";done;echo '') envsubst) for IF_ in $IF; do IP=$(ip as $IF_ | grep 'inet ' | cut -d ' ' -f 6 |sed -e 's/\/.*$//') SRC=$(ip route show dev $IF_ scope link src $IP |grep -v kernel) eval "ip route del dev $IF_ $SRC scope link src $IP" done
      
      





そしてそれを書いてください:



/ etc / shorewall /開始
 /usr/local/bin/shorewall-prov-fix.sh > /dev/null 2>&1
      
      





PS



私はすぐに解決策のヒントを見つけることができませんでしたが、適切なソースへのリンクがあります。



All Articles