首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >IPSec/L2TP设置

IPSec/L2TP设置
EN

Ask Ubuntu用户
提问于 2016-09-19 12:34:19
回答 1查看 845关注 0票数 0

我已经成功地设置了ipsec-tools/racoon/xl2tpd/pptpd/appropriate路由器端口转发来操作一个用于安卓手机的虚拟专用网。它在网络之外运行良好。通过连接到VPN路由器的公共IP,我可以通过多个NAT无缝地从Android通过隧道。当我在VPN的本地网络上时,我也可以通过将Android的目标IP更改为VPN的本地IP来做到这一点。我使用Wireshark验证了,在第一个场景中,数据是通过UDP端口4500使用ESP进行隧道化的。second的nat遍历被设置为强制,所以我相信第二种情况也是如此。

当Android连接到VPN的本地网络,并且是针对VPN的公共IP而不是本地IP ( phase1协商期间的连接超时)时,问题就出现了。无论电话连接到哪个网络,我都希望能够无限期地保留VPN (这个问题会干扰这个目标)。

我试图在路由器上DMZ VPN服务器,同时禁用UFW,问题仍然存在。

我在服务器端看到的问题是:

代码语言:javascript
运行
复制
racoon: ERROR: phase1 negotiation failed due to time up.

我在Android方面看到的问题是:

代码语言:javascript
运行
复制
mtpd: Timeout -> Sending SCCRQ

它重复多次,直到中止为止。

EN

回答 1

Ask Ubuntu用户

发布于 2017-07-24 14:15:18

这个答案可能对你没有帮助,因为现在太晚了,但希望它能帮助到其他人。我已经通过使用域名、本地DHCP服务器和可以覆盖公共域名的本地DNS服务器解决了您所描述的问题。

这种方法显然依赖于您有一个公共DNS地址,您可以使用它来代替IP地址,不管您去哪里。有免费的动态DNS服务将为这一目的服务。您可以在他们的web界面中设置公共IP地址。

在您的局域网中,您需要一个DNS服务器,它优先考虑它自己的域名记录。在该服务器上,您需要重新定义您的公共域名,以指向服务器的本地LAN地址。此外,您的DHCP服务器需要向android设备提供本地DNS服务器的地址,只要它为设备分配一个LAN地址--否则,即使在局域网中,您也会提取公共DNS记录并获取公共IP地址。这样做后,您可以连接到VPN使用域名,无论您在哪里。

广视

当您离开局域网时,您的android设备将查询ISP提供的公共DNS服务器,以获取VPN的IP地址。

代码语言:javascript
运行
复制
myvpn.somepublicdomainname.net -> x.x.x.x (public IP)

当您在局域网内时,android设备将查询您的本地DNS服务器。

代码语言:javascript
运行
复制
myvpn.somepublicdomainname.net -> 192.168.1.2 (private IP)

即使您的VPN为其客户端提供了额外的DNS服务器,这也是可行的。

安装DNS服务器(dnsmasq)

我所描述的设置DNS服务器的最简单方法是安装和配置dnsmasq。它是一个非常轻量级的缓存DNS服务器(顺便说一句,DHCP服务器也是)。

在终端中键入以下内容:

代码语言:javascript
运行
复制
sudo apt-get update && sudo apt-get install -y dnsmasq

/etc/dnsmasq.conf末尾插入以下行:

代码语言:javascript
运行
复制
addn-hosts=/etc/dnsmasq.hosts

插入到/etc/dnsmasq.hosts文件中,如果它不存在,则创建它:

代码语言:javascript
运行
复制
192.168.1.2   myvpn.somepublicdomainname.net.

第一部分(192.168.1.2)需要是您的虚拟专用网的本地IP地址,而最后一部分(myvpn.somepublicdomainname.net.)则需要是带有A期的公共域名。很抱歉戴了帽子,但这很重要。最后一个时间段让服务器知道它是一个顶级域。

现在重新启动dnsmasq:

代码语言:javascript
运行
复制
sudo service dnsmasq restart

此时,您应该能够查询DNS服务器的VPN IP地址,并获得本地IP地址而不是公共IP地址。通过使用dig查询DNS服务器来测试它(我假设DNS服务器的IP是192.168.1.1)。

代码语言:javascript
运行
复制
dig @192.168.1.1 myvpn.somepublicdomainname.net

这应该会给出几行文本,但您可以忽略所有以逗号;开头的文本,并将重点放在不使用逗号的文本上:

代码语言:javascript
运行
复制
myvpn.somepublicdomainname.net.    0       IN      A       192.168.1.2

如果您看到这一点,您的本地DNS服务器将提供本地IP地址以响应查询。这是个好消息。如果它实际上提供了公共IP地址,则需要对您的dnsmasq配置进行双重检查。在发生太多更改之前,请重新启动服务器。这样做的次数令人吃惊。

现在使用相同的dig命令并将myvpn.somepublicdomainname.net替换为其他公共域名(如google.com),以确保它也正确地返回了这些名称。如果它们工作,您可以安全地重新配置您的DHCP服务器,以使用您的新DNS服务器!

配置DHCP服务器

我假设您已经在局域网中设置了DHCP服务器。这是一个通常由您的WiFi路由器提供的服务。您需要将其配置为先使用新的DNS服务器,然后再使用其他DNS服务器。这个程序各不相同,所以我将把答案留给另一个问题。

可能问题

如果您的android设备手动配置为使用特定的DNS服务器(比如Google的流行的8.8.8.88.8.4.4),您将不得不切换到使用DHCP指定的DNS服务器,或者首先列出您的局域网DNS服务器,并使用8.8.8.8作为后置。手动列出您的局域网DNS服务器首先将几乎肯定会导致更慢的域名查找时,您不在您的局域网,这将对您的网页浏览产生负面影响。有一些方法可以绕过它,但我假设您只需使用DHCP指定的DNS服务器,并将这个问题的答案留给另一个问题。如果你不知道我在说什么,这可能不适用于你的情况。

票数 2
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/826934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档