次のようにDebian / Linux 4.1を実行しているルーターがあります。
- eth0:192.168.1.1はLANに接続され、有線クライアントに対してDHCPdを実行します。
- wan0: 1.2.3.4 インターネットに接続
- wan1: 5.6.7.8 インターネットに接続
LANからホストH、ポートPへのUDPトラフィックをコピーし、NAT経由で出力したいと思います。両方wan0とwan1。
たとえば、正しい宛先ホスト/ポートを使用して192.168.1.2でパケットをルーティングすると、次のような結果が得られます。二つNATパケット - 1つはwan0を介して、もう1つはwan1を介して出力され、両方とも同じ宛先ホストとポートを使用します。
(要件は、特定の種類のUDPトラフィックが2つのインターフェイスを介して送信され、帯域幅を犠牲にして待ち時間を最小限に抑える必要があることです。問題のUDPプロトコルは尤度が高いため、他のルータアドレスからNAT冗長パケットをうまく受信します。 )
カーネル4.1 / iptablesを使用してこれをどのように実行しますか? (すでに最新のカーネルとnftablesのソリューションがあります。)
答え1
iptables TEEターゲットを確認してください。主にロギングまたはIDS目的でトラフィックを別々の宛先にコピーするように設計されていますが、必要な操作も実行できるはずです。 Debian にはデフォルトでこのモジュールが含まれているため、追加のソフトウェアは必要ありません。
答え2
ネットワーク名前空間を持つ tee ターゲットを使用すると、この問題を解決できると思います。
- WANインターフェイスの1つを独自のネットワークネームスペースに配置する
- VETHペアを使用してネットワーク名前空間を接続します。
- プライマリネットワークネームスペースでTEEターゲットを使用して、トラフィックコピーをセカンダリネットワークネームスペースに送信します。
- 2番目のネットワーク名前空間からTEEdトラフィックを偽装します。
TEE が 2 番目のレプリカの宛先 IP を変更するか、ネクストホップのみを変更するかは、文書では明確ではありません。宛先IPが変更された場合は、2番目のネットワーク名前空間で操作を元に戻す必要があります。