Назад | Перейти на главную страницу

Два сетевых адаптера, два статических общедоступных IP-адреса, один и тот же шлюз в CentOS 7

У меня есть сервер с двумя сетевыми адаптерами, каждый из которых настроен на статический IP-адрес (оба общедоступные, если это имеет значение). Они принадлежат одной подсети. Например (поддельные IP-адреса, но по той же логике):

NIC1:

# cat ifcfg-enp4s0 
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
NAME="enp4s0"
DEVICE="enp4s0"
ONBOOT="yes"
DNS1="192.168.1.1"
IPADDR=192.168.0.1
PREFIX=24
GATEWAY=192.168.0.254
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_PRIVACY=no

NIC2:

# cat ifcfg-enp2s0f0 
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.0.2
PREFIX=24
GATEWAY=192.168.0.254
DNS1=192.168.1.1
DEFROUTE=no
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp2s0f0
DEVICE=enp2s0f0
ONBOOT=yes

Я бы хотел, чтобы исходящие соединения по умолчанию проходили через NIC1, если он не отключен - тогда он должен проходить через NIC2.

Пакеты на 192.168.0.1 должны идти на NIC1, а ответы должны исходить от NIC1. Точно так же пакеты на 192.168.0.2 должны поступать на NIC2, а ответы исходить от NIC2.

С приведенной выше конфигурацией я получаю следующий маршрут:

# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.254  0.0.0.0         UG    100    0        0 enp4s0
192.168.0.0    0.0.0.0         255.255.255.0   U     100    0        0 enp2s0f0
192.168.0.0    0.0.0.0         255.255.255.0   U     101    0        0 enp4s0

Теперь сервер подключен, но только 192.168.0.1 доступен для проверки связи извне. 192.168.0.2 недоступен.

Сетевые специалисты говорят мне, что 192.168.0.2 доступен из той же подсети, так что это, должно быть, ошибка в моей конфигурации, которая делает недоступным снаружи.

Что я сделал не так? Можете посоветовать как исправить?

Я думаю, вам было бы лучше связать две сетевые карты и назначить один IP-адрес для связи.

В Документация RedHat есть хорошее руководство по этому поводу.

Исходя из того, что вы заявляете о своих требованиях, вы, скорее всего, захотите mode = 1 (но проверьте, не могут ли другие режимы сделать что-то «лучше» - например, удвоение пропускной способности, если только одна сетевая карта не выйдет из строя).

Если связь не является приемлемым решением, вы можете создать статические маршруты с метриками для каждого интерфейса, чтобы один был предпочтительнее другого (я думаю, вам удастся обойтись без установки GATEWAY в каждом ifcfg -PORT файл).

NIC2 доступен локально, потому что адресуется его физическим (MAC) адресом, а не IP. Когда вы пытаетесь связаться с ним удаленно, я склонен думать, что вам потребуется включить переадресацию IP.

tl; dr: Связь упростит вашу жизнь и сделает сервер более устойчивым, но если вы действительно этого не хотите, вам, вероятно, понадобится некоторая комбинация метрик / затрат маршрута и ip_forwarding. Но вы не сможете избежать прохождения трафика NIC2 через NIC1, когда NIC1 активен, поскольку у него есть предпочтительный маршрут по умолчанию (то есть более низкая метрика / стоимость).