Linux IP Masquerade mini HOWTO 中译版(1)
这份文件描述如何在一台 Linux 主机上起动 IP Masquerade 功能,允许没有注册网际网路 IP 位址的连线电脑经由你的 Linux 机器连接网际网路.
1. 简介
1.1 简介
1.2 前言,回馈 & 参考资讯
1.3 版权 & 宣告
2. 背景知识
2.1 什麽是 IP Masquerade?
2.2 现况
2.3 谁可以从 IP Masquerade 中获益?
2.4 谁不需要 IP Masquerade?
2.5 IP Masquerade 是如何运作的?
2.6 在 Linux 2.x 上使用 IP Masquerade 的需求
3. IP Masquerade 的设定
3.1 编译核心加入 IP Masquerade 的支援
3.2 指定私用网路的 IP 位址
3.3 配置其它机器
3.4 配置 IP 转送(Forwarding)的方式
3.5 测试 IP Masquerade
4. 其它 IP Masquerade 的问题及软体支援
4.1 IP Masquerade 的问题
4.2 进入系统的服务(incoming services)
4.3 已支援的客户端软体以及其它设定方面的注意事项
4.4 IP Firewall Administration (ipfwadm)
4.5 IP Masquerade 以及需求式拨接(Demand-Dial-Up)
4.6 IPautofw 封包转送程式
5. 其它
5.1 求助
5.2 感谢
5.3 参考资料
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 Masquerade 上运作.档案传输(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 Systems OS with Mac TCP, Mac Open Transport, DOS with NCSA Telnet package, VAX, Alpha with Linux, 甚至 Amiga with AmiTCP 或 AS225-stack 的系统.
2.3 谁可以从 IP Masquerade 中获益?
如果你有台连接网际网路的 Linux 主机,而且
如果你有一些执行 TCP/IP 连接到 Linux 机器的电脑在区域网路上,以及/或是
如果你的 Linux 主机有一个以上的数据机并且作为 PPP 或 SLIP 伺服器连接其它电脑,它们
这些其它机器没有正式指定的 IP 位址.(这些机器从这里开始以後就称为其它机器)
而且当然,如果你希望这些其它机器不必花额外的费用就能连上网际网路 :)
2.4 谁不需要 IP Masquerade?
如果你的机器是单独一台(stand-alone) 连接网际网路的 Linux 主机,那麽执行 IP Masquerade 没什麽意义,或者
如果你的其它机器拥有正式指定的 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->
在这个例子中我们考虑四台电脑系统(想必遥远的右方还有些东西让你到网际网路的 IP 连线能够连接,以及一些(远超过这一页)在网际网路上你有兴趣交换资讯的东西).这个 Linux 系统 masq-gate 是 abox, bbox, cbox 内部网路机器连接网际网路的伪装闸道.内部网路使用指定的私用(private) 网路位址,在这个案例中是 class C 网路 192.168.1.0, Linux 机器拥有位址 192.168.1.1 而其它系统也拥有此网路上的位址.
这三台机器 abox, bbox 以及 cbox (它们可以执行任何作业系统 - 像是 Windows 95, Macintosh MacTCP 或甚至是另一台 Linux 机器,只要它们能了解 IP)可以连线到网际网路上的其它机器去,然而这个伪装系统闸道 masq-gate 转换它们所有的连线所以这些连线看起来像是原本即从伪装闸道 masq-gate 本身发出的,而且还安排伪装连线传回的资料转回原先的系统 - 所以在内部网路上的系统看到的是直接通往网际网路的递送路径而且不知道他们的资料被伪装过.
2.6 在 Linux 2.x 上使用 IP Masquerade 的需求
** 请参考 IP Masquerade Resource 以获得最新资讯,因为经常更新这份 HOWTO 是满困难的. **
核心 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 Administrators Guide) Network Administrators 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 网页上有更多关於版本的资讯 Linux Ipfwadm page
你可以选择性地加上一些 IP Masquerade 修补档以增加其它功能.从这里可以取的更多资讯, IP Masquerade Resources (这些修补档适用於所有的 2.0.x 核心)
3. IP Masquerade 的设定
如果你的私用网路里有任何重要的资讯,在使用 IP Masquerade 之前请三思.这可能成为你通往网际网路的闸道,反之亦然,也可能成为另一边的世界进入你私用网路的途径.
3.1 编译核心加入 IP Masquerade 的支援
** 请参考 IP Masquerade Resource 以获得最新资讯,因为经常更新这份 HOWTO 是满困难的. **
首先,你需要核心的原始程式码(最好是稳定的 2.0.0 版或以上的核心)
如果这是你第一次编译核心,不要害怕.事实上,这非常容易而且涵盖於 Linux Kernel HOWTO
使用指令: tar xvzf 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 Masquerade 程式码编译到核心里去
* 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: ipautofw masquerade support (EXPERIMENTAL)
CONFIG_IP_MASQUERADE_IPAUTOFW
- 建议使用
* IP: ICMP masquerading
CONFIG_IP_MASQUERADE_ICMP
- 支援 ICMP 封包伪装,可选用
* IP: always defragment
CONFIG_IP_ALWAYS_DEFRAG
- 高度建议使用
* Dummy net driver support
CONFIG_DUMMY
- 建议使用
注意: 这些只是 IP Masquerade 所需要的,你还需选择其它任何你的设定需要的选项.
编译核心之後,你应该编译并安装模组:
make modules modules_install
然後你应该在 /etc/rc.d/rc.local (或任何你认为合适的档案)里加上几行以便每次启动时自动载入 /lib/modules/2.0.x/ipv4/ 里所需的模组:
.
.
.
/sbin/depmod -a
/sbin/modprobe ip_masq_ftp
/sbin/modprobe ip_masq_raudio
/sbin/modprobe ip_masq_irc
(以及其它像是 ip_masq_cuseeme, ip_masq_vdolive 等模组,如果你有加上适当的修补)
.
.
.
注意: 你也可以在使用 ip_masq 之前手动地载入它,但是不要使用 kerneld 来载入,这是不行的!