同时访问WiFi局域网(没有网关)和移动网络

12

我知道此前已经有人提过这个问题(但只有有限或没有解决方案),但我没有看到任何最近的更新,并且我认为我的情况很独特,所以我将开一个新的线程。

我有一个树莓派,它在其他事情中作为热点工作。按设计,DHCP不会分配默认网关。我的用例是一个或多个设备与派交互,作为服务器。

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

目前:

IOS: IOS完全按照我的期望工作 - 它会意识到WiFi网络没有默认网关,并通过蜂窝发送外部流量。

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

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

希望这讲得清楚。问题是:如何在2015年使所有手机都能实现此功能? :) 就我的目的而言,将Pi作为私有非路由热点比WiFi直连或蓝牙更好。请记住,我不要求手机进行路由; 我需要我的自定义应用程序能够同时连接到Pi和公共Internet。我希望所有手机在这方面都能像IOS一样工作。

我的当前情况是Pi托管网页(还有其他东西),这是我首选的,但本质上是否可以解决这个问题呢?


1
这并不是关于编程的问题... 如果你在其他地方发布可能会更成功。 - Jonas Czech
1
但程序员是最有可能有类似要求的人,因此他们最有可能知道哪些解决方法/晦涩的API/替代方案可能是有效的。 - Brett
2
True...这个和这个可能会有所帮助,尤其是当你在自己编写的应用程序中进行网络请求时。这样你就可以使用适当的API。 - Jonas Czech
更新了问题,包括这是我正在开发的总体解决方案中的一个问题,其中包括(我认为显然的)跨平台自定义移动应用程序 :)。 - Brett
Android有什么进展吗?我也在寻找几乎相同的场景,包括将Pi作为特定服务的接入点,并希望从移动连接中下载一些数据。 - Chadwick Robbert
显示剩余2条评论
2个回答

1

你说这不是一个串联或路由的情况,但如果你仔细思考,它实际上两者兼具。

它是路由的,因为手机的流量需要路由到两个接口之一。可能没有通过手机的路由,但仍然是一个路由问题。幸运的是,似乎三个平台的路由部分都在工作。

它也是一种不同寻常的串联形式。唯一的区别是流量不是来自树莓派,而是来自手机,而树莓派充当访问点而不是手机。

从串联的角度来看很重要,因为它表明Android可以同时拥有WiFi和蜂窝移动网络(至少在热点模式下,但可能也适用于客户端模式)。在这方面,我的回答不完整-我无法告诉您如何实现。

至于您提到的Windows手机问题:为了解决该问题,首先要确定知道关于Pi的完全限定域名的DNS服务器位于哪里。即使显然在私有网络中,公共DNS服务器是否知道它?

对于您观察到的情况,有两种可能的解释:

  • 没有公共DNS服务器知道这个FQDN,那么IOS可能使用类似mDNS的东西来定位树莓派。
  • 有一个公共DNS服务器知道这个FQDN,那么也许Windows Phone会检查DNS回复中的martians并拒绝它,认为它是一次攻击。

无论哪种情况,你真正需要的是两个独立的DNS基础设施。一种方法是在你的应用程序中包含一个小型DNS服务器(例如dnsmasq),并为具有Pi FQDN的区域配置一个转发器,将其转发到Pi的IP地址(显然必须硬编码)。所有其他请求应该发送到正常的DNS服务器。

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


关于Windows的情况,将DNS服务器放在树莓派上是个好主意。我已经为该私有IP建立了一个公共DNS条目,但可能是WiFi连接没有利用公共网络,而是通过手机网络可用。Hosts文件对于每个手机客户端都需要放置一个才能起到帮助作用 - 手机需要解析以使CORS功能正常运行。 - Brett
我实际上怀疑Windows可能会出于安全原因而阻止DNS响应,其中包含它认为是“无效”的IP地址。此外,在树莓派上放置DNS服务器本身并不能帮助解决问题。另外,您还必须有一种方法将DNS查询定向到Pi,而将其他所有查询定向到公共DNS服务器。因此需要在设备内部再添加另一个DNS服务器。关于主机:是的,我确实想在每个手机的主机文件中添加您的FQDN。这可能在安装您的应用程序时很容易完成,也可能不可能完成。 - Kevin Keane
终于有时间测试了。安装了pdns,为我的公共访问区域配置了重复区域,解决了Windows Phone的问题。两个完成了,还有一个(Android)需要解决:)。 - Brett

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接