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

Как лучше всего разместить несколько устройств, которые хотят использовать один и тот же фиксированный IP-адрес, в одной локальной сети?

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

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

Я думаю, что может сработать, так это использовать устройство с поддержкой уровня 3, чтобы по существу выполнять трансляцию сетевых адресов, но мне не нужно преобразовывать NAT во всю локальную сеть, как кажется, для большинства обычных маршрутизаторов. Что я действительно хотел бы сделать, так это применить статический NAT для каждого порта. Я хотел бы сказать маршрутизатору (?): «Вы видите это устройство, подключенное к порту 2, которое думает, что это 10.1.1.1? Сделайте его похожим на 192.168.1.2, а это другое подключено к порту 3, что также думает, что это 10.1.1.1 - сделать который один выглядит как 192.168.1.3 ".. и т. д. (при условии, конечно, что остальная часть моей LAN - 192.168.1 / 24)

Я работал с «коммутатором», который выполняет VLAN и домены маршрутизации, но, похоже, не имел возможности преобразовывать адреса между VLAN. Ограничения по пространству и стоимости не позволяют выделить целый маршрутизатор с поддержкой NAT для каждого устройства.

Так возможно ли такое? Если да, то какое устройство нужно для этого? Черт возьми, может, переключатель, с которым я работаю жестяная банка сделай это, я просто не знаю, что искать и не узнал! Но если это просто не сделано, я бы хотел узнать, почему бы и нет, выяснить, в чем мог бы быть изъян в моем мышлении. Однако это не кажется невозможным.

Поскольку все устройства будут иметь один и тот же реальный IP-адрес, вам потребуется выполнить какое-то маскирование или статический NAT.

Одним из решений может быть размещение каждого устройства (коммутатора) в отдельной VLAN и маршрутизации между сетями. Коммутатор должен иметь возможность выполнять статический нат для каждого порта.

Другое решение может заключаться в том, чтобы сделать Linux-машину на одном порте, входящем во все VLAN, и использовать виртуальные IP-адреса и выполнять часть маршрутизации / nat в Linux. Iptables умеет делать NAT.

Это может быть сделано. Собственно, в прошлом году я сам это делал.

3 устройства Airco с мониторингом локальной сети, каждое из которых настаивало на использовании 10.0.0.2 и ожидает, что шлюз по умолчанию будет 10.0.0.1, а подсеть - 255.0.0.0. Его может изменить, но только производитель, который больше не работает.

Покупать новые не представлялось возможным: промышленные единицы примерно по 100 000 долларов за штуку.

Хуже всего: связь должна была быть двухсторонней: удаленный доступ к веб-интерфейсу в устройстве, и он должен был иметь возможность отправлять сообщения системного журнала самостоятельно.

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

Я купил 3 дешевых полочных роутера (D-Link DIR-615). Разместите каждое устройство за собственным маршрутизатором. Установите для каждого маршрутизатора значение 10.0.0.1 на стороне LAN и выполните перенаправление портов для HTTP на адрес 10.0.0.2. Сторона WAN каждого маршрутизатора перешла в обычную локальную сеть, где каждый получил свой обычный IP-адрес.

Чтобы подключиться к устройству, я просто указываю веб-браузеру IP-адрес WAN маршрутизатора, а остальное делает переадресация портов. Сообщения системного журнала (исходящие) устройств переходят через NAT и, по всей видимости, приходят от 3 маршрутизаторов.

Единственным недостатком является то, что для перенастройки D-Links мне нужно подключить ПК к LAN-стороне каждого, чтобы я мог получить доступ к веб-интерфейсу управления маршрутизатором. (D-link фактически может запускать его интерфейс управления на стороне WAN, но, насколько я могу судить, только на порту 80, который мешал бы перенаправлению портов.)

Если фиксированный IP-адрес не перекрывается с допустимым хостом в вашем сегменте, я бы просто подключил их и установил для них поддельные адреса на хосте, на котором запущено программное обеспечение для управления. Просто добавьте статическую запись arp к MAC-адресу конкретных устройств, и теперь вы можете разместить их обоих в сегменте, «используя» разные адреса.

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

