Я хотел бы связаться со специальным IP-адресом на крошечном устройстве Linux, у которого есть два интерфейса Ethernet, которые используются на мосту.
Мост устроен так:
# Delete bridge if it exists
ip link delete $BRIDGE_IF type bridge
# Prepare device-facing interface
ip link set dev $DEVICE_IF down
ip address flush dev $DEVICE_IF
ip address add 0.0.0.0 dev $DEVICE_IF
ip link set dev $DEVICE_IF up
# Prepare network-facing interface
ip link set dev $NETWORK_IF down
ip address flush dev $NETWORK_IF
ip address add 0.0.0.0 dev $NETWORK_IF
ip link set dev $NETWORK_IF up
# Create bridge and add interfances
ip link add name $BRIDGE_IF type bridge
ip link set dev $BRIDGE_IF up
ip link set dev $DEVICE_IF master $BRIDGE_IF
ip link set dev $NETWORK_IF master $BRIDGE_IF
# Add IPv4 address to bridge interface
ip -4 address add $BRIDGE_IPV4 dev $BRIDGE_IF
# Make sure forwarding is enabled.
sysctl -w net.ipv4.ip_forward=1
У меня прозрачный мост, но я хотел бы общаться с $SPECIAL_IP
с устройства. У него больше нет интерфейсов Ethernet, и он должен использовать IP-адрес устройства, к которому он подключен (я могу получить это надежно с помощью сокета, прочитанного на $DEVICE_IF
).
Итак, в основном, мне нужно установить TCP / IP-связь с IP-адресом, который не мешает никаким другим коммуникациям, проходящим через мост. Я пробовал бесчисленное количество итераций iptables, ebtables и настраивал маршруты, но безрезультатно. И я не думаю, что повторное чтение какой-то онлайн-документации в который раз поможет (например, http://ebtables.netfilter.org/br_fw_ia/br_fw_ia.html#section7).
Изменить: добавлена диаграмма
Изменить: добавлено рассуждение / фон
Мне нужно добавить некоторые функции ко многим (думаю, многим тысячам) устаревших устройств с поддержкой Ethernet, которые мы не можем изменить (то есть, обновления программного обеспечения или прошивки невозможны или разрешены). «Mini Linux Device» обеспечивает функциональность брандмауэра, но также ему необходимо отправлять и получать сообщения, чтобы обеспечить все дополнительные функции. Многие (около 65%) сети, в которой находятся устаревшие устройства, не могут добавить достаточное количество новых IP-адресов (или достаточно новых MAC-адресов по «причинам»), чтобы все устаревшие устройства могли иметь добавленное «устройство Mini Linux». . Это потому, что (1) используется более 50% XXX.XXX.XXX.0 / 24, и (2) многие IP-адреса и / или MAC-адреса «жестко закодированы» в некоторых вышестоящих системах управления. Эти «глупые» сетевые ограничения (IP и MAC) вызваны устаревшими причинами (подумайте о сетях SCADA 1990-х годов); поэтому я пытаюсь создать «Mini Linux Device», которому нужно использовать только IP и MAC устройства, которое оно расширяет. Итак, я создал мост, и я могу добавить брандмауэр iptables, что делает нас лучше, чем ничего, но для добавления дополнительных функций «Mini Linux Device» должен иметь возможность взаимодействовать с самим собой.
ПРИМЕЧАНИЕ 1: Мы можем гарантировать, что IP-адреса ($SPECIAL_IP
), которых больше одного, являются IP-адресами, с которыми устаревшее устройство никогда не будет или никогда не должно напрямую связываться с ними, и в основном, но не исключительно, они находятся за пределами частного адресного пространства.
ЗАМЕТКА 2: Если есть совершенно другой способ реализовать это, я все слышу, хотя мне все равно хотелось бы знать, возможно ли это.
Кто-нибудь знает как это сделать?
Вам не нужен мостовой интерфейс. Интерфейс моста используется, когда к одной сети подключено несколько интерфейсов. Ваш случай другой.
Снимите DEVICE_IF с моста.
Назначьте DEVICE_IF IP-адрес из сети DEVICE. Убедитесь, что вы можете проверить связь с устройством.
Кроме того, вам не нужно назначать 0.0.0.0 для вашего мостового интерфейса.