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