Позвольте Debian Stretch Webserver отвечать на обоих сетевых картах

Позвольте Debian Stretch Webserver отвечать на обоих сетевых картах

я получилодинвеб-сервер сдва никав отдельных подсетях192.168.188.xи192.168.198.xЭтот веб-сервер подключен к 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 и т. д., все нужно делать на веб-сервере, которым является Debian Stretch.

Пожалуйста, имейте в виду, что я сталкиваюсь с проблемами сети примерно раз в 10 лет, поэтому, пожалуйста, упростите задачу. :)

решение1

Если ваш веб-сервер правильно настроен на прослушивание 0.0.0.0:80, что вы можете проверить через , ss -lто ваша проблема не в конфигурации веб-сервера, а в проблеме маршрутизации. Только один маршрут может быть обнаружен одновременно, даже если у вас их два. Единственный способ добиться желаемого — добавить второй маршрут по умолчанию и использовать маршрутизацию политики источника. Если сервер — Linux, это можно сделать через iptables. Попробуйтеэтотилиэтот.

решение2

Решение требует сложной настройки маршрутизации.

  1. Веб-сервер должен прослушивать оба ( 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_filterс ip netconf show dev <iface>. Он должен быть offили в looseрежиме.
  • Проверьте фактический маршрут дляответыс ip route get <dst> from <src-address>, где адрес назначения является исходным адресомЗапросывы видели в tcpdumpвыводе.
  • Проверьте правила брандмауэра с помощью команды iptables-save -c. Конфигурацияне требуетлюбые дополнительныенатправила!

Связанный контент