返回列表 发帖

虚拟IP技术

虚拟IP的配置方法
   
   首先来谈谈什麽是「虚拟 IP」。我们都知道在 TCP/IP 的架构下,所有想上网络  
   
   的电脑,不论是用何种方式连上网络,都必须要有一个 *唯一* 的 IP-address。  
   
   举两个最常见的例子: 学校的电脑用网络线连在一起,是经由 ethernet 介面连  
   
   上网络,则该 ethernet 介面必须要有 IP-addr., 如 freebsd.phys.ntu.edu.tw  
   
   的 ethernet IP 为 140.112.52.20 。另一个常见的网络介面为 PPP, 通常是用  
   
   在 modem 拨接上,当您从家里透过 modem 拨接上远端的 modem server 时,有  
   
   些 server 会从中建立起远端与您的电脑间的 PPP 连线协定,於是,您的电脑就  
   
   会有一个 PPP 介面,而它的 IP-addr. 则由远端 server 指定给您 (这一切都是  
   
   全自动进行) ,於是您就可以透过 modem (PPP) 对外连线,就好像您的电脑直接  
   
   接在网络上一样。
  
   
   在我们系上的计算机室,目前有两部机器可以做 PPP modem server (但规定只有  
   
   老师才能使用) ,一是 freebsd.phys, 另一是 linux.phys。 freebsd.phys 用  
   
   的是一条独立电话线,可以 24 小时全天候服务;而 linux.phys 用的是机房的  
   
   电话分机,故只有下班才能用。按照上头所述,如果同时要提供两个 modem 的  
   
   PPP 拨接服务,就必须要有两个空的 IP-addr. 留下来,以便 PPP 连线建立时设  
   
   定给用户的电脑。因此,在过去计算机室就为此保留了两个 IP: 140.112.52.250  
   
   及 140.112.52.252, 让 ppp server 使用。然而,这样一来就造成了 IP 的浪  
   
   费,很明显的,当无人拨进来时这两个 IP 根本没有人使用,而且 modem server  
   
   也不是无时无刻都会有人要拨进来。这时候,所谓的「虚拟 IP 」就派上用场  
   
   了。
  
   
   简单的说,虚拟 IP 就是假的 IP, 也就是未经注册的 IP, 但 server 端有能力  
   
   将这假的 IP 变成真的 IP 送往网际网络,通行无阻,就好像有真的 IP 一样。  
   
   以下是简单的架构图:
  
  
   
   也就是说,在实做上我们必须将网络分成两块,一块就是使用虚拟 IP 的电脑群,  
   
   它们不能与使用真正已注册过的 IP 的电脑 (或 Internet) 混在一起。而二者之  
   
   间的桥梁要*一部拥有 IP-Masq 的 Linux 或 NAT 的 FreeBSD 连起来。注意到用  
   
   做「桥梁」的 server 拥有两个 (以上) 的网络介面,分别接 local net 与  
   
   internet,该 server 即称之为 "gateway" 或 "router",这些不同的网络介面可  
   
   以有不同的IP-addr.。所以,我们常说某某的电脑的 IP 是多少,其实不是百分之  
   
   百正确,如果该电脑拥有多个网络介面的话,那它不同的介面可能会有不同的  
   
   IP-addr.。眼前的例子就是 linux.phys 与 freebsd.phys, 在使用者拨接上来时  
   
   它就会自动建立起ppp0 这个介面,加上原来的 ethernet 介面就是两个。在过  
   
   去,它们的 ppp0 介面与 ethernet 介面的 IP 是设得一样的,以 freebsd.phys  
   
   来说:
  
  
   
   其中 ed0 即为 FreeBSD 的 ethernet 介面。现在要使用虚拟 IP 的技术,我们  
   
   将会设定其 ppp0 为不同 (虚拟) 的 IP。同理,一部电脑如果装两张网络卡同时  
   
   接两个网络,则它就会有两个 ethernet 介面:
  
  
   
   要注意的是,如果 server 中的各网络介面 IP 的号码如果相同,或前几码相同  
   
   (如 freebsd.phys 的例子),则****它所连接的子网络属同一个网域,否则为不  
   
   同网域。例如 freebsd.phys 的 ed0 是属於 140.112.52.0 这个网域,而拨接上  
   
   来的用户其 gateway 为 140.112.52.20 (ppp0 的 IP), 其本身的 IP 为  
   
   140.112.52.252, 则它们也都属於 140.112.52.0 这个网域。
  
   
   前面提过,使用像 140.112.52.252 这种已注册、合法的 IP 来给拨接用户使用  
   
   会造成浪费,因此,底下我们就用虚拟 IP 并透过 FreeBSD 的 NAT 来做拨接服  
   
   务。在 RCF 1597 的定义中,可以不经注册而任意使用的 IP 为:  
   
