1

Потерпите меня. Это относится к этому вопросу переполнения стека.

Моя вещь в Linux (на самом деле BeagleBoard) имеет два интерфейса, eth0 и eth1. Необходимо подключиться к клиентской сети по eth0 (диапазон адресов неизвестен, может быть DHCP, вероятно, 192.168.0.x). Моему программному обеспечению также необходимо подключиться к другому устройству на eth1 через частную связь (т. Е. Просто с устройства на устройство). Я хочу, чтобы частная сеть была полностью отделена - она не должна быть видна в основной сети. Только мой собственный код на Бигле будет общаться с устройством на eth1.

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

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

Можно ли настроить маршрутизацию так, чтобы дублированные IP-адреса (в основной сети и в моей частной сети) работали (учитывая, что я могу указать интерфейс и IP-адрес)? Или это сумасшедший разговор? На самом деле мне не нужно ничего "маршрутизировать" между сетями, и моему частному устройству не нужно видеть основную сеть. Мне просто нужно, чтобы он все еще работал, даже если IP-адреса совпадают.

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

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

Есть идеи? В том числе делать это другим способом ... Спасибо!

1 ответ1

2

Две части; Сначала специфическая сторона Linux:

Создайте свой интерфейс, следя за тем, чтобы ваш внутренний интерфейс не влиял на таблицу маршрутизации linux. Команды netstat и ip должны быть вашими друзьями в анализе информации о маршруте.

Как только ваш интерфейс не будет глобально маршрутизируемым, продолжайте и привязывайте к нему интерфейс с помощью setsockopt после создания сокета. Вот два варианта, которые вам могут понадобиться:

SO_BINDTODEVICE
SO_DONTROUTE

Смотрите также linux/if.h.

Проще, но не полный ответ на ваш вопрос; Используйте IPv6.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .