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

IP伪装技术浅谈

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

  再来谈「网域」的问题。例如,利用这样的技术,我们可以将机房中 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,其设定的道理都相同,主要有以下四个步骤:

  设定好 server 端的网络接口。就我们的例子,一为 ethernet 接口,另一即为供 modem 拨接上来的 PPP 接口。其设定方式算是另一个专题,这里不详述。

  设定 Kernel, 使其拥有 IP-Masq (for Linux) 或 IP-Divert (for FreeBSD) 的能力。于 FreeBSD, 还要同时起动 natd server。

  设定 IP-Firewall rule ,建立IP伪装 与真实 IP 之间的连线。

  设定 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 的做法

  我们从第二步设定 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
CONFIG_MODULES
- 如此您可使用 kernel 的模组功能。
* Networking support
CONFIG_NET
* Network firewalls
CONFIG_FIREWALL
* TCP/IP networking
CONFIG_INET
* IP: forwarding/gatewaying
CONFIG_IP_FORWARD
* IP: firewalling
CONFIG_IP_FIREWALL
* IP: masquerading (EXPERIMENTAL)
CONFIG_IP_MASQUERADE
- 虽然它被归类为 experimental, 但您一定要选它。
* IP: ipautofw masquerade support (EXPERIMENTAL)
CONFIG_IP_MASQUERADE_IPAUTOFW
- 建议您选这个。
* IP: ICMP masquerading
CONFIG_IP_MASQUERADE_ICMP
- 支持 ICMP 的封包,主要用于从IP伪装 ping 外头的世界,可选可不选。
* IP: always defragment
CONFIG_IP_ALWAYS_DEFRAG
- 强烈建议您选这个。
* Dummy net driver support
CONFIG_DUMMY
- 建议您选这个。 

  Compile 完 kernel 与 module 之后,重新启动电脑,请将 IP-Masq 所需的 module载入。例如,我希望IP伪装 可以对外用 ftp 传档,则我就必须载入 ftp 的 module:


 modprobe ip_masq_ftp 

  如此,使用虚拟网络的机器就拥有 telnet, ftp, www, ping .... 等这几项基本能力了。除此之外, kernel 还提供其它的 module 以支持如 IRC, Raudio 等网络功能,可以选择性地载入。这些可以写在开机启动档中在系统开机时一并完成。接下来是第 3 步,设定 IP-Firewall rule。在 Linux 是用 ipfwadm 这指令,这指令的用法相当多样,详细用法请见 man ipfwadm, 在这里只简述简单用法。 ipfwadm 在设定封包流通的规则主要有三个:


ipfwadm -I ....  (设定流入 server 的封包)
ipfwadm -O ....  (设定流出 server 的封包)
ipfwadm -F ....  (设定由某网域经由本 server 流向另一网域的封包) 


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



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

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章