
2 つのネットワーク インターフェイス (1.1.1.1 と 2.2.2.2) があり、1.1.1.1 がプライマリとして設定されている VPS があるかどうか疑問に思います...
eth0 = 1.1.1.1
eth0:1 = 2.2.2.2
ここで、domain.com (Cloudflareを使用しているかどうかはわかりません) のすべてのトラフィックを IP 2.2.2.2 eth0:1 にルーティングします。
例1:
実行すると
wget domain.com
2.2.2.2 eth0:1を通過します
が、実行するwget google.com
と1.1.1.1 eth0を通過します。
例2:
「whatismyip.com」にアクセスすると、eth0 をパススルーするため、IP は「1.1.1.1」と表示されます
が、「whatismyipaddress.com」にアクセスすると、eth0:1 をパススルーするため、IP は「2.2.2.2」と表示されます。
答え1
考慮すべき点がいくつかあります:
Linuxルーティングはドメイン名を処理しません
Linux のルーティングには多くの設定オプションがありますが、ドメイン名のみを受け入れるオプションはありません。結局のところ、IP ルーティングについて話しているのです。したがって、IP アドレスに対してルールを定義する必要がありますが、ドメインの DNS レコードが変更されると、明らかに「壊れる」ことになります。
インターフェースの設定
この場合、同じサブネット (0.0.0.0/0、つまりインターネット) へのルートを提供するインターフェースが 2 つあります。カーネルに特定のインターフェースを優先するように指示するには、ポリシーベース ルーティング (PBR) を適用する必要があります。
名前が示すように、ポリシーベースのルーティングは、使用するインターフェースを決定するポリシー (別名「ルール」) を定義することによって機能します。ポリシーがない場合、カーネルは宛先のネットワークに一致する最初のルートを選択します。
ルート、ルール、テーブル
カーネルはルートを使用してパケットの処理方法を決定します。ルートは、使用する宛先アドレスとリンク (インターフェース) を含む単純な定義です。
ルートは にグループ化されtables
、どのテーブルが使用されるかは定義されたポリシーによって異なります。
(またはルール)はpolicy
、パケットをルーティングするためにどのテーブルを調べるかをカーネルに指示します。ポリシーの定義には、調べるパケットの送信元、宛先、およびルーティング テーブルが含まれます。
現在のルートとポリシーを表示する
現在システムで使用されているルートを表示するには、
ip route
ルーティング テーブル内のすべてのエントリが表示されますmain
。 を実行すると、他のテーブルにアクセスできますip route show table <tablename>
。
現在使用されているポリシーを表示するには、
ip rule
カーネルが使用するすべてのポリシー/ルールを一覧表示します。処理中のパケットに一致するルールが見つかるまで、上から下へ繰り返し処理されます。
例
echo "101 out1" >> /etc/iproute2/rt_tables
ip rule add from all to 3.4.5.6 table out1
ip route add default via 10.0.0.1 dev eth0 src 1.1.1.1 table out1
ip route add 10.0.0.0/8 dev eth0 src 1.1.1.1 table out1
これらのコマンドは、新しいルーティング テーブルを作成しout1
、10.0.0.1
インターネットにアクセスするためのゲートウェイとして を追加します。 へのトラフィック(ターゲット ドメインの実際の解決済み IP アドレスに置き換える必要があります) は、指定されたデバイスと IP を使用して、3.4.5.6
テーブルで定義されているデフォルト ゲートウェイを介して送信されます。out1
eth0
1.1.1.1
用語に慣れるために、既存のチュートリアルやガイドをいくつか読むことをお勧めします。iproute2
とを検索してくださいlinux advanced routing and traffic control
。
最後に、変更をライブ システムに適用する前にテストしてください。間違いは起こるものですが、個人的にはリモート サーバーではなく VM を壊す方が好きです。