web-dev-qa-db-ja.com

Linuxで仮想IPを介してすべてのトラフィックを渡す方法

CentOSサーバーにイーサネットカードがあります。構成されています:

eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 40:f2:e9:9b:b7:bb brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.1/24 brd 10.54.19.255 scope global eth1
    inet 192.168.1.2/24 scope global secondary eth1
    inet6 fe80::42f2:e9ff:fe9b:b7bb/64 scope link

192.168.1.2はVIP(仮想IPはkeepalivedによって作成されます)です。

すべてのトラフィックを仮想IP(192.168.1.2)に通したいので、出力パケットを含める必要がありますVIP実際のIPではありません(192.168.1.1)。iptablesを使用しましたが、機能しません。出力パケットには、VIPではなく実際のIPが含まれています。iptablesのコマンドは次のとおりです。

iptables -t nat -I POSTROUTING -d x.x.x.x -j SNAT --to 192.168.1.2
1
LinhTran

ルーティングテーブルを変更しましたか?おそらく、src192.168.1.2を使用してゲートウェイへのルートを追加する必要があります。 iproute2を使用してルーティングテーブルを確認できます。

ip route

あなたがそのようなものを持っているなら:

default via 192.168.1.254 dev eth1

このアドレスにルートを追加します。

ip route add 192.168.1.254 dev eth1 src 192.168.1.2

または、サブネットにルートを追加できます。

ip route add 192.168.1.0/24 dev eth1 src 192.168.1.2

実際、このサブネットへのルートはすでにルーティングテーブルにありますが、src ipアドレスは192.168.1.1であるため、このエントリを削除する必要があります。最初に行うことは、ルーティングテーブルを確認することです。これが少し役立つことを願っています。

1
AlexZ