web-dev-qa-db-ja.com

宛先IPに基づいて送信元アドレスを変更する

同じホスト上に多数の外部IPアドレスを収集し、リダイレクトする「ルーター」マシンがいくつかあります。NATまたはトラフィックを内部ネットワークにプロキシします。これらは、上のマシンのルーターとしても機能します。内部ネットワーク。これは正常に機能しますが、ルーティングテーブルを作成できないため、内部ネットワークのマシンがアクセスする宛先に基づいて、送信元アドレスを変更できます。

パブリックアドレスP1 (5.5.5.1/24)P2 (5.5.5.2/24)を持つルーターがあるとしましょう。すべてのトラフィックはP1を通過しますが、必要に応じて、ホストはP2でも到達可能です。これは次のようになり、正常に機能します。

> ip addr
...
1: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether aa:bb:cc:dd:ee:11 brd ff:ff:ff:ff:ff:ff
    inet 5.5.5.1/24 brd 5.5.5.255 scope global eth1
    inet 5.5.5.2/24 brd 5.5.5.255 scope global secondary eth1:p2
...

たとえば、Google DNSサービス(P2)にアクセスする場合は、送信元アドレスとして8.8.8.8を使用します。したがって、ルーティングテーブルに次のような行を追加します。

> ip route add 8.8.8.8 via 5.5.5.254 dev eth1 src 5.5.5.2
> ip route
...
default via 5.5.5.254 dev eth1
5.5.5.0/24 dev eth1  proto kernel  scope link  src 5.5.5.1
8.8.8.8 via 5.5.5.254 dev eth1  src 5.5.5.2 
...

しかし、これは機能しません。 8.8.8.8にpingを実行しても、ホストは送信元アドレスとしてP1を使用し、発信接続にはP2をまったく使用しません。

私はそれを正しくやっていますか?私はそうは思わない...

2
hgj

ホストからの正しいIPアドレスで宛先にpingを実行できるが、内部ネットワークからはpingできないという事実(コメントを正しく読んだ場合)は、内部ネットワークに対してNATが有効になっていることを示しています。

その場合、iptablesルールを確認し、それに応じてSNATまたはMASQUERADEルールを編集する必要があります。例えば:

iptables -A POSTROUTING -s <your-internal-network> -d 8.8.8.8 -o eth1 \
-j SNAT --to-source 5.5.5.2

これにより、転送される内部ネットワークトラフィックが目的のIP(例では5.5.5.2)からのみ送信されることに注意してください。同じルールをルーターに適用するには、iprouteルール/テーブルが必要です。 (ルーター自体からの接続。)

2
Sobvan

接続ごとに特定のルーティングテーブルを設定する必要があります。これは、ポリシーベースのルーティングと呼ばれます。各テーブルにはポリシーがあり、必要に応じて送信元アドレスやその他のオプションを設定できます。

あなたの場合、新しいテーブルを追加します。

echo 200 P1 >>/etc/iproute2/rt_tables
echo 200 P2 >>/etc/iproute2/rt_tables

ルートを追加します。

ip route add 5.5.5.0/24 dev eth1 src 5.5.5.1 table P1
ip route add default via 5.5.5.254 table P1
ip route add 5.5.5.0/24 dev eth1 src 5.5.5.2 table P2
ip route add default via 5.5.5.254 table P2
ip route add 8.8.8.8 via 5.5.5.254 table P2

これは重要なビットであり、接続を受信したのと同じIPで応答するように指示します。

5.5.5.1テーブルP1からのIPルールの追加
IPルールを5.5.5.2テーブルP2から追加

テーブルはいくつでも追加できますが、すべてデフォルトルート、送信元インターフェイス、送信元アドレスが必要になるため、パケットがテーブルを介してルーティングされると、送信元アドレスが適切に設定され、正しいインターフェース。

これらのページを見てください。この種のテーブルを設定する方法について、多くの追加情報が提供されています。

http://lartc.org/howto/lartc.rpdb.html

0
NickW