如果你的私用網路裡有任何重要的資訊,在使用 IP Masquerade 之前請三思.這可能成為你通往網際網路的閘道,反之亦然,也可能成為另一邊的世界進入你私用網路的途徑.
** 請參考 IP Masquerade Resource 以獲得最新資訊,因為經常更新這份 HOWTO 是滿困難的. **
tar xvzf linux-2.0.x.tar.gz -C /usr/src
把核心的原始程式碼解至 /usr/src/
,其中 x 是 2.0 之後的修補層級linux
的目錄或符號鏈結)
下列選項要回答 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 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 分別為網路以及廣播位址,是保留的.避免在你的機器上使用這些位址.
除了為每台機器設定適當的 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 是保留的.
Ping
你的 linux 主機: 從'開始/執行',輸入 ping 192.168.1.1ping
外面的世界.)
HOSTS
檔案,如此你可以使用區域網路裡的機器名稱.在 windows 目錄裡有個稱為 HOSTS.SAM
的範例.
Ping
一下你的 Linux 主機以測試網路連接: 在 'File/Run' 輸入: ping 192.168.1.1
ping
到外面的世界).
[1]Novell NE2000 Adapter
.然後設定 IP 位址於 192.168.1.x (1 < x < 255),然後設定 Subnet Mask 為 255.255.255.0 以及 Default Gateway 為 192.168.1.1.
Ping
一下你的 Linux 主機以測試網路連接: 在 'File/Run' 輸入: ping 192.168.1.1
ping
到外面的世界).
/etc/sysconfig/network-scripts/ifcfg-eth0
,或直接從 Control Panel 裡做./etc/resolv.conf
.
/etc/networks
檔案.
ping
指令: ping 192.168.1.1
以測試到你的 gateway 機器的連接性.ping
到外面的世界).
nwpd 0x60 10 0x300
.
pkunzip tel2308b.zip
config.tel
檔案.
myip=192.168.1.x
(1 < x < 255), 以及 netmask=255.255.255.0
.
hardware=packet, interrupt=10, ioaddr=60
.
name=default
host=yourlinuxhostname
hostip=192.168.1.1
gateway=1
name=dns.domain.com ; hostip=123.123.123.123; nameserver=1
注意: 用你 Linux 主機使用的 DNS 的適當資訊來取代.
config.tel
檔案.
telnet 192.168.1.1
ping
一下你的 Linux 主來來測試網路連線.如果你有 MacTCP Watcher 免費程式,按下 'Ping' 鈕,然後在彈出的對話盒中鍵入你的 Linux 主機的地址(192.168.1.1).(這只不過是區域網路的連接測試,你還不能 ping
到外面的世界.)
Hosts
檔案以便你可以使用你區域網路裡機器的主機名稱.這個檔案可能已經存在於你的 System Folder 裡,而且它應該會包含一些(註解掉的)範例項目而你可以根據你的需要來修改.
ping
一下你的 Linux 主來來測試網路連線.如果你有 MacTCP Watcher 免費程式,按下 'Ping' 鈕,然後在彈出的對話盒中鍵入你的 Linux 主機的地址(192.168.1.1).(這只不過是區域網路的連接測試,你還不能 ping
到外面的世界.)
Hosts
檔案以便你可以使用你區域網路裡機器的主機名稱.這個檔案可能已經或還未存在於你的 System Folder 裡.如果有的話,它應該會包含一些(註解掉的)範例項目而你可以根據你的需要來修改.如果還沒有的話,你可以從一部正在運作 MacTCP 的系統中取回,或自己建一個(它遵循 Unix 的 /etc/hosts
檔案格式,在 RFC 1035 的第 33 頁中描述).一旦你建立了這個檔案,打開 TCP/IP control panel,按下 'Select Hosts File...' 鈕,然後打開 Hosts
檔案.
編輯 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:
編輯 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
c:\bin\resolv.cfg:
SEARCH DNS HOSTS SEQUENTIAL NAMESERVER 207.103.0.2 NAMESERVER 207.103.11.9
'ping 192.168.1.1'
. 如果收到 ping 封包一切就沒問題.
它們應該按照相同的理論來建立.查閱上述的小節.如果你有興趣寫關於其它的作業系統的配置,請送詳細的建立指示到 ambrose@writeme.com.
到目前為止,你應該已經安裝好核心以及其它需要的套件,也載入了你的模組.同時,其它機器的 IP 位址,閘道,以及 DNS 也該全都設定完成.
現在,唯一剩下要做的事是使用 ipfwadm 轉送適當的封包給適當的機器:
** 這可以用許多不同的方式來達成.下列的建議與例子對我來說能用,但你可能有不同的主意,詳節部份請參考 4.4 節及 ipfwadm 的線上手冊. **
ipfwadm -F -p deny
ipfwadm -F -a m -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
例如,如果我是在一個 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
另外,你可以輸入網路遮罩以取代該值,例如 192.168.1.0/255.255.255.0
常見的錯誤是像這樣的第一行指令
ipfwadm -F -p masquerade不要把你的預設方式(policy)定為偽裝(masquerading) - 否則可以操控他們的遞送路徑(routing) 的人將能夠直接穿過(tunnel)你的閘道,以此偽裝他們的身分!
再一次,你可以把這些加入 /etc/rc.local
檔案,任何一個你比較喜歡的 rc 檔案,或是在每次你需要 IP Masquerade 時手動執行之.
請閱讀 4.4 節有關 Ipfwadm 的詳細指引.
在這些工作完成後,現在是試試看的時候了.確定你的 Linux 主機到網際網路的連線是通的.
你可以在其它機器上試著瀏覽一些'網際網路!!!' 上的網頁,看是否能見到.我建議第一次嘗試時使用 IP 位址而不要用主機名稱,因為你的 DNS 設定有可能並不正確.
例如,你可以使用 http://152.2.254.81/mdw/linux.html 來存取 Linux 文件計畫網頁 http://sunsite.unc.edu/mdw/linux.html.
如果你看見那漂亮的帆船(譯注: LDP 網頁好像沒有帆船? :P),那麼恭喜! 它可以運作了! 接著你可以使用主機名稱試試看,然後是 telnet, ftp, RealAudio, True Speech,以及任何 IP Masquerade 支援的東西.
到目前為止,我還不曾在上面的設定上發生過問題,而那些花下時間讓這個絕妙功能運作的人完全同意這些設定.