我已经成功设置了ipsec-tools/racoon/xl2tpd/pptpd/appropriate
路由器端口转发,以便为 Android 手机运行 VPN。它在网络外部运行良好。我可以通过连接到 VPN 路由器的公共 IP,无缝地从 Android 通过多个 NAT 建立隧道。当我在 VPN 的本地网络上时,我也可以通过将 Android 的目标 IP 更改为 VPN 的本地 IP 来做到这一点。我已经使用 Wireshark 验证了在第一种情况下,数据使用 ESP-UDP 通过 UDP 端口 4500 进行隧道传输。racoon.conf 的 nat 遍历设置为强制,所以我相信第二种情况也是如此。
当 Android 连接到 VPN 的本地网络并针对 VPN 的公共 IP 而不是其本地 IP 时,就会出现问题(连接在第 1 阶段协商期间超时)。我希望能够无限期地保持 VPN 开启,无论手机连接到哪个网络(而这个问题会干扰该目标)。
我尝试过同时禁用路由器上的服务器,DMZ
但问题仍然存在。VPN
UFW
我在服务器端看到的问题是:
racoon: ERROR: phase1 negotiation failed due to time up.
我在Android端看到的问题是:
mtpd: Timeout -> Sending SCCRQ
它会重复多次,直到中止。
答案1
这个答案可能对您没有帮助,因为太晚了,但希望它能帮助到其他人。我已经通过使用域名、本地 DHCP 服务器和可以覆盖公共域名的本地 DNS 服务器解决了您描述的问题。
这种方法显然需要您拥有一个公共 DNS 地址,无论您去哪里都可以使用它来代替 IP 地址。有免费的动态 DNS 服务可以满足这一目的。您可以在其 Web 界面中设置公共 IP 地址。
在您的 LAN 中,您需要一个优先处理其自身域名记录的 DNS 服务器。在该服务器上,您需要重新定义您的公共域名以指向服务器的本地 LAN 地址。此外,您的 DHCP 服务器需要在为您的 Android 设备分配 LAN 地址时向其提供该本地 DNS 服务器的地址 - 否则,即使您在 LAN 中,您也会提取公共 DNS 记录并获取公共 IP 地址。完成此操作后,无论您身在何处,都可以使用域名连接到 VPN。
视野开阔
当您离开 LAN 时,您的 Android 设备将向您的 ISP 提供的公共 DNS 服务器查询您的 VPN 的 IP 地址。
myvpn.somepublicdomainname.net -> x.x.x.x (public IP)
当您在 LAN 内时,您的 Android 设备将查询您的本地 DNS 服务器。
myvpn.somepublicdomainname.net -> 192.168.1.2 (private IP)
即使您的 VPN 为其客户端提供了额外的 DNS 服务器,这也应该可以工作。
安装 DNS 服务器(dnsmasq)
按照我所描述的方式设置 DNS 服务器的最简单方法是安装和配置dnsmasq
。它是一个非常轻量级的缓存 DNS 服务器(顺便说一下,也是 DHCP 服务器)。
在终端中输入:
sudo apt-get update && sudo apt-get install -y dnsmasq
将以下行插入到 的末尾/etc/dnsmasq.conf
:
addn-hosts=/etc/dnsmasq.hosts
插入/etc/dnsmasq.hosts
文件,如果不存在则创建它:
192.168.1.2 myvpn.somepublicdomainname.net.
第一部分 ( 192.168.1.2
) 必须是您的 VPN 的本地 IP 地址,最后一部分 ( myvpn.somepublicdomainname.net.
) 必须是以句号结尾的公共域名。抱歉使用了大写字母,但这很重要。最后一个句号让服务器知道它是一个顶级域名。
现在重新启动 dnsmasq:
sudo service dnsmasq restart
此时,您应该能够向 DNS 服务器查询 VPN 的 IP 地址,并获取本地 IP 地址而不是公共 IP 地址。使用 dig 查询 DNS 服务器进行测试(我假设 DNS 服务器的 IP 是192.168.1.1
)。
dig @192.168.1.1 myvpn.somepublicdomainname.net
这样应该会给出几行文本,但你可以忽略所有以逗号开头的文本;
,而只关注不以逗号开头的文本:
myvpn.somepublicdomainname.net. 0 IN A 192.168.1.2
如果您看到此信息,则表明您的本地 DNS 服务器在响应查询时提供了本地 IP 地址。这是个好消息。如果它确实提供了公共 IP 地址,则需要仔细检查配置dnsmasq
。在进行太多更改之前,也许可以重新启动服务器。这种方法奏效的次数令人惊讶。
现在使用相同的dig
命令并替换myvpn.somepublicdomainname.net
为其他公共域名(如google.com
),以确保它也能正确返回这些域名。如果它们有效,您可以安全地重新配置您的 DHCP 服务器以使用您的新 DNS 服务器!
配置 DHCP 服务器
我假设您已经在 LAN 中设置了 DHCP 服务器。这是 WiFi 路由器通常提供的服务。您需要先将其配置为使用新的 DNS 服务器,然后再使用其他 DNS 服务器。该过程各不相同,所以我将答案留给另一个问题。
可能的问题
如果您的 Android 设备手动配置为使用特定 DNS 服务器(如 Google 的流行8.8.8.8
或8.8.4.4
),则必须切换回使用 DHCP 分配的 DNS 服务器或首先列出 LAN 的 DNS 服务器,然后将其用作8.8.8.8
后备。首先手动列出 LAN DNS 服务器几乎肯定会导致您不在 LAN 内时域名查找速度变慢,这会对您的 Web 浏览产生负面影响。有办法解决这个问题,但我假设您只使用 DHCP 分配的 DNS 服务器,并将此问题的答案留给另一个问题。如果您不知道我在说什么,它可能不适用于您的情况。