Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->系统管理 ->正文

IP伪装技术浅谈

来源:Linux-cn.com 作者:Webmaster 时间:2007-05-05 点击: [收藏] [投稿]

  这几天花了不少时间在研究这个,发现这真是相当实用而且强大,相信是所有网管人员都不可不知道的。因此,我试图将它整理成文件,让大家参考。

  「IP伪装 」其实是我自创的名词。在 Linux 中,它指的是 IP-Masq, 而在 FreeBSD 中,它指的是 NAT service,在我看来二者功能很相近,因此我就用这样的名词来统称它们。至于在其它的 UNIX 中能否找到类似的东东,我不清楚,如果有人知道的麻烦为我补充一下。关于这项技术,我算是相当后知后觉的了,早在一年多前,Linux 就已开始发展,而 FreeBSD 更是在 2.1.X 版发展的中期就有了,网络上已有相当多且不错的文件在讨论它们。如果大家觉得我这里写得不够详尽可以去各大 BBS 精华区去找资料。

  什么是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 的管理下,它会为大家做好沟通的工作。但外头的电脑则不行了。

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:RPM命令手册   下一篇:MODEM]调制解调器的安装与配置

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号