私は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
答え2
このソリューションでは、ルーティングの複雑な構成が必要です。
Web サーバーは、 (
192.168.188.11
および192.168.198.11
) アドレスまたは0.0.0.0
アドレスの両方をリッスンする必要があります。これは を意味します。 コマンドall addresses
で確認してください。ss -tlnp sport == :80
それぞれに個別のルーティングテーブルを作成する足:
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
- リクエストが受信されたのと同じインターフェースを介して応答をルーティングするようにルート ルールを構成します。
ip rule add from 192.168.188.11 lookup 1 pref 1000
ip rule add from 192.168.198.11 lookup 2 pref 2000
- トラブルシューティング:
- を使用して
tcpdump -ni <iface> 'tcp port 80'
トラフィックをスニッフィングします。少なくとも外部からの http リクエストは表示されるはずです。 - ルートを確認するリクエストと入力します
ip route get <dst> from <src> iif <iface>
。ルートが表示されますlocal
。他のものが表示された場合は、rp_filter
withコマンドを確認してください。モードは または にip netconf show dev <iface>
なっているはずです。off
loose
- 実際のルートを確認する返信、
ip route get <dst> from <src-address>
宛先アドレスは、リクエスト出力で確認できましたtcpdump
。 - コマンドでファイアウォールルールを確認します
iptables-save -c
。設定必要ありません追加のナットルール!