Вопрос: Несколько IP-адресов в одной подсети на одном и том же хосте


Возможно ли это (ну, в реальной редакции должно быть «Правильно ли это»), чтобы иметь несколько IP-адресов, принадлежащих к одной и той же подсети, на одном хосте?

Вот пример:

#Host 1
eth0   -> 10.0.0.1/24
eth1   -> 10.0.0.2/24
eth1:1 -> 10.0.0.3/24

У меня есть интуиция, что это не может работать из-за проблем маршрутизации, но я не могу объяснить, почему я так думаю.

Правильно ли этот шаблон? Если да, то это распространено? В чем могут быть проблемы с такой конфигурацией?


7
2017-11-03 15:16


Источник




Ответы:


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


5
2017-11-03 15:20



Спасибо за андерсера. Как настроить этот хост для связи с одним локальным адресом на другой? В других терминах: что мне настроить, чтобы я мог ping от 10.0.0.1 в 10.0.0.3 ? - ereOn
ping должен просто работать - какая у вас маска подсети? - Chopper3
Я использую /24, - ereOn
должен просто работать ... - Chopper3


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

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


4
2017-11-03 16:24





Это прекрасно, но делать это так, как вы, - с несколькими физическими интерфейсами в одной подсети, подключенной к одному и тому же коммутатору, - не рекомендуется. Linux вообще справляется с этим, но некоторые ОС (например, Solaris) действительно не нравятся.

Поместите все свои адреса на один физический интерфейс (eth0, eth0: 0, eth0: 1 и т. Д.) И подключите только это. Если вы хотите подключить несколько интерфейсов для повышения производительности, посмотрите на склеивание, а затем перегрузите связанный интерфейс (bond0 , bond0: 0, bond0: 1 и т. д.).


2
2017-11-03 16:02





У меня есть сложная настройка где-то, где используется этот тип сети. У меня есть два внутренних интерфейса и внешний интерфейс с Интернетом. (это вот-вот изменится на два внешних интерфейса в разных подсетях и на внутренний интерфейс, разделенный на два внутренних интерфейса, но он идет по одному и тому же маршруту) В любом случае - на ответ!

допустим, у вас есть два внутренних интерфейса:

eth0 192.168.1.2
eth1 192.168.1.3

Вы используете внутреннюю восходящую линию связи с Интернетом (маршрутизатором) в 192.168.1.1

Таким образом, ваша таблица маршрутизации по умолчанию будет выглядеть (команда: netstat -rn)

Dest            Gw         Genmask   Flags  ... ... Iface

0.0.0.0     192.168.1.1    0.0.0.0    UG           eth0

192.168.1.0  0.0.0.0     255.255.255.0 U           eth0

192.168.1.0  0.0.0.0     255.255.255.0 U           eth1

Вот ваша проблема, все выходные будут проходить через eth0 потому что это первый хит в вашей таблице маршрутизации. Поэтому, если вы используете другой компьютер (или даже тот же самый) для ping 192.168.1.3 (eth1), вы не получите ответ? Зачем? Потому что это происходит из 192.168.1.2,

Вы должны будете использовать iproute2 для настройки отдельных таблиц маршрутизации для каждого устройства. Таким образом, когда устройство получает что-то на INPUT она отвечает через одно и то же устройство.

редактировать /etc/iproute2/rt_tables Добавить:

1  my_eth0

2  my_eth1 

затем выполните следующее:

ip route add 192.168.1.0/24 dev eth0 table my_eth0

ip route add default via 192.168.1.1 dev eth0 table my_eth0

ip route add 192.168.1.0/24 dev eth1 table my_eth1

ip route add default via 192.168.1.1 dev eth1 table my_eth1

Теперь добавьте правила для таблиц, которые будут использоваться, выполнив:

ip rule add from 192.168.1.2 table my_eth0

ip rule add from 192.168.1.3 table my_eth1

Это сообщит вашей системе, что когда она получает запрос на eth0 использовать my_eth0 таблицу маршрутизации для ответа. Когда он получает запрос на eth1, ответ используя my_eth1 таблица маршрутизации. Когда вы получаете рабочие команды, поместите их в свои /etc/rc.local файл и сделать rc.local исполняемый файл путем выполнения sudo chmod u+x /etc/rc.local таким образом, ваши маршруты не стираются при перезагрузке. Повеселись!


2
2017-08-10 06:47





Нет, эта конфигурация не рекомендуется, несмотря на распространенное мнение.

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

Однако, имея разные физический интерфейс в той же подсети (или хуже всего, в разных подсетях, но в том же широковещательном домене) может привести к проблемам из-за не детерминированных записей ARP. Это применимо, по крайней мере, к Solaris и Linux. Если по какой-либо причине вам все равно нужно это сделать, рекомендуется или необходимо настроить поведение ARP, то есть отключить ARP на одном из интерфейсов или настроить ARP, чтобы ограничить его ответы с физического интерфейса на соответствующий ему IP-адрес (ы). Найдите arp_filter в http://www.mjmwired.net/kernel/Documentation/networking/ip-sysctl.txt , Другой способ - установить сетевую маску на / 24 на всех, кроме одного из интерфейсов.

В Solaris поддерживаемый способ настройки нескольких интерфейсов в одной и той же подсети будет использовать IPMP (IP-многолучевое распространение).

Наконец, это ограничение не применяется, если физические интерфейсы не используют один и тот же стек IP (например, исключительные IP-зоны Solaris) или изолированы пометкой VLAN 802.1Q.


2
2017-11-03 23:21





Это можно сделать. Я использовал его раньше.

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

Я настроил несколько IP-адресов на одном и том же интерфейсе, и мое приложение было настроено использовать эти IP-адреса в циклическом режиме.


1
2017-11-03 15:26





Да, это сработает.

Как намечено в других ответах, настоящая цель заключается в том, чтобы обслуживать разные службы на разных IP-адресах.

Если у вас были IIS и Apache на одном компьютере, и вы хотели запустить их как на порт 80, вам нужно будет установить один из 10.0.0.1, а другой на 10.0.0.2, поскольку оба они не могли обслуживать порт 80 тот же IP-адрес.

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

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


1
2017-11-03 15:57





Я собираюсь бросить здесь немного оговорки. А именно, что обычные инструменты Linux дадут вам проблемы. Они вообще не обрабатывают несколько интерфейсов. Для этого вам нужно будет использовать iproute2, Это менее распространенный инструмент, чем обычный метод ifconfig / route. Без этого вы увидите странное и неправильное поведение, как один сетевой адаптер, реагирующий на трафик других.


- Кристофер Карел


1
2017-11-03 17:06