Next Previous Contents

3. IP Masquerade 的设定

如果你的私用网路里有任何重要的信息,在使用 IP Masquerade 之前请三思。这可能成为你通往网际网路的闸道,反之亦然,也可能成为另一边的世界进入你私用网路的途径。

3.1 编译核心加入 IP Masquerade 的支持

如果你的 Linux 发行套件已经将下面将提到的所需特性及模块编译进去的话(大部份模块化的核心有你所需的东西),那么你不需要重新编译核心。 不过仍十分建议你读一读此节,因为它包含了其它有用的信息。

Linux 2.2.x 版核心

Linux 2.0.x Kernels

3.2 指定私用网路的 IP 位址

因为所有其它机器都没有正式指定的位址,必须有个正确的方式来分配位址给这些机器。

节自 IP Masquerade FAQ:

有份 RFC (#1597, 现在可能已过时了) 是有关没有与外界连线的网路该使用什么 IP 位址。有三个数字区块是特别为这个目的而保留的。其中一个我使用的是 192.168.1.n 到 192.168.255.n 之间的 255 Class-C 子网路。

节自 RFC 1597:

第三节: 私用位址空间

      网际网路位址指定当局(IANA: Internet Assigned Numbers Authority)
      已经保留下列三个区块的 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

      我们将称第一个区块为 "24位元区块",第二个为 "20位元区块",
      而第三个则称为 "16位元区块"。注意到第一个区块就只是个 
      class A  网路号码,第二个区块则是连续的 16 个 class B 网路
      号码,而第三个区块是一组 255  个连续的 class C 网路号码。
所以,如果你要使用一个 class C 网路的话,那么你的机器应该以 192.168.1.1, 192.168.1.2, 192.168.1.3, ..., 192.168.1.x 来名之。

192.168.1.1 通常是闸道这台机器,在此即你连上网际网路的 Linux 主机。注意 192.168.1.0 以及 192.168.1.255 分别为网路以及广播位址,是保留的。避免在你的机器上使用这些位址。

3.3 配置其它机器

除了为每台机器设定适当的 IP 位址之外,你也应该设定适当的闸道。一般说来,这是非常直接了当的。你只需简单地输入 Linux 主机的位址(通常是 192.168.1.1)作为闸道位址。

关于领域名称服务,你可以加入任何 DNS 系统。最可能的应该是你 Linux 使用的那一个。你也可以选择性地加上任何网域字尾(domain suffix) 。

在你重新配置这些 IP 位址之后,记得重新启动适当的服务或是重新开机。

下面的配置范例假设你使用一个 Class C 网路并且以 192.168.1.1 作为 Linux 主机的位址。请注意 192.168.1.0 及 192.168.1.255 是保留的。

配置 Windows 95

  1. 如果你还没有安装网路卡以及界面驱动程序,现在做。
  2. '控制台/网路' 里去。
  3. 如果你的网路配置里没有 'TCP/IP 协定' 则加进去。
  4. 'TCP/IP 内容'中,选择'IP 位址'并且把 IP 位址设定为 192.168.1.x,(1<x<255) ,并且把子网路遮罩设为 255.255.255.0
  5. '通讯闸'中加入 192.168.1.x 作为你的闸道。
  6. 'DNS 配置'/'DNS 伺服器'下加入你的 Linux 主机使用的 DNS (通常可以在 /etc/resolv.conf 里找到)。你可以选择性地加入适当的网域字尾搜寻顺序。
  7. 不要变更原先的其它设定,除非你知道自己在做什么。
  8. 在所有的对话盒中按下'确定'并且重新启动系统。
  9. 测试网路连线,Ping 你的 linux 主机: 从'开始/执行',输入 ping 192.168.1.1
    (这只是区域网路连线测试,你现在还不能 ping 外面的世界。)
  10. 你可以在 windows 目录下选择性地建立一个 HOSTS 文档,如此你可以使用区域网路里的机器名称。在 windows 目录里有个称为 HOSTS.SAM 的范例。

配置 Windos for Workgroup 3.11

  1. 如果你还没有安装网路卡以及界面驱动程序,现在做。
  2. 如果你还未安装 TCP/IP 32b 套件的话就装吧。
  3. 'Main'/'Windows Setup'/'Network Setup', 按下 'Drivers'
  4. 'Network Drivers' 里的 'Microsoft TCP/IP-32 3.11b' 反白,按下 'Setup'
  5. 设定 IP 位址于 192.168.1.x (1 < x < 255), 然后设定 Subnet Mask 为 255.255.255.0 以及 Default Gateway 为 192.168.1.1。
  6. 不要开启 'Automatic DHCP Configuration' 并在 'WINS Server' 中放入任何东西,除非你在一 Windows NT 网域中而且你知道你在做什么。
  7. 按下 'DNS', 填入在 3.3.1 小节中步骤六提到的信息,然后在你完成后按下 'OK' 钮。
  8. 按下 'Advanced', 如果你使用类似 3.3.1 小节步骤十中提到主机文档,勾选 'Enable DNS for Windows Name Resolution''Enable LMHOSTS lookup'
  9. 在所有对话盒中按 'OK' 并重新启动系统。
  10. Ping 一下你的 Linux 主机以测试网路连接: 在 'File/Run' 输入: ping 192.168.1.1
    (这只不过是区域网路的连接测试,你还不能 ping 到外面的世界)。

Configuring Windows NT

  1. 如果你还没有安装网路卡以及界面驱动程序,现在做。
  2. 'Main'/'Control Panel'/'Network'
  3. 如果你还没装 TCP/IP 服务的话从 'Add Software' 选单中加入 TCP/IP 协定及相关的部份。
  4. 'Network Software and Adapter Cards' 里将 'Installed Network Software' 选择盒中的 'TCP/IP 协定' 反白。
  5. 'TCP/IP Configuration',选择适当的界面驱动程序,例如,[1]Novell NE2000 Adapter。然后设定 IP 位址于 192.168.1.x (1 < x < 255),然后设定 Subnet Mask 为 255.255.255.0 以及 Default Gateway 为 192.168.1.1。
  6. 不要开启 'Automatic DHCP Configuration' 并在 'WINS Server' 中放入任何东西,除非你在一 Windows NT 网域中而且你知道你在做什么。
  7. 按下 'DNS', 填入在 3.3.1 小节中步骤六提到的信息,然后在你完成后按下 'OK' 钮。
  8. 按下 'Advanced', 如果你使用类似 3.3.1 小节步骤十中提到主机文档,勾选 'Enable DNS for Windows Name Resolution''Enable LMHOSTS lookup'
  9. 在所有对话盒中按 'OK' 并重新启动系统。
  10. Ping 一下你的 Linux 主机以测试网路连接: 在 'File/Run' 输入: ping 192.168.1.1
    (这只不过是区域网路的连接测试,你还不能 ping 到外面的世界)。

配置 UNIX 系列的系统

  1. 如果你还未安装你的网路卡并以适当的界面驱动程序重新编译你的核心,现在就做吧。
  2. 安装 TCP/IP 网路,像是 nettools 套件,如果你还没装的话。
  3. IPADDR 设为 192.168.1.x (1 < x < 255), 然后将 NETMASK 设为 255.255.255.0, GATEWAY 设为 192.168.1.1, 以及 BROADCAST 设为 192.168.1.255。
    例如,在 Red Hat Linux 系统上你可以编辑 /etc/sysconfig/network-scripts/ifcfg-eth0,或直接从 Control Panel 里做。
    (在 SunOS, BSDi, Slackware Linux, 等中都不相同...)
  4. 将你的名称伺服器及领域搜寻字尾加到 /etc/resolv.conf
  5. 依据你的设定你可能要更新你的 /etc/networks 文档。
  6. 重新启动适当的服务,或简单的重新开机。
  7. 发出 ping 指令: ping 192.168.1.1 以测试到你的 gateway 机器的连接性。
    (这只不过是区域网路的连接测试,你还不能 ping 到外面的世界)。

配置使用 NCSA Telnet 套件的 DOS 机器

  1. 如果你还没有安装网路卡,现在做。
  2. 载入适当的封包驱动程序。对于 NE2000 卡来说,如果你的卡设定为 IRQ 10 及硬件位址于 0x300,用 nwpd 0x60 10 0x300
  3. 建立一新目录,然后解开 NCSA Telnet 套件: pkunzip tel2308b.zip
  4. 使用文字编辑器打开 config.tel 文档。
  5. 设定 myip=192.168.1.x (1 < x < 255), 以及 netmask=255.255.255.0
  6. 在本例子中,你应该设定 hardware=packet, interrupt=10, ioaddr=60
  7. 你至少要有一单独的机器设定为 gateway,也就是 Linux 主机:
    name=default
    host=yourlinuxhostname
    hostip=192.168.1.1
    gateway=1
    
  8. 还要有另外一个指定领域名称服务:
    name=dns.domain.com ; hostip=123.123.123.123; nameserver=1
    
    注意: 用你 Linux 主机使用的 DNS 的适当信息来取代。
  9. 储存你的 config.tel 文档。
  10. Telnet 到你的 Linux 主机以测试网路连接: telnet 192.168.1.1

配置执行 MacTCP 的 MacOS 机器

  1. 如果你还没为你的乙太网路转接器安装适当的驱动程序,最好现在就作。
  2. 打开 MacTCP control panel,选择适当的网路驱动程序(Ethernet, 而非 EtherTalk) 并按下 'More...' 钮。
  3. 'Obtain Address:', 按 'Manually'
  4. 'IP Address:' 下,从弹出选单中选择 class C。忽略对话盒中的其它部份。
  5. 'Domain Name Server Information:' 中填入适当信息。
  6. 'Gateway Address:' 中,填入 192.168.1.1。
  7. 按下 'OK' 以储存设定。在 MacTCP control panel 的主视窗中,在 'IP Address:' 盒中填入你 Mac 的 IP 位址 (192.168.1.x, 1 < x < 255)。
  8. 关闭 MacTCP control panel。如果有的弹出视窗提醒你重新开机,那就做吧。
  9. 你可以 ping 一下你的 Linux 主来来测试网路连线。如果你有 MacTCP Watcher 免费程序,按下 'Ping' 钮,然后在弹出的对话盒中键入你的 Linux 主机的地址(192.168.1.1)。(这只不过是区域网路的连接测试,你还不能 ping 到外面的世界。)
  10. 你可选择性地在 System Folder 中建立一 Hosts 文档以便你可以使用你区域网路里机器的主机名称。 这个文档可能已经存在于你的 System Folder 里,而且它应该会包含一些(注解掉的)范例项目而你可以根据你的需要来修改。

配置执行 Open Transport 的 MacOS 系统

  1. 如果你还没为你的乙太网路转接器安装适当的驱动程序,最好现在就作。
  2. 打开 TCP/IP Control Panel 然后从 Edit 选单中选择 'User Mode ...'。确定使用者模式至少是 'Advanced' 然后按下 'OK' 钮。
  3. File 选单中选择 'Configurations...'。选择 'Default' 配置并按下 'Duplicate...' 钮。在 'Duplicate Configuration' 对话盒中键入 'IP Masq' (或是其它能让你知道这是个特殊配置的字眼),它可能会说像是 'Deafault copy' 什么的。然后按下 'OK' 钮,以及 'Make Active' 钮。
  4. 'Connect via:' 弹出式选单中选择 'Ethernet'
  5. 'Configure:' 弹出式选单选择适当的项目。如果你不知道应该选什么,你可能应该重新选择你的 'Default' 配置然后离开。我用的是 'Manually'
  6. 'IP Address:' 盒中输入你的 Mac 的 IP 位址 (192.168.1.x, 1 < x < 255)。
  7. 'Subnet mask:' 盒中输入 255.255.255.0。
  8. 'Router address:' 盒中输入 192.168.1.1 。
  9. 'Name server addr.:' 盒中输入你的领域名称伺服器 IP 位址。
  10. 'Implicit Search Path:' 里的 'Starting domain name' 输入你的网际网路领域名称(例如 'microsoft.com')。
  11. 接下来的步骤是选择性的。不正确的值可能导致严重的错误行为。如果你不确定,最好留下空白,不要勾选。如果需要的话,除去哪些栏位中的任何信息。就我目前所知没有办法在 TCP/IP 对话视窗中告诉系统不要使用以前选过的另一 "Hosts" 文档。如果你知道的话,我很有兴趣了解。如果你的网路需要 802.3 框架的话就勾选 '802.3'
  12. 按下 'Options...' 以确定 TCP/IP 有作用。我使用 'Load only when needed' 选项。如果你执行并结束 TCP/IP 应用程序许多次而未重新启动你的机器,你将发现不选 'Load only when needed' 会抑制/降低你机器的内存管理效率。不选此项目将使 TCP/IP 协定总是被载入便于使用。如果勾选了,TCP/IP 协定会自动在需要时载入并在不需要时释放。载入与释放的过程可能使你机器的内存变的碎裂。
  13. 你可以 ping 一下你的 Linux 主来来测试网路连线。如果你有 MacTCP Watcher 免费程序,按下 'Ping' 钮,然后在弹出的对话盒中键入你的 Linux 主机的地址(192.168.1.1)。(这只不过是区域网路的连接测试,你还不能 ping 到外面的世界。)
  14. 你可以在 System Folder 中建立一 Hosts 文档以便你可以使用你区域网路里机器的主机名称。这个文档可能已经或还未存在于你的 System Folder 里。如果有的话,它应该会包含一些(注解掉的)范例项目而你可以根据你的需要来修改。如果还没有的话,你可以从一部正在运作 MacTCP 的系统中取回,或自己建一个(它遵循 Unix 的 /etc/hosts 文档格式,在 RFC 952 中描述)。一旦你建立了这个文档,打开 TCP/IP control panel,按下 'Select Hosts File...' 钮,然后打开 Hosts 文档。
  15. 关闭对话盒或从 File 选单中选择 'Close''Quit' 然后按下 'Save' 以储存你所做的改变。
  16. 这些改变会立刻生效,但重新开机也无害。

配置使用 DNS 的 Novell 网路

  1. 如果你还没为你的乙太网路转接器安装适当的驱动程序,最好现在就作。
  2. ftp.novell.com/pub/updates/unixconn/lwp5 取回 tcpip16.exe。
  3. 编辑 c:\nwclient\startnet.bat
    
    : (here is a copy of mine)
    SET NWLANGUAGE=ENGLISH
    LH LSL.COM
    LH KTC2000.COM
    LH IPXODI.COM
    LH tcpip
    LH VLM.EXE
    F:
    
  4. 编辑 c:\nwclient\net.cfg
    
    : (将驱动程序改为你的, i.e. NE2000)
    Link Driver KTC2000
            Protocol IPX 0 ETHERNET_802.3    
            Frame ETHERNET_802.3     
            Frame Ethernet_II        
            FRAME Ethernet_802.2
    
    NetWare DOS Requester
               FIRST NETWORK DRIVE = F
               USE DEFAULTS = OFF
               VLM = CONN.VLM
               VLM = IPXNCP.VLM
               VLM = TRAN.VLM
               VLM = SECURITY.VLM
               VLM = NDS.VLM
               VLM = BIND.VLM
               VLM = NWP.VLM
               VLM = FIO.VLM
               VLM = GENERAL.VLM
               VLM = REDIR.VLM
               VLM = PRINT.VLM
               VLM = NETX.VLM
    
    Link Support
            Buffers 8 1500
            MemPool 4096
    
    Protocol TCPIP
            PATH SCRIPT     C:\NET\SCRIPT
            PATH PROFILE    C:\NET\PROFILE
            PATH LWP_CFG    C:\NET\HSTACC
            PATH TCP_CFG    C:\NET\TCP
            ip_address      xxx.xxx.xxx.xxx
            ip_router       xxx.xxx.xxx.xxx
    
  5. 最后建立
    c:\bin\resolv.cfg
    
    :
    SEARCH DNS HOSTS SEQUENTIAL
    NAMESERVER 207.103.0.2
    NAMESERVER 207.103.11.9
    
  6. 我希望这些某些使用 Novell 网路的人有帮助。还有,这对 Netware 3.1x 或 4.x 都有用。

配置 OS/2 Warp

  1. 如果你还没为你的乙太网路转接器安装适当的驱动程序,最好现在就作。
  2. 如果你还没装 TCP/IP 通讯协定的话现在就装。
  3. 开启 Programms/TCP/IP (LAN) / TCP/IP 设定
  4. 'Network' 栏位加上你的 TCP/IP 位址并设定你的 netmask (255.255.255.0)
  5. 'Routing' 栏位按下 'Add'。将 Type 栏位设定为 'default' 并在 'Router Address' 栏位中键入你的 Linux 主机的 IP 位址 (192.168.1.1)。
  6. 'Hosts' 栏位设定与你的 Linux 主机使用相同的 DNS (名称伺服器)位址。
  7. 关闭 TCP/IP 控制台。在接下来的问题中回答 yes。
  8. 重新启动你的系统
  9. 你可以 ping 你的 Linux 主机以测试网路配置。在 'OS/2 命令视窗' 上键入 'ping 192.168.1.1'。如果收到 ping 封包一切就没问题。

配置其它系统

相同的逻辑应可适用于配置其它的平台。查阅上述的小节的说明。 如果你有兴趣写关于其它的作业系统的配置, 请送详细的建立指引到 ambrose@writeme.comdranch@trinnet.net

3.4 配置 IP 转送(Forwarding)的方式

到目前为止,你应该已经安装好核心以及其它需要的套件,也载入了你的模块。同时,其它机器的 IP 位址,闸道,以及 DNS 也该全都设定完成。

现在,唯一剩下要做的事是使用 IP 防火墙工具来转送适当的封包给适当的机器:

** 这可以用许多不同的方式来达成。下列的建议与例子对我来说能用,但你可能有不同的主意,详节部份请参考 4.4 节及 ipchains(2.2.x) / ipfwadm(2.0.x) 的线上手册。 **

** 本节仅提供你建立 IP 伪装功能所需的最少规则,一些安全的考量并未包含进去。 强烈建议你花一些时间去研究适当的防火墙规则来加强安全性。 **

Linux 2.2.x 核心

Ipfwadm 已经无法在 2.2.x 版的核心中处理 IP 封包的伪装规则,请改用 ipchains。

ipchains -P forward DENY
ipchains -A forward -s yyy.yyy.yyy.yyy/x -j MASQ
其中 x 视你的子网路而定,为下列数字之一,而 yyy.yyy.yyy.yyy 则是你的网路位址。
netmask         | x  | Subnet
~~~~~~~~~~~~~~~~|~~~~|~~~~~~~~~~~~~~~
255.0.0.0       | 8  | Class A
255.255.0.0     | 16 | Class B
255.255.255.0   | 24 | Class C
255.255.255.255 | 32 | Point-to-point

你也可以使用这种格式 yyy.yyy.yyy.yyy/xxx.xxx.xxx.xxx, 其中 xxx.xxx.xxx.xxx 指定你的子网路遮罩,如 255.255.255.0。

例如,如果我是在一个 class C 子网路上,我得输入:

ipchains -P forward DENY
ipchains -A forward -s 192.168.1.0/24 -j MASQ
ipchains -P forward DENY
ipchains -A forward -s 192.168.1.0/255.255.255.0 -j MASQ

你也可以分别对每台机器设定。 例如,如果我想让 192.168.1.2 及 192.168.1.8 能够存取网际网路,但不允许其它机器使用的话,我得输入:

ipchains -P forward DENY
ipchains -A forward -s 192.168.1.2/32 -j MASQ
ipchains -A forward -s 192.168.1.8/32 -j MASQ

不要把你的预设方式(policy)定为伪装(masquerading) - 否则可以操控他们的递送路径(routing) 的人将能够直接穿过(tunnel)你的闸道,以此伪装他们的身分!

同样地,你可以把这些加入 /etc/rc.d/rc.local 文档,任何一个你比较喜欢的 rc 文档,或是在每次你需要 IP Masquerade 时手动执行之。

关于 ipchains 的详细使用方法,请参考 Linux IPCHAINS HOWTO

Linux 2.0.x 核心

ipfwadm -F -p deny
ipfwadm -F -a m -S yyy.yyy.yyy.yyy/x -D 0.0.0.0/0
ipfwadm -F -p deny
ipfwadm -F -a masquerade -S yyy.yyy.yyy.yyy/x -D 0.0.0.0/0
其中 x 视你的子网路而定,为下列数字之一,而 yyy.yyy.yyy.yyy 则是你的网路位址。
netmask         | x  | Subnet
~~~~~~~~~~~~~~~~|~~~~|~~~~~~~~~~~~~~~
255.0.0.0       | 8  | Class A
255.255.0.0     | 16 | Class B
255.255.255.0   | 24 | Class C
255.255.255.255 | 32 | Point-to-point

你也可以使用这种格式 yyy.yyy.yyy.yyy/xxx.xxx.xxx.xxx, 其中 xxx.xxx.xxx.xxx 指定你的子网路遮罩,如 255.255.255.0。

例如,如果我是在一个 class C 子网路上,我得输入:

ipfwadm -F -p deny
ipfwadm -F -a m -S 192.168.1.0/24 -D 0.0.0.0/0

因为 bootp 请求封包没有合法的 IP's ,客户端并不知道它的位址,对于在伪装/防火墙上执行 bootp 伺服器的人必须在 deny 之前执行下列指令:

ipfwadm -I -a accept -S 0/0 68 -D 0/0 67 -W bootp_clients_net_if_name -P udp

你也可以分别对每台机器设定。 例如,如果我想让 192.168.1.2 及 192.168.1.8 能够存取网际网路,但不允许其它机器使用的话,我得输入:

ipfwadm -F -p deny
ipfwadm -F -a m -S 192.168.1.2/32 -D 0.0.0.0/0
ipfwadm -F -a m -S 192.168.1.8/32 -D 0.0.0.0/0

常见的错误是像这样的第一行指令

ipfwadm -F -p masquerade
不要把你的预设方式(policy)定为伪装(masquerading) - 否则可以操控他们的递送路径(routing) 的人将能够直接穿过(tunnel)你的闸道,以此伪装他们的身分!

同样地,你可以把这些加入 /etc/rc.d/rc.local 文档,任何一个你比较喜欢的 rc 文档,或是在每次你需要 IP Masquerade 时手动执行之。

请阅读 4.4 节有关 Ipfwadm 的详细指引。

3.5 测试 IP Masquerade

在这些工作完成后,现在是试试看的时候了。确定你的 Linux 主机到网际网路的连线是通的。

你可以在其它机器上试著浏览一些'网际网路!!!' 上的网页,看是否能见到。我建议第一次尝试时使用 IP 位址而不要用主机名称,因为你的 DNS 设定有可能并不正确。

例如,你可以使用 http://152.19.254.81/mdw/linux.html 来存取 Linux 文件计划网页 http://metalab.unc.edu/mdw/linux.html

如果你看见 The Linux Documentation Project 的字样,那么恭喜! 它可以运作了! 接著你可以使用主机名称试试看,然后是 telnet, ftp, RealAudio, True Speech,以及任何 IP Masquerade 支持的东西。

到目前为止,我还不曾在上面的设定上发生过问题,而哪些花下时间让这个绝妙功能运作的人完全同意这些设定。


Next Previous Contents