
У меня следующая топология
.───────────────.
┌──────────────────┐ _.─' `──.
│ │ ,─' '─.
│ 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. Проблема в том, что провайдер не транслирует трафик, идущий к конечной точке, 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, с преимуществом локального трафика, который не должен выходить через сеть интернет-провайдера, как раньше.
Другая альтернатива, которая, по моему мнению, должна решить эту проблему, этомаршрутизация шпилькиОднако маршрутизатор, предоставленный моим интернет-провайдером, похоже, не поддерживает эту функцию.