简单来说,要创建一个 VPN,你需要在两个网络之间创建一个安全隧道,并通过它路由 IP。如果你已经感到困惑,你应该阅读 Linux 网络概览 HOWTO 以了解更多关于 Linux 网络的信息。
这里有一些图表来说明这个概念
\ \ -------- / / -------- Remote ______| Client |______\ Internet \_____| Server |______ Private Network | Router | / / | Router | Network -------- \ \ -------- / / Client Router ---------------------------------------------------- | /-> 10.0.0.0/255.0.0.0 \ | Remote | |--> 172.16.0.0/255.240.0.0 |--> Tunnel >---\ | Network >---|--|--> 192.168.0.0/255.255.0.0 / |--|----> Internet 192.168.12.0 | | | | | \-----> 0.0.0.0/0.0.0.0 --> IP Masquerade >--/ | ---------------------------------------------------- Server Router ---------------------------------------------------- | /-> 10.0.0.0/255.0.0.0 \ | | /--> Tunnel >--|--> 172.16.0.0/255.240.0.0 |--|----> Private Internet >--|--| \--> 192.168.0.0/255.255.0.0 / | Network | | | 172.16.0.0/12 | \-----> 0.0.0.0/0.0.0.0 -----> /dev/null | 192.168.0.0/16 ---------------------------------------------------- |
上面的图表显示了网络可能如何设置。如果你不知道什么是 IP 伪装,你可能应该阅读 Linux 网络概览 HOWTO,并在你理解它的工作原理后再回来。
客户端路由器是一个 Linux 盒子,充当远程网络的网关/防火墙。远程网络使用本地 IP 地址 192.168.12.0。为了图表简洁,我省略了路由器上的本地路由信息。基本思想是通过隧道路由所有私有网络(10.0.0.0、172.16.0.0 和 192.168.0.0)的流量。这里显示的设置是单向的。也就是说,虽然远程网络可以看到私有网络,但私有网络不一定能看到远程网络。为了使这种情况发生,你必须指定路由是双向的。
从图中你还应该注意到,所有来自客户端路由器的流量看起来都来自客户端路由器,也就是说,都来自一个 IP 地址。你可以从你的网络内部路由真实号码,但这会带来各种安全问题。