У меня следующая топология
.───────────────.
┌──────────────────┐ _.─' `──.
│ │ ,─' '─.
│ 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
.
В итоге я решил проблему, применив раздельный DNS, развернув DNS-сервер на моем хосте и заставив всю локальную сеть использовать его в качестве DNS-сервера по умолчанию. Там я добавил пользовательские правила перезаписи DNS для mydomain.com
для перенаправления на 10.0.0.5
вместо общедоступного адреса. Таким образом, хосты в локальной сети разрешают мой домен во внутренний IP-адрес, а хосты за пределами локальной сети разрешают его в общедоступный IP-адрес, благодаря чему локальный трафик не должен выходить через сеть интернет-провайдера, как раньше.
Еще одна альтернатива, которая, по моему мнению, должна решить эту проблему, — это шпилька. Однако маршрутизатор, который предоставляет мой провайдер, похоже, не поддерживает это.
Я полагаю, что это связано с тем, что Сервер получает пакет от интерфейса 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-адрес сервера вручную.
Помимо постороннего маршрута по умолчанию, то, что вы описали, является нормальной операцией по умолчанию. Обязательно найдите другие проблемы, не описанные выше:
Это проблема маршрутизации, которую можно решить с помощью маршрутизации на основе источника или маршрутизации на основе политик. Это включает в себя две таблицы маршрутизации, по одной для каждого исходного адреса:
См. http://tldp.org/HOWTO/Adv-Routing-HOWTO/lartc.rpdb.multiple-links.html для получения более подробной информации. .