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