2.3. 那么它是如何工作的呢?

简单来说,要创建一个 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 地址。你可以从你的网络内部路由真实号码,但这会带来各种安全问题。