web-dev-qa-db-ja.com

エイリアスとしてループバックインターフェイスのIPを使用したLinuxルーティングまたはナッティング

私が持っている

eth0:0 192.168.2.10 (for bgp network announce, no vlan, alias on eth0)
eth0.1 192.168.3.20 (for bgp session 1,vlan3 transport to bgp router)
eth0.2 192.168.4.30 (for bgp session 2,vlan4 transport to bgp router)

デフォルトルートはzebraによって与えられます(192.168.3.1または192.168.4.1-フェイルオーバー)

外部IP(192.168.1.100)が192.168.2.10に接続しようとすると、応答されたパケットは192.168.3.1を経由します(この場合の送信元IPは192.168.3.20です)。これは正しく機能します。しかし、送信元アドレスを192.168.2.10にします。主な問題は、アスタリスクが192.168.2.10で実行されていて、クライアントが192.168.1.100からsipを登録しようとした場合です->回答は192.168.3.20から送信され、パッケージはリモート側にドロップされます。

これを修正/解決する方法は?または、インターフェースを構成する他の方法はありますか?主なアイデアは、bgpセッションの1つがダウンした場合に、192.168.2.10のルーティングを切り替えることです。

rp_filter=0 on all interfaces

私が次のようなものを置いた場合:

iptables -t nat -A POSTROUTING -d 192.168.1.0/24 -j SNAT --to-source 192.168.5.58

これも機能しません。

すべての問題は、このスキームではアスタリスクがnatの後ろにあることです。すべてのインターフェイスで実行した場合-> sipクライアントは192.168.4.30と192.168.3.20のIPで正常に接続しますが、192.168.2.10のIPでは接続しません。

1
MealstroM

linuxのloは、Ciscoのループバックと同じではありません。

Linuxでloに割り当てられたアドレス必須マシンがそれ自体にトラフィックを送信するためにのみ使用されます。カーネルは、loに割り当てられたパケットと一致する送信元IPを持つすべてのパケットを火星人と見なし、入力時にドロップされます。これはハードコードされた動作です。カーネルは偶然にもloを使用して、他のインターフェイスのIP用にトラフィックを自身に送信します(たとえば、eth0に10.0.0.1があり、pingを実行すると、loのtcpdumpはエコー要求と応答を表示します)

シスコスタイルのループバックインターフェイスと同等の場合は、「ダミー」カーネルモジュールを使用します。ダミーモジュールは、それにルーティングされるトラフィックのシンクホールとしても機能するため(Ciscoのnull0など)、割り当てたアドレスはすべてダミーインターフェイスのリンクには明らかに何もないため、/ 32にする必要があります。

2
Olipro

ループバック以外のアドレスをloインターフェースに配置すると、奇妙なことが起こります。代わりに、192.168.2.10をeth0に添付することをお勧めします。

0
mgorven