Доступ к беспроводной локальной сети (без шлюза) и мобильной сети одновременно

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

У меня есть малина Pi, и она работает как горячая точка среди прочего. По дизайну DHCP не передает шлюз по умолчанию. Моим вариантом использования является одно или несколько устройств, взаимодействующих с Pi в качестве сервера.

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

В данный момент:

IOS : Это работает точно так же, как я ожидаю в IOS – он чувствует, что сеть WiFi не имеет шлюза по умолчанию и отправляет внешний трафик по ячейке.

Android : Это не работает вообще. Android упорно видит WiFi подключен и отключает сотовый, даже со шлюзом по умолчанию.

Windows Phone : Тип гибрида. Обе сети не работают, но мой сценарий имеет запись DNS в общедоступном DNS, а общедоступный сайт ссылается на ресурс на Pi. Если я ссылаюсь на ресурс напрямую, используя IP-адрес WiFi Pi, он отлично работает (хотя это вызывает другие проблемы, связанные с безопасностью). Если я связываюсь через полное доменное имя, я на самом деле не уверен, что происходит. Он не разрешается из веб-браузера, хотя каждая сетевая утилита, которую я установил на телефоне для устранения неполадок, правильно разрешает полное доменное имя к адресу Pi через DNS.

Надеюсь, это имеет смысл. Вопрос: Как включить эту функциональность по всем направлениям в 2015 году? 🙂 Для моих целей, Pi как частная непрозрачная точка доступа работает лучше, чем WiFi напрямую или Bluetooth. И помните, я не прошу телефон МАРШРУТ; Мне нужно, чтобы мое пользовательское приложение могло одновременно подключаться к Pi и к общедоступному Интернету. Я хочу, чтобы все телефоны делали то, что делает IOS в этом отношении.

Мой нынешний сценарий – это Pi-хостинг веб-страницы (среди прочего), и это мое предпочтение, но может ли это быть решено изначально?

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

Это маршрутизация, потому что трафик с телефона должен быть перенаправлен на один из двух интерфейсов. Там не может быть маршрутизация по телефону, но это все еще проблема маршрутизации. К счастью, кажется, что часть маршрутизации работает на всех трех платформах.

Это также необычная форма привязки. Единственное отличие состоит в том, что трафик не исходит из Pi, а из телефона, а Pi вместо телефона действует как точка доступа.

Думая об этом с точки зрения привязки, важно, потому что это показывает, что Android МОЖЕТ иметь WiFi и сотовый актив в одно и то же время (по крайней мере, в режиме «горячей точки», но, вероятно, также в режиме клиента). В этом отношении мой ответ не завершен – я не могу сказать, КАК это сделать.

Что касается проблемы с телефоном Windows, которую вы упомянули: чтобы устранить эту проблему, сначала определите, где находится DNS-сервер, который знает о FQDN Pi. Об этом знает общедоступный DNS-сервер, хотя он явно находится в частной сети?

Есть два возможных объяснения для вашего наблюдения:

  • Нет общедоступного DNS-сервера, который даже знает это полное доменное имя. В этом случае IOS, вероятно, использует что-то вроде mDNS для поиска малины Pi.
  • Существует общедоступный DNS-сервер, который знает это полное доменное имя. В этом случае, возможно, Windows Phone проверяет ответ DNS для марсиан и отклоняет его, думая, что это атака.

В любом случае, вам действительно нужно иметь две отдельные DNS-инфраструктуры. Одним из способов сделать это является включение небольшого DNS-сервера (возможно, dnsmasq) с вашим приложением и настройка пересылки для зоны с полным доменным именем Pi для пересылки на IP-адрес Pi (который должен быть жестко запрограммирован, очевидно). Все остальные запросы должны поступать на обычные DNS-серверы.

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