Настройка нескольких подключений 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-адреса. Это означает, что мне нужно подключить свой сервер напрямую к специальному соединению, которое напрямую подключено к Интернету (на схеме это eth0 с IP 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. Проблема в том, что интернет-провайдер не выполняет NAT-трафик, идущий к конечной точке 1.2.3.5 , а затем сервер определяет адреса 10.0.0.X , расположенные на интерфейсе eth1 .

0
задан 10 August 2021 в 16:58
3 ответа

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

Еще одна альтернатива, которая, по моему мнению, должна решить эту проблему, — это шпилька. Однако маршрутизатор, который предоставляет мой провайдер, похоже, не поддерживает это.

0
ответ дан 14 August 2021 в 17:44

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

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

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

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

, не делайте этого. Наличие нескольких шлюзов по умолчанию в многосетевых конфигурациях редко работает так, как задумано людьми. Примерно несколько шлюзов по умолчанию следует использовать только в том случае, если оба пути обеспечивают доступ к идентичным сетям, например, для избыточности маршрутизатора / высокой доступности в корпоративных условиях. Поскольку ваш интернет-провайдер маршрутизатор в Интернет и ваше прямое подключение к общедоступной сети не идентичны, вы должны удалить это. eth0 должен иметь маршрут по умолчанию, eth1 должен иметь маршрут к 10.x.x.x. Вы все еще можете сделать это с 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 или другая публикация маршрутов, вы можете публиковать плохие маршруты
0
ответ дан 11 August 2021 в 00:27

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

См. http://tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.multiple-links.html для получения более подробной информации. .

1
ответ дан 11 August 2021 в 15:31

Теги

Похожие вопросы