web-dev-qa-db-ja.com

橋の上でパケットを偽装することは可能ですか?

着信VPNを備えたコンテナがあります。そのコンテナへの接続には、192.168.10.10IPが割り当てられます。コンテナの仮想NICは、IPが10.10.10.1で、ゲートウェイ(ホストブリッジ上)が10.10.10.254です。

コンテナに直接ログインすると、パケットは10.10.10.1をソースとして残し、(ブリッジを介して)戻る方法を認識します。

VPNで接続されると、パケットは送信元として192.168.10.10を残して送信され、192.168.10.xがネットワークでアドバタイズされないため(そのネットワークへのルートがないため)返送されません。

これには2つの解決策があります。

  • パケットが10.10.10.1で出るように、コンテナをマスカレードします。
  • またはネットワーク上の192.168.10.xルートを宣伝します

私は(さまざまな理由で)これらの解決策のいずれかを避けたいと思っていましたブリッジ自体でマスカレードを行うことが可能かどうか、ホスト側で?
言い換えると、パケットは192.168.10.10のソースを使用してコンテナを離れ、「ブリッジによって」既知の10.10.10.1 IPに書き換えられます(その後、次の場合に再度書き換えられます)。返信はコンテナに返されます)

注:shorewallでそれを行う方法は素晴らしいでしょうが、どんな情報も素晴らしいでしょう。

1
WoJ

Shorewallの場合、/ etc/shorewall/masqを次のように編集できます。

br0 192.168.10.1/24 - tcp 22,80,443

また、VPN範囲のエントリを/ etc/shorewall/hostsと/ etc/shorewall/zoneに作成し、もちろん必要なルールを/ etc/shorewall/rulesに追加する必要があります。

ただし、 XY問題 の場合があると思います。

私があなたの設定を正しく理解していれば、onlyあなたのコンテナは192.168.10/24の範囲を知っています。

つまり、マスカレードを使用しても問題は実際には解決されません(のみ)。

問題は、コンテナが実行されているホストにも192.168.10/24のルートがないことです。これは、そのルートがコンテナのルーティングテーブル内にのみ存在するためです。

したがって、少なくとも、次のものが必要になります。

  • コンテナを指すコンテナホスト上のルート(例:ip r add 192.168.10.1/24 via 10.10.10.1
  • 次に、海岸壁にmasqルールを追加します。

それ以外の場合、コンテナホストは、VPNコンテナからの火星人に相当する金額を確認します。

1

MASQUERADEiptablesターゲットはPOSTROUTINGテーブルで動作します。このテーブルは、あるインターフェイスから別のインターフェイスにルーティングされるパケットにのみ使用されます。ブリッジされたパケットは、おそらくIPレベルでいつでもアクセスされないため、マスカレードすることはできません。

0
allo