设置 PPP-SSH VPN 有许多优势。它相对简单,使用常见的现成工具,并且可能不需要重启即可建立连接。以下是更全面的列表
您可能不需要打补丁或重新编译内核、运行 LILO、重启或执行任何其他危险的管理活动。大多数发行版都包含 PPP 和 SSH,并且大多数内核都预配置为正确使用它们。
您应该不必编辑任何现有的配置文件。您只需自定义本文档后面提供的脚本文件,其中包含所有 VPN 配置信息,然后在客户端计算机上执行它。任何现有的 PPP 或 SSH 配置都应该继续正常工作。
如果 SSH 协议当前可以穿透您的防火墙,那么 PPP over SSH 也可以穿透您的防火墙。(如果您没有使用 SSH,那为什么不呢?它几乎是当今系统管理员的必备工具。)
pppd 会自动为您设置路由。而且,如果您有非常复杂的路由需求,将自定义路由命令放入脚本文件非常容易。
PPP-SSH VPN 在动态 IP 地址方面没有任何问题。当然,客户端必须能够找到要连接的服务器,但是动态 DNS 可以很好地解决这个问题。通过拨号连接设置 VPN 也没有问题。
轻松地在单台计算机上设置多个隧道。您只需确保每个隧道网络接口的 IP 地址是不同的。
这种类型的 VPN 并非没有一些困难。基本上,它在无人值守的情况下运行得不太好。如果您正在寻找可以设置后就不用管的生产质量 VPN,您可能会发现 PPP-SSH 有点令人失望。一些替代方案在 第 2.4 节 中进行了描述。
如果 SSH TCP 连接因任何原因中断,您的 VPN 将会彻底崩溃,并带走所有隧道化的 TCP 连接。如果您的链路不太可靠 - 比如说一次下载几十兆字节以上的文件很困难 - 您将需要经常重启 VPN。
TCP 协议由分层在 IP 数据包之上的流组成。当您然后通过 TCP 流运行 IP 数据包(正如我们尝试做的那样)时,两者之间的性格冲突可能会变得非常明显。主要表现为奇怪的延迟、丢包和振荡。有时您会在负载时看到问题,有时在几乎没有流量时也会看到问题。除非改变整个 OSI 模型(哈哈),否则对此无能为力。
由于某些原因,当网络负载变高时,一个隧道化的 TCP 连接往往会获得所有带宽,而其他连接则被忽略。这会导致超时和连接断开。理论上,这是可以修复的。
Keepalive 是发送的小数据包,用于告知另一端的机器连接仍然处于活动状态。如果网络负载过高,Keepalive 会被延迟。另一台机器会错误地认为连接已断开,并断开其链路端。
然而,如果没有 Keepalive,两台机器都无法判断链路是否已断开。当一台机器尝试重新建立链路时,如果另一台机器认为它已经建立了链路,则可能会造成混乱。最常见的情况是出现多个 ppp 网络设备、重复的路由以及看起来已建立但会丢弃每个数据包的隧道。大量使用 "killall -9 pppd" 通常可以使事情恢复正常。更智能的启动脚本可能会改善这种情况。
当我通过 56K 调制解调器使用常规 PPP,并且 Postfix 打开 10 多个连接来传递我的传出邮件时,一切都运行良好。但是,当我尝试通过在更快的 DSL 链路上隧道化的 VPN 运行完全相同的流量时,它会停顿。Ping 时间在一段时间内飙升(2 分钟以上),流量一会儿涓涓细流,然后完全停止。让数据包再次移动的唯一方法是重启隧道。我不确定这是错误还是固有的限制。减少 Postfix 为传出邮件维护的连接数为我解决了这个问题。
通过我的 57.6 调制解调器连接的 Ping 时间通常在 130-170 毫秒范围内。但是,通过同一调制解调器连接运行的 PPP-SSH VPN 的 Ping 时间在 300-330 毫秒范围内。如果您传输可压缩数据,打开 PPP 压缩可以有很大帮助。电子邮件是可压缩的,Vorbis 文件则不是。
http://kubarb.phsx.ukans.edu/~tbird/vpn/FAQ.html 上的 VPN 常见问题解答是一个非常好的资源。它内容全面,保持适时更新,并且敢于表达观点。
如果您的内核尚未内置 PPP 和 IP 转发功能,Linux 内核 HOWTO 将告诉您如何重新编译内核以添加它。它还将告诉您如何加载和卸载 PPP 内核模块。
告诉您如果您的发行版没有自动为您安装 PPP 守护程序,如何安装和设置它。还有一个关于使用 PPP 连接两个网络的精彩章节。这与我们正在做的非常相似,只是我们还对其进行了加密。您可以在 http://www.linuxdoc.org/HOWTO/PPP-HOWTO/index.html 找到它。
我希望有 SSH HOWTO!目前,您的发行版附带的文档应该是一个好的开始。您也可以查看 OpenSSH 网站。
如果您不太熟悉网络,您会想要仔细阅读 Linux 网络管理员指南。它是对我们将在此处使用的大多数概念的极好介绍。您可能还会发现 Linux 网络 HOWTO 是一个有用的介绍,尤其是其中关于 TCP/IP、PPP 和隧道的章节。
现在世界上有很多 VPN 技术。如果 PPP-SSH 不符合您的所有需求,您可能需要查看以下软件包之一。
ipsec 描述了一组低级协议,ESP 和 AH,用于在数据包级别执行身份验证和加密。它还使用更高级别的协议 IKE 来协商连接参数和交换加密密钥。
FreeS/WAN 可能是当今最好的 Linux ipsec 实现。虽然设置起来可能非常困难,特别是对于那些不太熟悉网络的人来说,但一旦它开始工作,就非常稳定。您可以在 FreeS/WAN 主页 了解更多信息。
另一个好的免费 ipsec 实现是 Cerberus。不幸的是,美国国家标准与技术研究院目前仅向位于美国或加拿大的美国或加拿大公民分发 Cerberus。因此,根据您的身份,获取 Cerberus 的难度从适中到几乎不可能不等。
PPTP(点对点隧道协议)是微软开发的 VPN 协议,在 RFC2637 中进行了描述。它是一种非常常见且易于理解的技术,在所有常用计算机平台上都有许多成熟的实现。然而,PPTP 通常被认为具有 相对较弱的安全性。
可能最好的 Linux PPTP 实现是 PoPToP,可以在 http://poptop.lineo.com/ 找到。
CIPE 是 Olaf Titz 的协议,用于通过 UDP 数据包封装 IP 流量。它既有 Linux 版本,也有 Windows 版本。我还没有使用过它,但它正在大力开发中,看起来很有前景。有关更多信息,CIPE-MASQ 迷你教程 是一份简洁但内容丰富的读物。