Debian Stretch Webserver が両方の NIC で応答できるようにする

Debian Stretch Webserver が両方の NIC で応答できるようにする

私は1つウェブサーバー2つのニックネーム個々のサブネット内192.168.188.xそして192.168.198.xこの Web サーバーは 2 つの異なるルーター (192.168.188.1 と 192.168.198.1) に接続されており、ポート 80 を介してポート転送によって直接インターネットに接続されています (各ルーターには独自のパブリック IP アドレスもあります)。

     (external ip)                Portforwarding:80                   (external ip)
    ---[ROUTER]----                                                  ---[ROUTER]----
     192.168.188.1               Router internal IP                   192.168.198.1        
           |                                                               |
           |                                                               |
           |                                                               |
           |                                                               |
           +------- 192.168.188.11:80 [WEBSERVER] 192.168.198.11:80 -------+

私はポート80のサーバーに反応したい両方サブネット。残念ながら、デフォルト設定では、デフォルト ゲートウェイとして設定されているルーターにのみ応答します。これは当然のことです。しかし、パケットの送信元であるインターフェイスにパケットを送り返すように動作させる必要があります。これを実現するにはどうすればよいでしょうか。ルーターのポート転送 (NAT など) 以外に設定できるものはありません。Web サーバー (Debian Stretch) ですべてを行う必要があります。

念頭に置いておいてください。ネットワークの問題に直面するのは 10 年に 1 回程度なので、簡単にしてください。 :)

答え1

ウェブサーバーが 0.0.0.0:80 をリッスンするように適切に設定されている場合は、ss -l問題はウェブサーバーの設定の問題ではなく、ルーティングの問題です。2 つのルートがある場合でも、一度に検出できるのは 1 つだけです。目的を達成する唯一の方法は、2 番目のデフォルト ルートを追加し、ソース ポリシー ルーティングを使用することです。サーバーが Linux の場合は、iptables で実行できます。これまたはこれ

答え2

このソリューションでは、ルーティングの複雑な構成が必要です。

  1. Web サーバーは、 (192.168.188.11および192.168.198.11) アドレスまたは0.0.0.0アドレスの両方をリッスンする必要があります。これは を意味します。 コマンドall addressesで確認してください。ss -tlnp sport == :80

  2. それぞれに個別のルーティングテーブルを作成する:

ip route add 192.168.188.0/24 dev <iface1> table 1
ip route add 0/0 via 192.168.118.1 dev <iface1> table 1

ip route add 192.168.198.0/24 dev <iface2> table 2
ip route add 0/0 via 192.168.198.1 dev <iface2> table 2
  1. リクエストが受信されたのと同じインターフェースを介して応答をルーティングするようにルート ルールを構成します。
ip rule add from 192.168.188.11 lookup 1 pref 1000
ip rule add from 192.168.198.11 lookup 2 pref 2000
  1. トラブルシューティング:
  • を使用してtcpdump -ni <iface> 'tcp port 80'トラフィックをスニッフィングします。少なくとも外部からの http リクエストは表示されるはずです。
  • ルートを確認するリクエストと入力しますip route get <dst> from <src> iif <iface>。ルートが表示されますlocal。他のものが表示された場合は、rp_filterwithコマンドを確認してください。モードは または にip netconf show dev <iface>なっているはずです。offloose
  • 実際のルートを確認する返信ip route get <dst> from <src-address>宛先アドレスは、リクエスト出力で確認できましたtcpdump
  • コマンドでファイアウォールルールを確認しますiptables-save -c。設定必要ありません追加のナットルール!

関連情報