Предположим, у меня есть устройство с поддержкой 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, классная штука