Linux Сетевая маршрутизация на виртуальные IP-адреса из другой подсети

Новое в сети linux, возникло вопрос о маршрутизации на виртуальные IP-адреса из другой подсети.

У меня есть три сервера (они могут все пинговать друг друга):

A 10.10.51.182 (подключен к маршрутизатору Y)
B 10.10.51.183 (подключен к маршрутизатору Y)
C 10.10.60.10 (подключен к маршрутизатору Z)

На сервере A я создал 1000 виртуальных интерфейсов:

# ifconfig eth0:0 192.168.1.1 netmask 255.255.0.0 # ifconfig eth0:1 192.168.1.2 netmask 255.255.0.0 .... # ifconfig eth0:999 192.168.5.200 netmask 255.255.0.0 

Каждый виртуальный интерфейс имитирует устройство камеры, с программным обеспечением для моделирования камеры.

На сервере B я добавил следующий маршрут:

 # route add -net 192.168.0.0 netmask 255.255.0.0 eth0 

И voila, B может получить доступ к виртуальным интерфейсам машины A / ping.

Сервер C, который находится в другой подсети (10.10.60.0), добавил этот маршрут, но даже у меня была очень низкая надежда на его работу:

 # route add -net 192.168.0.0 netmask 255.255.0.0 eth0 

Как и ожидалось, мне не удалось добраться до виртуальных интерфейсов сервера A , поэтому я удалил маршрут и добавил следующий маршрут, используя шлюз ip маршрутизатора Y :

 # route add -net 192.168.0.0 netmask 255.255.0.0 gw 10.10.51.1 eth0 SIOCADDRT: Network is unreachable 

Шлюз 10.10.51.1 является pingable сервером C , однако я думаю, что сообщение об ошибке означает, что gw не находится непосредственно в одной подсети (10.10.60).

Какую конфигурацию / маршрут можно настроить на сервере A и / или C для C для ping / доступа к виртуальным интерфейсам сервера A. У меня нет доступа к изменению конфигурации маршрутизаторов.

Хотя, если это невозможно, просто изменив конфигурацию серверов, может кто-то объяснить в сетевых терминах, почему B может получить доступ к виртуальным интерфейсам A , но C не может получить к ним доступ. Разве маршрутизатор Y видит пакеты, привязанные к «192.168.0.0» от C, и автоматически их отбрасывает, тогда как когда пакеты, исходящие из одной и той же подсети ( B ), разрешаются?

2 Solutions collect form web for “Linux Сетевая маршрутизация на виртуальные IP-адреса из другой подсети”

Простое решение создает туннель между двумя серверами, например:

На сервере A:

 ip tunnel add tunnel mode ipip remote 10.10.60.10 ip addr add 10.1.1.1/24 dev tunnel sysctl -w net.ipv4.ip_forward=1 

Последняя команда предназначена для пересылки пакетов с вашего недавно созданного туннельного устройства на ваши виртуальные устройства ethernet.

На сервере C

 ip tunnel add tunnel mode ipip remote 10.10.51.182 ip addr add 10.1.1.2/24 dev tunnel ip route add 192.168.0.0/16 via 10.1.1.1 

В зависимости от ваших брандмауэров между серверами вам может потребоваться настроить некоторые правила.

Объяснение: Server A и Server B находятся в общем сетевом сегменте, например, они могут отправлять пакеты друг другу без необходимости отправки пакетов на их шлюз. Это означает, что Server B просто пытается напрямую разрешить адрес 192.168.1.1 через ответы ARP и Server A

Server A и Server C находятся в разных сегментах сети, например, если Server C просто запрашивает 192.168.1.1 (это будет ваша команда маршрута для Server C ), он не получит ответа. Чтобы решить эту проблему, вы обычно можете указать, как вы можете связаться с определенной системой через таблицы маршрутизации, но вы можете указать только следующий прыжок. Поскольку router Z похоже, не знает о 192.168.0.0/24 вам необходимо создать туннель между двумя системами.

Один небольшой дополнительный намек, вам не нужно создавать виртуальные устройства ethernet, вы можете добавить произвольное количество IP-адресов на одно сетевое устройство, например:

 for first in {1..4} ; do for second in {1..255} ; do ip addr add 192.168.$first.$second/16 dev eth0 done done 

У вас есть несколько вариантов:

  • Компьютер C нуждается в ссылке на ту же физическую сеть, что и A и B.
  • Маршрутизатор Y должен иметь адрес в 192.168.0.0/16, а маршрутизатору Z нужен маршрут для 192.168.0.0/16 через маршрутизатор Y.
  • Создайте туннель ip-ip (или VPN) между компьютером C и компьютером A; трафик маршрута для 192.168.0.0/16 через интерфейс туннеля.

Создание туннеля, вероятно, лучше всего подходит для модификации только компьютеров A и C. См. IP-IP Howto для шагов.

  • Прочтите «/ proc», чтобы узнать, открыл ли процесс порт
  • Как я могу регистрировать исходящий трафик TCP, включая полный путь к URL-адресам?
  • Как отключить выгрузку контрольной суммы tcp на OSX 10.11.6?
  • Соединение SSH, дающее отказ в соединении
  • Почему для очистки прослушивающего TCP-порта после завершения программы требуется несколько минут?
  • Какой процесс прослушивает порт?
  • Port netcat запрашивает информацию для скрипта bash
  • Работает nfs для tcp, но не над udp
  • Данные о трубах от подключения сокета TCP к терминалу
  • Сервер ретрансляции для общего трафика TCP?
  • Определение того, какой процесс связан с портом
  • Linux и Unix - лучшая ОС в мире.