【问题标题】:Accessing WiFi LAN (no gateway) and mobile network simultaneously同时访问WiFi LAN(无网关)和移动网络
【发布时间】:2015-02-09 05:56:51
【问题描述】:

我知道之前有人问过这个问题(解决方案有限或没有解决方案),但我没有看到任何最近的更新,我认为我的方案是独一无二的,所以我将开始一个新线程。

我有一个 Raspberry Pi,它可以用作热点。按照设计,DHCP 不会分发默认网关。我的用例是一台或多台设备与作为服务器的 Pi 交互。

其中一个连接的设备将是移动设备(编辑:运行我设计的自定义应用程序,这是整个解决方案的一部分),并且该设备将保持其蜂窝连接,不是为了网络共享或路由,而是为了应用程序可以同时访问内部和外部资源。

目前:

IOS:这完全符合我在 IOS 上的预期 - 它感知 WiFi 网络没有默认网关并通过单元发送外部流量。

Android:这根本行不通。 Android 顽固地认为 WiFi 已连接并禁用蜂窝网络,即使没有默认网关。

Windows Phone:一种混合体。两个网络都保持正常运行,但我的方案在公共 DNS 中有一个 DNS 条目,并且一个公共站点链接到 Pi 上的资源。如果我直接使用 Pi 的 WiFi IP 地址链接到资源,它可以正常工作(尽管这会导致其他与安全相关的问题)。如果我通过 FQDN 链接,我实际上不确定发生了什么。尽管我在手机上安装的用于故障排除的每个网络实用程序都通过 DNS 将 FQDN 正确解析为 Pi 地址,但它并不能从 Web 浏览器解析。

希望这是有道理的。问题:如何在 2015 年全面启用此功能? :) 就我的目的而言,Pi 作为私有不可路由热点比 WiFi 直连或蓝牙效果更好。请记住,我不是在要求电话路由;我需要我的自定义应用程序能够同时连接到 Pi 和公共互联网。我希望所有的手机都做IOS在这方面做的事情。

我当前的场景是 Pi 托管一个网页(除其他外),这是我的偏好,但这甚至可以在本地解决吗?

【问题讨论】:

  • 这与编程无关……如果您在其他地方发帖,可能会取得更大的成功。
  • 但程序员是最有可能有类似需求的人,因此他们最有可能知道哪些变通方法/晦涩的 API/替代方案可能有效。
  • True... ThisThis 可能会有所帮助,尽管只有当您在自己编写的应用程序中执行网络请求时才可能有所帮助。 (因此您可以使用适当的 API)
  • 更新了问题以包括这是我正在开发的整体解决方案中的一个问题,其中包括(我认为显然是)跨平台自定义移动应用程序:)。
  • Android 好运吗?我也在寻找几乎相同的场景,包括将 Pi 作为特定服务的接入点,并希望从移动连接下载一些数据。

标签: android ios network-programming windows-phone android-wifi


【解决方案1】:

你说这不是网络共享或路由的情况,但如果你仔细想想,它确实是两者兼而有之。

这是路由,因为来自电话的流量需要路由到两个接口之一。可能没有路由通过电话,但这仍然是路由问题。幸运的是,路由部分似乎可以在所有三个平台上运行。

这也是一种不寻常的网络共享形式。唯一的区别是流量不是来自 Pi,而是来自手机,并且 Pi 而不是手机充当接入点。

从网络共享的角度考虑它很重要,因为它表明 Android 可以同时激活 WiFi 和蜂窝网络(至少在热点模式下,但也可能在客户端模式下)。在这方面,我的回答并不完整——我无法告诉你如何做到这一点。

至于你提到的 Windows phone 问题:为了解决这个问题,首先确定知道 Pi 的 FQDN 的 DNS 服务器所在的位置。公共 DNS 服务器是否知道它,即使它显然位于专用网络上?

您的观察有两种可能的解释:

  • 没有甚至知道这个 FQDN 的公共 DNS 服务器。在这种情况下,IOS 可能会使用 mDNS 之类的工具来定位 Raspberry Pi。
  • 一个知道这个 FQDN 的公共 DNS 服务器。在这种情况下,Windows Phone 可能会检查火星人的 DNS 回复并拒绝它,认为这是一种攻击。

无论哪种方式,您真正需要的是拥有两个独立的 DNS 基础架构。一种方法是在您的应用程序中包含一个小型 DNS 服务器(可能是 dnsmasq),并为具有 Pi 的 FQDN 的区域配置一个转发器,以转发到 Pi 的 IP 地址(显然,这必须是硬编码的)。所有其他请求都应该发送到正常的 DNS 服务器。

另一种方法可能是根本不使用 DNS,而是使用 hosts 文件。

【讨论】:

  • 关于windows的情况,最好在pi上放一个DNS服务器。我已经为该私有 IP 建立了一个公共 dns 条目,但可能是 wifi 连接没有利用公共资源并且可以通过蜂窝网络使用。除非我可以将主机文件放在每个电话客户端上,否则主机将无济于事 - 电话需要分辨率,以便 CORS 能够正常工作。
  • 我实际上怀疑 Windows 出于安全原因可能会简单地使用它认为“无效”的 IP 地址来阻止 DNS 响应。此外,在 pi 上放置 DNS 服务器本身也无济于事。此外,您还必须有办法将针对该 FQDN 的 DNS 查询定向到 Pi,并将所有其他查询定向到公共 DNS 服务器。因此,设备内需要另一个 DNS 服务器。在主机上:是的,我的意思是在每部手机的主机文件中添加您的 FQDN。安装您的应用时,这可能是微不足道的,也可能是不可能的。
  • 终于有时间测试了。安装 pdns,为我的可公开访问区域配置重复区域,解决了 Windows Phone 的问题。两个下来,一个(Android)去:)。
【解决方案2】:

对于 Android 手机,您可以使用名为“WiFi & Mobile Data Switch”(https://play.google.com/store/apps/details?id=com.totemsoft.wifimd)的应用程序。对我来说,它解决了同时连接到互联网(通过移动数据)和本地网络(通过 WiFi,通过 WiFi 无法访问互联网)的问题。此应用程序在三星 Galaxy A8 上运行良好。我希望,我的评论对某人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    相关资源
    最近更新 更多