这份文件描述如何在一台 Linux 主机上起动 IP Masquerade 功能
,允许没有注册网际网路 IP 位址的连线电脑经由你的 Linux 机器
连接网际网路。
1. 简介
1.1. 简介
这份文件描述如何在一台 Linux 主机上起动 IP Masquerade 功能
,允许没有注册网际网路 IP 位址的连线电脑经由你的 Linux 机器
连接网际网路。你的机器可能是以乙太网路连接 Linux, 也可能是其
它种类,像是拨接的点对点(ppp) 连线。这份文件将会强调乙太网路
连线的情况,因为这应该是最常见的案例。
这份文件倾向给使用 2.0.x 核心的使用者参考,不包含发展中
的 2.1.x 核心。
1.2. 前言,回馈&参考资讯
首先,我想让你知道我不是对 IP masquerade 了解非常透彻或很有
经验的人。
我发现新手在较新的核心上,像是 2.x 核心,设定 IP Masguerade
时非常困惑。虽然有份常见问答集(FAQ) 与邮递列表(mailing list)
,然而没有一份这方面的专门文件;而且在邮递列表上有些对於这样
一份说明文件(HOWTO) 的请求。所以,我决定撰写它给所有新手作为
一个起点,并且希望能抛砖引玉,作为那些非常了解它的使用者建立
文件的基础。如果你认为我做的不好,不要在意告诉我,这样我能把
它做得更好。
这份文件很多是以原先 Ken Eves 的常见问答集以及 ip_masq 邮递
列表里许多有帮助的讯息作为基础。特别感谢 Mr. Matthew Driver
在邮递列表中的讯息引发我设立 ip_masq 的灵感以及最後撰写了这
份文件。
如果我的任何资讯有误或遗漏任何资讯,请别介意把任何回馈或意见
寄到 achau@wwonline.com 来。你的无价回馈将影响未来的这份说明
文件!
这份说明文件是想作为让你的 IP Masquerade 能在最短时间内运作
的快速指引。最新的消息以及资讯可以在我所维护的 IP Masquerade
Resource 网页上找到。如果你有任何关於 IP Masquerade 的技术
问题,请加入 IP Masquerade 邮递列表而别寄电子邮件给我,因为
我的时间有限,而且 IP_ Masq 的发展者们更有能力回答你的问题。
这份文件最新的版本可以在 IP Masquerade Resource 上找到,里面
也有 HTML 以及 postscript 的版本。
。 http://www.wwonline.com/~achau/ipmasq/
。 http://www.hwy401.com/achau/ipmasq/
。 http://www.leg.uct.ac.za/mirrors/ipmasq/
。 http://130.89.230.132/linux/ipmasq/
1.3. 版权&宣告
这份文件版权属於 Ambrose Au, 而且是免费的文件。你可以在 GNU
的通用公开授权方式下散播它。
这份文件中的资讯跟其它内容都已经尽了我最大的努力。无论如何,
ip_masq 是实验性的,而且我也可能会犯些错误;所以你应该自己决
定是不是要照著这份文件中的资讯做。
没有人会为使用这份文件中的资讯所造成的电脑损坏或其它损失负责
。i.e.
作者不对依照这份文件内容动作所造成的损害负责。
This document is copyright(c) 1996 Ambrose Au, and it's a free
document. You can redistribute it under the terms of the GNU General
Public License.
The information and other contents in this document are to the best of
my knowledge. However, ip_masq is experimental, and there is chance
that I make mistakes as well; so you should determine if you want to
follow the information in this document.
Nobody is responsible for any damage on your computers and any other
losses by using the information on this document. i.e.
THE AUTHOR IS NOT RESPONSIBLE FOR ANY DAMAGES INCURRED DUE
TO ACTIONS TAKEN BASED ON THE INFORMATION IN THIS DOCUMENT.
2. 背景知识
2.1. 什麽是 IP Masquerade?
IP Masquerade 是 Linux 发展中的一种网路功能。如果一台 Linux
主机使用 IP Masquerade 功能连线到网际网路上,那麽接上它的电
脑(不论是在同一个区域网路上或藉由数据机连线)也可以接触网际
网路,即使它们没有获得正式指定的 IP 位址。
这使得一些电脑可以隐藏在闸道(gateway) 系统後面存取网际网路而
不被发现,看起来就像只有这个系统在使用网际网路。突破设定良好
的伪装(masquerade)系统之安全防护应该会比突破良好的封包过滤式
防火墙(packet filter firewall)来得更加困难(假设两者之中都没
有错误)。
2.2. 现况
IP Masquerade 仍然在实验阶段。无论如何,核心从 1.3.x 开始已
经内建这项支援。许多个人甚至公司正在使用它,而有满意的结果。
浏览网页以及远端签入(telnet)已经有回报表示可以在 ip_masq 上
运作。档案传输(FTP), 网路交谈(IRC) 以及聆听 Real Audio 现在
可以载入某些模组配合。其它的网路资料流音讯 (streaming audio)
像是 True Speech 以及 Internet Wave 也能运作。一些邮递列表
中的使用夥伴甚至还尝试过视讯会议软体。 Ping 现在配合新近可以
取得的网际网路控制讯息协定(ICMP)修补档也能运作。更完整的支援
软体列表请参考 4.3 节。
IP Masquerade 在数种不同的作业系统及平台上与'客户端机器'配
合良好。成功的案例有使用 Unix , Windows95 , Windows NT ,
Windows for Workgroup (with TCP/IP package) , OS/2, Macintosh
System's OS with Mac TCP, Mac Open Transport, DOS with NCSA
Telnet package, VAX, Alpha with Linux, 甚至 Amiga with AmiTCP
or AS225-stack 的系统。
2.3. 谁可以从 IP Masquerade 中获益?
。如果你有台连接网际网路的 Linux 主几,而且
。如果你有一些执行 TCP/IP 连接到 Linux 机器的电脑在区域网路
上,以及/或是
。如果你的 Linux 主机有一个以上的数据机并且作为 PPP 或 SLIP
伺服器连接其它电脑,它们
。这些”其它”机器没有正式指定的 IP 位址。(这些机器从这里开
始以後就称为”其它”机器)
。而且当然,如果你希望这些”其它”机器不必花额外的费用就能连
上网际网路:)
2.4. 谁不需要 IP Masquerade?
。如果你的机器是单独一台(stand-alone) 连接网际网路的 Linux
主机,那麽执行 ip_masq 没什麽意义,或者
。如果你的”其它”机器拥有正式指定的 IP 位址,那麽你就不需要
IP Masquerade ,
。而且当然,如果你不喜欢免费使用(free ride) 这个主意的话。
2.5. IP Masquerade 是如何运作的?
节自 Ken eves 的 IP Masquerade FAQ:
这是大部分简单的设定草图:
SLIP/PPP +------------+ +-------------+
to provider | Linux | SLIP/PPP | Anybox |
<---------- modem1| |modem2 ----------- modem | |
111.222.333.444 | | 192.168.1.100 | |
+------------+ +-------------+
上面的草图中一台安装并执行 ip_masquerading 的 Linux
机器使用 modem1 经由 SLIP/or/PPP 连接网际网路。它有一个
指定的 IP 位址 111.222.333.444。它设定 modem2 允许拨接者
签入并起始 SLIP/or/PPP 连结。
第二个系统(不必是执行 Linux 的系统)拨接进入 Linux
机器并起始 SLIP/or/PPP 连结。它在网际网路上并没有指定的
IP 位址所以它使用 192.168.1.100。(参阅下述)
配合 ip_masquerade 及适当递送配置(routing configured)
Anybox 这台机器可以跟网际网路交流就如同它真的连在上面般
(除了少数例外)。
节录 Pauline Middelink:
别忘记提到 ANYBOX 应该把 Linux 机器当作它的闸道(无论是
预设递送路径或只是个子网路都没关系)。如果 ANYBOX 不能够
这样设, Linux 机器应该为所有要递送的位址做代理位址解析
析协定(proxy arp) 服务,但代理位址解析的设定超过这份文件
的□围。
下面节录自 comp.os.linux.networking 的一篇布告并且稍加编辑以
符合上述□例的用词:
。我告诉 ANYBOX 这台机器跑 slip 的 linux 机器是它的闸道。
。当一个封包从 ANYBOX 进入 linux 机器时,它会指定新的来源埠
号(source port number),把它自己的 ip 位址塞入封包的标头并
储存原来的。然後它将会藉由 SLIP/or/PPP 界面把修改过的封包
送上网际网路。
。当一个封包从网际网路来到 linux 机器时,如果埠号是上面指定
的其中一个,它将会取出原来的埠号以及 ip 位址,把它们放回封
包的标头,并且把封包送往 ANYBOX 。
。送出封包的主机将永远不知道其中的差别。
一个 IP Masquerading 的例子:
下面的图示是典型的例子:
+----------+
| | Ethernet
| abox |::::::
| |2 :192.168.1.x
+----------+ :
: +----------+ PPP
+----------+ : 1| Linux | link
| | ::::| masq-gate|:::::::::// Internet
| bbox |:::::: | |
| |3 : +----------+
+----------+ :
:
+----------+ :
| | :
| cbox |::::::
| |4
+----------+
<-Internal Network->
在这个例子中我们考虑 4 台电脑系统(想必遥远的右方还有些东西
让你到网际网路的 IP 连线能够连接,以及一些(远超过这一页)在
网际网路上你有兴趣交换资讯的东西)。这个 Linux 系统伪装闸道
是 abox, bbox, cbox 内部网路机器连接网际网路的伪装闸道。内部
网路使用指定的私用(private) 网路位址,在这个案例中是 class C
网路 192.168.1.0, linux 机器拥有位址 192.168.1.1 而'其它'
系统也拥有此网路上的位址。
这三台机器 abox, bbox 以及 cbox (它们可以执行任何作业系统-
像是 Windows95, Macintosh MacTCP 或甚至是另一台 linux 机器
,只要它们能了解 IP )可以连线到网际网路上的其它机器去,然而
这个伪装系统闸道转换它们所有的连线所以这些连线看起来像是原本
即从伪装闸道本身发出的,而且还安排伪装连线传回的资料转回原先
的系统-所以在内部网路上的系统看到的是直接通往网际网路的递送
路径而且不知道他们的资料被伪装过。
2.6. 在 Linux 2.x 上使用 IP Masquerade 的需求
。核心 2.0.x 的原始程式码可以从这里取得
ftp://ftp.funet.fi/pub/Linux/kernel/src/v2.0/
(是的,你将得配合加入一些支援来编译你的核心....
建议最新的稳定版本)
。可载入核心模组,最好是 2.0.0 或更新的版本,可以从这里取得
http://www.pi.se/blox/modules/modules-2.0.0.tar.gz
(至少需要 modules-1.3.57 )
。设定良好的 TCP/IP 网路
涵盖於 Linux NET-2 HOWTO
及网路
管理者指引(Network Administrator's Guide)
。你的 Linux 主机的网际网路连线
涵盖於 Linux ISP Hookup HOWTO
,
Linux PPP HOWTO
以及 Linux PPP-over-ISDN mini-HOWTO
。Ipfwadm 2.3 或更新的版本可以从这里取得
ftp://ftp.xos.nl/pub/linux/ipfwadm/ipfwadm-2.3.tar.gz
在 Linux Ipfwadm 网页上有更多关於版本的资讯
。你可以选择性地应用一些 IP Masquerade 修补档打开其它功能。
从这里可以取的更多资讯, IP Masquerade Resources
(这些修补档适用於
所有的 2.0.x 核心)
3. IP Masquerade 的设定
如果你的私用网路里有任何重要的资讯,在使用 IP Masquerade
之前请三思。这可能成为你通往网际网路的闸道,反之亦然,也
可能成为另一边的世界进入你私用网路的途径。
3.1. 编译核心加入 IP Masquerade 的支援
。首先,你需要核心的原始程式码(最好是稳定的2.0.0 版或以上
的核心)
。如果这是你第一次编译核心,不要害怕。事实上,这非常容易而且
涵盖於 Linux Kernel HOWTO
。使用指令: tar zxvf linux-2.0.x.tar.gz -C /usr/src 把核心的
原始程式码解至 /usr/src/ , 其中 x 是 2.0 之後的修补层级
(确定有个称为 linux 的目录或符号链结)
。加上适当的修补。因为新的修补档不断出来,所以细节不会包含在
这里。最新的资讯请参考 IP Masquerade Resources
。有关编译核心更进一步的介绍请参考 Kernel HOWTO 以及核心原始
程式码目录里的 README 档案
。这里是你要编译进去的选项:
下列选项要回答 YES
* Prompt for development and/or incomplete code/drivers
CONFIG_EXPERIMENTAL
- 这将让你能选择把实验性的 ip_masq 程式码编译到核心里去
* Enable loadable module support
CONFIG_MODULES
- 让你能够载入模组
* 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
- 这虽然是实验性的,但却是*必须*的
* IP: always defragment
CONFIG_IP_ALWAYS_DEFRAG
- 高度建议
* Dummy net driver support
CONFIG_DUMMY
- 建议使用
注意: 这些只是 ip_masq 所需要的,你还需选择其它任何你的设定
需要的选项。
。编译核心之後,你应该编译并安装模组:
make modules; make modules_install
。然後你应该在 /etc/rc.d/rc.local (或任何你认为合适的档案)
里加上几行以便每次启动时自动载入 /lib/modules/2.0.x/ipv4/
里所需的模组:
.
.
.
/sbin/