Я считаю, что есть гораздо более простое решение из предложенных здесь.

Требования: ваши устройства, 1 коммутатор (с возможностью подключения к VLAN и доступа, я предполагаю, что Cisco для простоты), 1 компьютер с Linux. Я предполагаю, что IP-адрес, откуда эти устройства достигаются, не имеет значения (если это так, это становится еще более «забавным»).

Я предполагаю, что все целевые устройства работают на статический 10.0.0.2, шлюз 10.0.0.1, маска 255.255.255.0 (см. другой ответ здесь).

На коммутаторе подключите порт 1 к первому устройству:

interface Gi0/1
  switchport mode access
  switchport access vlan 10

На коммутаторе подключите порт 2 ко второму устройству:

interface Gi0/2
  switchport mode access
  switchport access vlan 20

На коммутаторе подключите порт 3 к ПК, который будет контролировать:

interface Gi0/2
  switchport mode trunk
  switchport trunk allowed vlan 10,20

Теперь у нас уже есть разделение канального уровня, но, к сожалению, на этом не заканчивается.

На вашем ПК с Linux настройте 2 виртуальных интерфейса. Точные команды для этого включены ниже.

eth0.10 ip-адрес 10.0.10.1 255.255.255.0 eth0.20 ip-адрес 10.0.20.1 255.255.255.0

А теперь самое интересное, вроде веселья. Виртуальные сетевые карты, VRF, iptables и множество маршрутов!

# First create 2 vrf for both devices
ip link add device1 type vrf table 1
ip link add device2 type vrf table 2
ip link set dev vrfdevice1 up
ip link set dev vrfdevice2 up

# Second, create vlan device
ip link add link eth0 name eth0.10 type vlan id 10
ip link add link eth0 name eth0.20 type vlan id 20

# Add the vlan to the correct vrf
ip link set eth0.10 master vrfdevice1
ip link set eth0.20 master vrfdevice2

# Assign them proper IP address (unique)
ip addr add 10.0.10.1/24 dev eth0.10
ip addr add 10.0.20.1/24 dev eth0.20

# Add the route in the **normal** route table to these devices (so normal kernel can work with it)
ip route add 10.0.10.0/24 dev eth0.10
ip route add 10.0.20.0/24 dev eth0.20

# Add the route to the targets on both VRF
ip route add 10.0.0.0/24 dev eth0.10 table 1
ip route add 10.0.0.0/24 dev eth0.20 table 2

# Verify your routes in the tables!
ip -br route show table 1
  10.0.0.0/24 dev eth0.10 scope link
  10.0.10.0/24 dev eth0.10 proto kernel scope link src 10.0.10.1
ip -br route show table 2
  10.0.0.0/24 dev eth0.20 scope link
  10.0.20.0/24 dev eth0.20 proto kernel scope link src 10.0.20.1

Теперь идет настоящий приколы, ip столы!

iptables -t nat -A OUTPUT --destination 10.0.10.2 -j DNAT --to-destination 10.0.0.2 --out-interface vrfdevice1
iptables -t nat -A OUTPUT --destination 10.0.20.2 -j DNAT --to-destination 10.0.0.2 --out-interface vrfdevice2

И это все! Думаю. Я проверил это с помощью wirehark, что он работает ...

Дана команда: telnet 10.0.10.2

Вывод Wireshark: ARP: У кого 10.0.0.2? Скажите 10.0.10.1

И снова: telnet 10.0.20.2

Вывод Wireshark: ARP: У кого 10.0.0.2? Скажите 10.0.20.2

Это было довольно масштабное мероприятие, если что-то из этого помогло вам, пожалуйста, дайте мне знать и проголосуйте за ответ. На самом деле нам не нужно много дорогих маршрутизаторов, VRF может исправить большую часть этого, особенно в сочетании с виртуальными интерфейсами! Самое интересное, что теперь все это может работать в Linux, классная штука