10.0.0.0  
-  
   
    10.255.255.255  
  
           172.16.0.0  
  
       -  
  
           172.31.255.255  
  
           192.168.0.0  
  
       -  
  
           192.168.255.255
  
   
   依规定,凡是这类的 IP 都不能直接出现在网际网络上,因此当我们私底下   
   
   (不直接连上网际网络) 用这些 IP 时,不必担心与别人冲到。在此,我们的虚  
   
   拟 IP 就选用 192.168.0.0 这一组,则以 FreeBSD 为例,其 PPP 与  
   
   ethernet 的架构就变为:
  
  
  
  
  
  
  
   
   也许有人会问,为什麽 FreeBSD 一定要有 NAT? 若没有不是一样可以通吗? 没  
   
   错,一样可以通,但这样一来就违反了规定, 192.168.1.X 就不再是虚拟 IP, 而  
   
   变成真实 IP, 直接连上 internet 了 (仅管 modem 的连线是很短暂的)。 NAT 所  
   
   做的工作,就是将 192.168.1.X 这类虚拟 IP ,变成真实的 IP 出去,让外界永  
   
   远不知道实际上有这些虚拟 IP 存在。举个例子,假设您是在此架构下的用户端,  
   
   您可以经由 FreeBSD (或 Linux) 自由地连往 internet, 不论是 telnet, ftp,  
   
   www ....假设您现在用 telnet 连往 bbs, 则虽然您用的是虚拟 IP, 但如果您去  
   
   看 bbs 的资讯看您是来自何方时,显示却会是真实的 IP (以上头的例子,即为  
   
   140.112.52.20)
  
   
   这就是虚拟 IP 最奇妙的地方! 在外界,您永远是以「真实 IP」出现,但人家永  
   
   远不会知道,其实您是来自 Linux/FreeBSD 底下的一部用「虚拟 IP」的电脑。因  
   
   此,我只要在 Linux/FreeBSD server 端注册一个真实 IP, 则透过此技术我可以  
   
   *合法地*在後头串接一大串使用虚拟 IP 的电脑。这麽做,其优点就如前所述,且  
   
   使用虚拟IP 的电脑等於是隐藏在 Linux/FreeBSD server 身後,受到 server 端  
   
   完全的保护。而缺点是,使用虚拟 IP 的电脑不能公开,也就是,它不能架  
   
   server (谁知道世上有这麽一台 www 或 ftp server 存在?),也不能接 mail (在  
   
   外头的电脑怎麽知道mail 要送到这里来?),当然,也不能被外头的电脑 telnet  
   
   进来。请特别注意我这「公开」与「外头」的字眼,事实上使用虚拟 IP 还是可以  
   
   架 server, 接 mail 等,但只有同在同一个虚拟 IP 网域下的机器才知道,因为  
   
   同在一部 Linux/FreeBSDserver 的管理下,它会为大家做好沟通的工作。但外头  
   
   的电脑则不行了。
  
   
   再来谈「网域」的问题。例如,利用这样的技术,我们可以将机房中 PPP 拨接  
   
   server规划如下:
  
  
  
  
  
  
   
   大家会奇怪,这样如果 client 1 与 client 2 若同时上来, IP 不是冲到了吗?  
   
   不会! 第一: client 1 与 client 2 属於不同网域,分别由 freebsd 与 linux掌  
   
   管。第二: freebsd 用 NAT, linux 用 IP-Masq 将这两个网域藏起来了,所以实  
   
   际上它们谁也瞧不见对方。假设双方连上来的人在 bbs 上碰面,则在我们看来,  
   
   如前所述, client 1 是来自 140.112.52.20 这个 IP, 而 client 2 是来自  
   
   140.112.52.122 这个 IP。
  
   
   讲了这麽多,我们已可以约略看出虚拟 IP 的应用了。前面所提的 PPP 拨接是一  
   
   个,另一个就是同一实验室里头的电脑。并非所有的电脑都需要对外公开的,尤其  
   
   是用做平行计算的电脑群。现在将十多部甚至一、两百部电脑透过网络连起来做平  
   
   行计算已成风潮,像我们系上有许多老师听说就是此道的高手。但是,如果说一个  
   
   实验室要搞平行计算而申请十多个或上百个 IP 的话,是相当浪费的 (事实上根本  
   
   不可能,因为没那麽多 IP),因此,使用虚拟 IP 技术,可以大大地节省网络资  
   
   源。
  
   
   好了,以下我简述实作的方法: 不论是用 Linux 的 IP-Masq 或 FreeBSD 的 NAT,  
   
   其设定的道理都相同,主要有以下四个步骤:
  
  
       1.设定好 server 端的网络介面。就我们的例子,一为 ethernet 介面,另一  
  
           即为供 modem 拨接上来的 PPP 介面。其设定方式算是另一个专题,这里  
