参加する代わりに
Habréで読んだ以前の記事に基づいていますが 、個人的にはポリシールーティングメカニズム全体を理解するには十分でしたが、会社のサーバーにこのタイプのルーティングを実装するのは悲惨なほどではありませんでした。 個別に対処する必要があり、無視できない2つの重大な落とし穴がありました。
- 一般的な設定の保存
- Network Managerユーティリティ設定の中断
私の会社のITスペシャリストの将来の世代のために書いた指示書の形で記事を書くつもりです。そのため、私は主要な記事からいくつかの点を変更せずに、または自分のために書き直します。 斜体を強調します 。 ここに記載されている内容を完全に理解するには、完全に理解することをお勧めします。
少し練習するか、何が欲しいか
そして、ルーティングを取得したい:
- リクエストの送信元と同じゲートウェイにデータを送信します
- いわゆるゲートウェイを使用して、ゲートウェイ間で負荷を分散するように制御されます ゲートウェイの重量
IPアドレスを提供します。
ip aa 11.11.11.11/22 dev eth6 ip aa 22.22.22.22/28 dev eth5
テーブルを定義します。
複数のルートを使用するには、静的ルーティングでは不十分です。 OSPFの場合、このスキームは単純すぎるため、テーブルを使用した動的ルーティングに注目しましょう。
ip route add default via 22.22.22.17 table 101 ip route add default via 11.11.8.1 table 102
発信トラフィックを、着信トラフィックの発信元であるゲートウェイにラップします。
ip rule add from 22.22.22.17 table 101 ip rule add from 11.11.8.1 table 102
今、これらの行の意味を説明する必要はないと思います。 同様に、3つ以上のゲートウェイでサーバーの可用性を高めることができます。
アップリンク間のトラフィックのバランス
それは、1つのエレガントなチームによって行われます。
ip route replace default scope global \ nexthop via 22.22.22.17 dev eth5 weight 3 \ nexthop via 11.11.8.1 dev eth6 weight 7
このエントリは、メインテーブルの既存のデフォルトルーティングを置き換えます。 この場合、ルートはゲートウェイの重み(重み)に応じて選択されます。 たとえば、重み7と3を指定すると、接続の70%が最初のゲートウェイを通過し、30%が2番目のゲートウェイを通過します。 考慮しなければならない点が1つあります。カーネルはルートをキャッシュし、特定のゲートウェイを経由するホストのルートは、このレコードへの最後のアクセス後しばらくテーブルでハングします。 また、頻繁に使用されるホストへのルートは、リセットされるのに間に合わず、キャッシュ内で絶えず更新され、同じゲートウェイに残ります。 これが問題になる場合は、ip route flush cacheコマンドを使用してキャッシュを手動でクリアできる場合があります。
結果
このコマンドを実行した後、サーバーの可用性を確認できます。 原則として、これが私たちの仕事が終わった場所であると言うことができます。 ただし、問題が1つあります。再起動後、すべての設定がリセットされます。
一般的な設定の保存
次に、再起動後に受信した設定をシステムに強制的に適用する必要があります。
IPアドレス
最初に、どのMACアドレスがどのインターフェイスに属しているかを調べます。 コマンドを実行します。
ip a
また、アダプターの設定が表示されます(macアドレスはaまたはbの文字で構成されています)
2: eth6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether aa:aa:aa:aa:aa:aa brd ff:ff:ff:ff:ff:ff inet 11.11.11.11/22 brd 11.11.11.255 scope global eth6 3: eth5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether bb:bb:bb:bb:bb:bb brd ff:ff:ff:ff:ff:ff inet 22.22.22.22/28 brd 22.22.22.31 scope global eth5
次に、取得したMACアドレスを使用してifconfig構成ファイルを作成します。 これを行うには、ifcfgプレフィックスとインターフェイス名を使用してフォルダーにファイルを作成します
/ etc / sysconfig / network-scripts:
# cat /etc/sysconfig/network-scripts/ifcfg-eth5 DEVICE=eth5 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none IPV6INIT=no IPADDR=22.22.22.22 PREFIX=28 HWADDR=bb:bb:bb:bb:bb:bb GATEWAY=22.22.22.17 DEFROUTE=yes NAME=eth5 # cat /etc/sysconfig/network-scripts/ifcfg-eth6 DEVICE=eth6 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=none IPV6INIT=no IPADDR=11.11.11.11 PREFIX=22 HWADDR=aa:aa:aa:aa:aa:aa
ルーティングテーブルを作成する
次に、永続テーブルを作成し、名前を付けて(移動しやすくするため)、これらのテーブルを使用するためのルールを書き留める必要があります。
cd /etc/iproute2/ echo "101 int" >> rt_tables echo "102 ext" >> rt_tables
次に、ディレクトリ
/etc/sysconfig/network-scripts
に戻り、そこで作業を続けます。
テーブルの内容を作成します。
# cat route-eth5 default via 22.22.22.17 table ext # cat route-eth6 default via 11.11.8.1 table int
これらのテーブルを処理するためのルールを作成します。
# cat rule-eth5 from 22.22.22.22 lookup ext # cat rule-eth6 from 11.11.11.11 lookup int
バランス調整
次に、静的を動的に置き換えます。 ファイルがないわけではありません、なぜなら 上記のスタートアップスクリプトはインターフェイスに関連付けられており、この場合、ルールは2つのインターフェイスについてすぐに記述されます。 そのため、標準のLinux起動メカニズム
/etc/rc.local
を使用して、別個のスクリプトを作成し、起動時に登録することが決定されました。 スクリプトの内容:
# cat /etc/network.sh #!/bin/bash /sbin/ip route replace default scope global nexthop via 11.11.8.1 dev eth6 weight 7 nexthop via 22.22.22.17 dev eth5 weight 3 exit 0
彼のスタートアップへの道:
# cat /etc/rc.local #!/bin/sh touch /var/lock/subsys/local /bin/bash /etc/network.sh
rc.localファイルを実行していない人のために、次のコマンドを実行するようお願いします。
chmod u+x /etc/rc.d/rc.local systemctl start rc-local
Network Managerユーティリティ設定の中断
私の邪魔をしたが、それでも私の神経を台無しにした小さな問題。 このユーティリティの問題は、システムのメイン構成ファイルからではなく、内部構成ファイルからの設定を保存して使用することです。 X11で始まるので、つまり最後のターンでは、ネットワークが既に実行されているときに、ネットワーク設定を上書きし、その上で複雑な構成を構築することはできません。
無効にするには、コンソールで実行する必要があります。
sudo /etc/init.d/NetworkManager stop chkconfig NetworkManager off
また、別の方法でsystemctlを使用することもできます。
systemctl disable NetworkManager systemctl stop NetworkManager
結果
そして、このアクションを実行して再起動すると、2つの独立したアップリンクを使用する稼働中のシステムが得られ、その間のトラフィックは重みを使用してバランスが取られます。