Настройка нескольких подключений Ethernet на сервере Linux

Настройка нескольких подключений Ethernet на сервере Linux

У меня следующая топология

                                                                                        .───────────────.        
   ┌──────────────────┐                                                             _.─'                 `──.    
   │                  │                                                          ,─'                         '─. 
   │    ISP Router    │ Dynamic IP                                              ;                               :
   │     with NAT     ├─────────────────────────────────────────────────────────:           Internet            ;
   │                  │                                                          ╲                             ╱ 
   └─────────┬────────┘                                                           '─.                       ,─'  
             │                                                                       `──.               _.─'     
             │  10.0.0.1                                                                 `──────┬──────'         
             │                                                                                  │                
      .──────┴────.                                                                       .─────┴─────.          
   ,─'             '─.                   ┌─────────────────────────┐                   ,─'             '─.       
 ,'                   `.                 │                         │                 ,'                   `.     
;          LAN          :  Static DHCP┌──┴───┐                  ┌──┴───┐ Static IP  ;      Public Net       :    
:                       ;─────────────┤ eth1 │     My Server    │ eth0 ├────────────:                       ;    
 ╲     10.0.0.0/24     ╱     10.0.0.5 └──┬───┘                  └──┬───┘  1.2.3.5    ╲     1.2.3.4/20      ╱     
  `.                 ,'                  │       Debian Buster     │    mydomain.com  `.                 ,'      
    '─.           ,─'                    │                         │                    '─.           ,─'        
       `─────────'                       └─────────────────────────┘                       `─────────'

По историческим причинам мой провайдер использует отдельную сеть для предоставления статических IP-адресов. Это означает, что мне нужно подключить свой сервер напрямую к специальному соединению, которое напрямую выходит в Интернет (на схеме это eth0IP 1.2.3.5).

Однако я использую этот же сервер как NAS у себя дома, и поскольку это отдельная сеть, я подключаю его с помощью другого интерфейса eth1и создаю статическое распределение DHCP с адресом 10.0.0.5. Таким образом, другие устройства в домашней сети смогут найти его и получить доступ к сетевым монтированиям.

Наконец, у меня есть DNS-запись с моим доменом, в этом примере mydomain.comуказывающая на 1.2.3.5.

У меня возникло несколько проблем:

  • Когда я пытаюсь получить доступ mydomain.comиз своей локальной сети, это не работает. Я думаю, это происходит потому, что сервер получает пакет из интерфейса, eth0но затем отвечает через него eth1, а другое устройство сбрасывает ответ, так как он с другого IP.
  • При загрузке сервер должен выбрать 1.2.3.4сеть для направления интернет-трафика, чтобы внешний доступ работал через mydomain.com. Однако, поскольку eth0и eth1имеют доступ в интернет через соответствующие шлюзы, иногда он загружается и выбирает 10.0.0.1в качестве шлюза по умолчанию, а затем доступ mydomain.comне работает. Я считаю, что это похожая проблема с трафиком, входящим через , eth0но выходящим через eth1.

Хотя я знаком с основами сетевых технологий, у меня нет опыта подключения сервера к нескольким сетям одновременно, как в этом случае. В идеале я хотел бы настроить сервер так, чтобы:

  • Весь интернет-трафик выходит черезeth0
  • Весь входящий трафик eth0отвечает черезeth0
  • Весь входящий трафик eth1отвечает черезeth1

На моем сервере установлен Debian, буду признателен за любую помощь.

РЕДАКТИРОВАТЬ: Итак, отключив шлюз eth1 и немного поигравшись, tcpdumpя смог подтвердить, что трафик входит с eth0 и выходит с eth1. Проблема в том, что провайдер не транслирует трафик, идущий к конечной точке, 1.2.3.5а затем сервер идентифицирует 10.0.0.Xадреса как расположенные на интерфейсе eth1.

решение1

Это проблема маршрутизации, которую можно решить с помощью маршрутизации на основе источника или маршрутизации политики. Это включает в себя две таблицы маршрутизации, по одной для каждого адреса источника:

Видетьhttp://tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.multiple-links.htmlБольше подробностей.

решение2

Я полагаю, это происходит потому, что сервер получает пакет с интерфейса eth0, но затем отвечает через eth1.

Нет. Маршрутизатор ISP с NAT будет преобразовывать ваш клиентский адрес 10.0.0.0 в динамический адрес ISP, поэтому ваш сервер будет отвечать на этот адрес, а не на внутренний. Существуют исключения, такие как FTP, которые не обязательно совместимы с NAT, поскольку они будут передавать ваш внутренний IP-адрес на другой конец соединения, однако в общем случае ваш трафик NAT останется на eth0.

Проверьте журналы, чтобы убедиться, что клиенты подключаются к 1.2.3.4, а сервер получает соединения с адресов, преобразованных через NAT, ip.ip.ip.ip.

При загрузке сервер должен выбрать 1.2.3.4 в качестве сети для направления интернет-трафика, чтобы внешний доступ работал через mydomain.com. Однако, поскольку и eth0, и eth1 имеют доступ в интернет через соответствующие шлюзы

Не делайте этого. Наличие нескольких шлюзов по умолчанию в многосетевых конфигурациях редко работает так, как задумано людьми. Грубо говоря, несколько шлюзов по умолчанию следует использовать только тогда, когда оба пути обеспечивают доступ к идентичным сетям, например, для избыточности маршрутизатора/высокой доступности в корпоративной среде. Поскольку маршрутизатор вашего интернет-провайдера в Интернете и ваше прямое подключение к публичной сети не идентичны, вам следует удалить это. eth0 должен иметь маршрут по умолчанию, eth1 должен иметь маршрут к 10.xxx. Вы все еще можете сделать это с помощью DHCP, однако я бы подошел к этому как к резервированию/исключению для 10.0.0.5 и настроил IP-адрес сервера вручную.

За исключением постороннего маршрута по умолчанию, то, что вы описали, является нормальной работой по умолчанию. Обязательно проверьте другие проблемы, не описанные выше:

  • Файлы хоста, отличающиеся от DNS (вы пробовали заставить клиентов подключаться к 10.0.0.5 вместо 1.2.3.4? Мне нравится использовать техническое имя внутри, например, webserver1.internalfqdn.com, и понятное имя снаружи, например,www.externalfqdn.com)
  • Таблицы маршрутизации вручную, не отраженные выше (вы пробовали сделать ярлык 10.0.0.x на 1.2.3.4 через 10.0.0.5 как маршрутизатор? - это может сработать, но требует дополнительной настройки)
  • Протоколы маршрутизации (например, RIP) (на самом деле это вариация вышеописанного, но если у вас включен протокол RIP или другая публикация маршрутов, вы можете публиковать плохие маршруты)

решение3

В итоге я решил проблему с помощьюразделение DNSподход, развертывание DNS-сервера на моем хосте и использование его всей локальной сетью в качестве DNS-сервера по умолчанию. Там я добавил пользовательские правила перезаписи DNS для mydomain.comперенаправления 10.0.0.5вместо публичного адреса. Таким образом, хосты в локальной сети разрешают мой домен во внутренний IP, а хосты за пределами локальной сети разрешают его в публичный IP, с преимуществом локального трафика, который не должен выходить через сеть интернет-провайдера, как раньше.

Другая альтернатива, которая, по моему мнению, должна решить эту проблему, этомаршрутизация шпилькиОднако маршрутизатор, предоставленный моим интернет-провайдером, похоже, не поддерживает эту функцию.

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