不  
  
         详述。   
  
       2.设定 Kernel, 使其拥有 IP-Masq (for Linux) 或 IP-Divert (for Fr  
  
           eeBSD) 的能力。於 FreeBSD, 还要同时起动 natd server。   
  
       3.设定 IP-Firewall rule ,建立虚拟 IP 与真实 IP 之间的连线。   
  
       4.设定 client 端以使用 server 端的虚拟 IP。就我们的例子而言,如果原本
  
  
           client 端已能顺利地由 modem 拨接上线,则理论上 server 端改用虚拟  
IP  
  
           後 client 不需要改变任何设定,原因是 client 端的 IP 与 gateway
设定  
  
           是每次在 PPP 连线建立时即全自动进行 (由 server 端控制)。但如果  
  
           client 端是用 ethernet 与 server 端连线的话,则必须进行这一步的  
设  
  
         定。
  
   
   以下我就简述第 2, 3 步的实作, Linux 与 FreeBSD 分别讲,同时也讲一下使用  
   
   了虚拟 IP 之後, client 端所呈现的网域环境 (第 4 步)。
  
   
   有一点要稍作补充: 不论是 IP-Masq 或 IP-Divert & NAT, 其设计上都是基於  
   
   IP-Firewall 的。所谓 IP-Firewall 即俗称「防火墙」,是一种相当强大的网络  
   
   防护系统,它可以在网络封包的层级直接控制封包的传输,如是否让来自某 IP的  
   
   封包进入、通过、输出此 Firewall server。在很多私人网络中,其网域与外界网  
   
   路之间常常会装设一台 Firewall server, 以限定、或完全隔绝内外网络的流通,  
   
   以达到保护内部网络的目的。因此,如有外来的入侵者想入侵内部网络的话,则第  
   
   一步就是要突破 Firewall server 这一关,而这通常是很不容易办到的。文件上  
   
   说, IP-Masq *也许是* 比起 IP-Firewall 安全等级更高的防护,我猜原因可能  
   
   是内部网络的虚拟 IP 是* IP-Masq server 建立起来的,如果外来入侵者在千辛  
   
   万苦之後终於破坏了 server, 但这也等於破坏了 IP-Masq 的架构,也就等於整个  
   
  虚拟 IP 网络都不存在了 (连不通),他还是无法进而入侵内部网络的电脑。正因  
   
   为 IP-Masq 或 IP-Divert 是架构在 IP-Firewall 之上,因此我们必须要有第 3  
   
   步的「设定 IP-Firewall rule」,而且设定这一步时要特别小心,如果设错了有  
   
   可能造成 server 端网络完全不通。
  
  
   
   Linux Masq
  
   
  我们从第二步设定 Kernel, 并打开 IP-Masq 的功能开始。文件上说只要是  
   
  Kernel-2.0.x 的版本再加 patch 皆可,我这里所用的 Kernel 版本为 2.0.34, 完全
  
   
  不需 patch 即可使用,所以建议用这个版本 (或以上)的 kernel。在 make config
  
   
  时,请打开以下的选项 (节录自 IP-Masquerade MiniHOWTO):
  
  
           * Prompt for development and/or incomplete code/drivers  
  
           CONFIG_EXPERIMENTAL  
  
           - 如此您即可选取 *正在实验中的* IP-Masq 功能。
  
  
           * Enable loadable module support  
   

返回列表 回复 发帖