web-dev-qa-db-ja.com

デュアルISPリンクを備えたLinuxルーターでデフォルトルートを設定するにはどうすればよいですか?

だから、ここに状況があります。

私は現在アクティブで、ネットワークからのトラフィックのルーティングに機能しているデュアルISPリンクを持っており、 Linuxでの複数のISP接続の負荷分散とNAT-ing

/etc/iproute2/rt_tablesに次のような2行があります。

...
10 COMCAST
20 CENTURYLINK
...

適切なデフォルトゲートウェイを使用して各テーブルにルートを設定し、次のようなルールを設定します。

ip rule add fwmark 1 table COMCAST prio 33000
ip rule add fwmark 2 table CENTURYLINK prio 33000

次に、iptablesベースのパケットマーキングとルーティングを設定します。

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
CONNMARK   all  --  anywhere             anywhere             CONNMARK restore
ACCEPT     all  --  anywhere             anywhere             mark match ! 0x0
MARK       all  --  anywhere             anywhere             MARK set 0x1
MARK       all  --  anywhere             anywhere             statistic mode random probability 0.33300000010 MARK set 0x2
CONNMARK   all  --  anywhere             anywhere             CONNMARK save

問題は、どちらかのISPに対してシステム全体のデフォルトルート(ip route listのようにtable引数なし)をそのままにしておくと、iptablesルーティングが上書きされるように見えることです。クライアントマシンの場合-watch -n 1 ifconfig [interface]によると、デフォルト以外の接続を通過するパケットはありません。システム全体のデフォルトルートを削除すると、ルーティングはすべてのクライアントマシンでうまく機能し、パケットの33%がCenturyLink回線を経由し、残りはComcast回線を経由します。これはすごい!

ただし、デフォルトルートがないと、ルーター自体でインターネット接続が必要なすべてのものが壊れます。たとえば、ルーターでapt-get updateを実行できません。では、iptablesルーティング設定を上書きしないシステムのデフォルトルートを設定するにはどうすればよいですか? LARTCサイトの指示に従って、次のようにマルチパスルートを設定しようとしました。

ip route add default scope global nexthop via $P1 dev $IF1 weight 1 nexthop dev $IF2 weight 1

(CenturyLink接続のデフォルトルートにはゲートウェイIPがなく、dev ppp0だけであり、そのテーブルのデフォルトゲートウェイで機能するため、LARTCガイドから少し変更する必要がありました。)

ただし、マルチパスルートは、サーバーとそれがルーティングするクライアント上のすべてを破壊します。助けて?

2
clee

私はこれを自分で理解することができました。

他の誰かが同様の状況に遭遇した場合の解決策は、fwmarkのip ruleエントリの優先度を変更することでした。私は読んでいませんでした 関連する質問に対するlbtの答え 十分注意深く;彼は特に、優先度を33000に設定すると、これらのルールがafterdefaultテーブルルックアップの後に実行されることを指摘します。これは、私が欲しいもの。そこで、ルールを次のように変更しました。

100:    from all fwmark 0x1 lookup COMCAST
100:    from all fwmark 0x2 lookup CENTURYLINK

そして今、デフォルトルートがあってもファイアウォールベースのルーティングが壊れることはなく、apt-getと他のすべてのプログラムを問題なく実行できます。やったー!

0
clee