VPN Hotspot

备注

Linux平台VPN连接是可以通过NAT方式共享给局域网其他主机的,例如你可以使用 OpenConnect VPN 翻墙,然后局域网其他主机默认路由指向这台主机,只要在这个主机上启用NAT,则其他主机也能够流畅访问网络。

MacOS设置共享VPN给热点非常方便,请参考 How to share a VPN connection from your Mac OS :只需要把 VPN PPTP/L2TP 连接通过 Internet Sharing 功能共享给 Wi-Fi 设备,就能够创建一个AP热点:

../../_images/share_vpn_hotspot.png

由于iOS安全限制,即使手机通过蜂窝网络创建了VPN连接,但是手机的热点共享无法提供其他设备共享VPN上网。解决的方法目前还是通过Jailbreak越狱以后才能够实现。

Android设备安全限制相对灵活,只要Android手机Root过了,就可以通过VPNHotspot应用共享VPN上网。本文就是在Pixel手机上实践共享VPN的记录。

原理

VPN Hotspot 是一个开源共享VPN连接给hotspot或repeater的Android程序,不过运行需要root过的Android环境。可以从 XDA labs的vpnhotspot 下载,也可以直接从Goolge Play安装。

VPN Hotspot程序默认设置是一种通用型并且最大兼容的设置,但是这个设置可能并没有为电池寿命做优化。

备注

共享热点也称为 Tethering 技术,特别是通过USB共享Internet连接,称为 USB Tethering 。不过,macOS默认没有包含Android USB Tethering驱动,所以在Android手机上激活USB Tethering后,通过USB连接到Mac电脑上是没有任何响应的,需要安装和设置 通过USB Tethering方式共享Android的Internet连接 驱动。

Upstream

  • Upstream network interface: 在VPN Hotspot中主要的upstream是用于重路由数据流量的。如果保持空白则表示自动检测系统VPN(允许/在使用VPN时不允许绕过本程序)。如果设置为 none 就阻止绑定VPN

  • Fallback upstream: Fallack upstream是用于某些VPN将一些失效路由返到默认网卡。如果该设置空白就表示自动检测。如果设置 none 就禁止 fallback。你可以设置一个接口

  • IP Masquerade Mode: * None : 从downstream来的数据不做任何地址/端口重映射。这个选贤更可能在一些dummy VPN,如ad-blocker或者socksifiers(Shadowsocks)有用。但是如果你使用真正的VPN,如OpenVPN就不要使用这个选项。 * Simple : 从downstream来的数据包的源地址和源端口被重映射 * Android Netd Service (从Android 9开始提供) : 允许你的系统来处理masquerade。Android系统将做一些额外的事情,如FTP以及绑定流量计数器。在移动运营商网络上隐藏你的绑定操作就可能不会使用这个选项。

Downstream

  • Disable IPv6 tethering: 启用这个选项禁止系统绑定IPv6。这可以阻止IPv6泄漏,因为当前程序不能处理IPv6 VPN 绑定

  • (从Android 8.1开始)Tethering hardware acceleration: 这个功能是系统开发者模式的相同设置的快捷方式。为了让VPN绑在系统绑定上工作可能必须关闭这个选项,但是当绑定激活时候可能降低电池寿命

  • Enable DHCP workaround: 只在VPN开启时设备无法获得客户端IP地址时使用。这是一个全局设置,也就是只能全局使用一次。

Misc

  • Keep Wi-Fi alive: 当开启repeater, temporary hotspot 或 system VPN hotspot时,锁定Wi-Fi

    • 选择 System default (从Android 10开始的默认设置)可以保护电池寿命

    • 选择 On (针对Android 10)(默认)主要是在repeater/hotspot仅用了一会儿就自动关闭或停止工作时用来解决这个问题。

    • 选择 Disable power save 是为了降低数据包延迟,例如在语音连接可能需要,或许可以提高通话质量。这个设置需要硬件支持,

    • 选择 Low latency mode 是降低数据包延迟(从Android 10提供),但是可能会导致以下问题:

      • 降低电池寿命

      • 降低带宽

      • 降低Wi-Fi扫描频率 - 这可能导致设备移动或AP间切换的信号质量

  • Start repeater on boot

  • Network status monitor mode

使用VPN HotSpot

USB网络共享(USB tethering)

USB网络共享(USB tethering)就是将手机和电脑使用USB线连接,不需要启动WiFi功能(无需手机和电脑连接相同的无线网络),此时手机就相当于电脑的一个外接有线网卡。这个方式对于个人电脑使用非常方便,但是缺陷是需要电脑能够识别这种特定驱动的外接模拟网卡。对于Linux系统,操作系统内置支持 通过USB Tethering方式共享Android的Internet连接 驱动,但是对于 macOS 则需要安装 HoRNDIS(the USB tethering driver for Mac OS X) 驱动。

备注

USB网络共享可能需要Android手机开启开发者模式(USB Debug)

  • 启动VPN - 可以使用Cisco AnyConnect连接VPN,连接完成后,切换到VPN Hot Spot程序

  • 启用 Wi-Fi HotspotUSB TetheringBluetooth Tething ,也可以组合这几种Tethering设置。这是调用Android系统内建的Tethering设置。

../../_images/vpn_hotspot_1.png

这里点击 USB tethering 将转跳到系统设置 Hotspot & tethering 启动 通过USB Tethering方式共享Android的Internet连接 :

../../_images/vpn_hotspot_2.png
  • 然后返回 VPN Hotspot 程序,可以看到此时不仅显示 USB tethering 已经激活,而且多出了一个 mdis0 设置(这个设置就是共享USB上网的upstream),请激活 mdis0 接口:

../../_images/vpn_hotspot_3.png

此时你就会发现你的电脑也能够和已经连接VPN的手机一样访问公司内网或者翻墙了。

备注

Andorid系统默认不能连接隐藏的网络,需要在设置添加无线SSID时候选择 Advanced options >> Hidden network >> Yes 才能连接到Hidden(stealth) WiFi network。否则会始终提示WiFi status是 out of range (参考 Android 10: Connect To A Hidden Network )

WLAN热点(WiFi共享)

另一种更为通用的方式是使用 VPN Hotspot 的共享WLAN热点,也就是Android手机自己模拟出一个WiFi AP,同时共享VPN(tun),这样所有连接到手机共享的WiFi热点,就能共享VPN访问。这种方式无需电脑上安装任何驱动,对于电脑来说,就是换一个AP连接,然后就能够通过手机端VPN线路。

../../_images/vpn_share_wlan.png

启用WLAN共享方式VPN访问

  • 点击 WLAN热点 开启Android上共享WiFi热点,此时会类似USB网络共享一样,出现一个 wlan1 设备接口

  • 再点击 wlan1 设备启用它,此时连接到共享热点的客户端就能够通过共享VPN访问特定网络

备注

共享 WLAN热点 会自动配置一个随机密码,这个密码需要点击左上角的WiFi加密图标来进一步菜单获得

参考