如果你的私用網路裡有任何重要的資訊,在使用 IP Masquerade 之前請三思。這可能成為你通往網際網路的閘道,反之亦然,也可能成為另一邊的世界進入你私用網路的途徑。
如果你的 Linux 發行套件已經將下面將提到的所需特性及模組編譯進去的話(大部份模組化的核心有你所需的東西),那麼你不需要重新編譯核心。 不過仍十分建議你讀一讀此節,因為它包含了其它有用的資訊。
tar xvzf linux-2.2.x.tar.gz -C /usr/src
將核心原始碼解開至 /usr/src/
,
其中 x 是 2.2 之後的修補層級(確定有一叫 linux
的目錄或符號連結)。
下列選項要回答 YES:
* Prompt for development and/or incomplete code/drivers
CONFIG_EXPERIMENTAL
- 這將讓你能選擇把實驗性的 IP Masquerade 程式碼編譯到核心裡去
* Enable loadable module support
CONFIG_MODULES
- 讓你能夠載入 ipmasq 相關模組如 ip_masq_ftp.o
* 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
CONFIG_IP_MASQUERADE
* IP: ipportfw masq support
CONFIG_IP_MASQUERADE_IPPORTFW
- 建議加入
* IP: ipautofw masquerade support
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: ip fwmark masq-forwarding support
CONFIG_IP_MASQUERADE_MFW
- 可選用
注意: 這只不過是你跑 IP Masquerade 所需的項目,其它的按照你所需的來選擇。
make modules; make modules_install
/etc/rc.d/rc.local
檔案
(或其它你認為適當的檔案)中以便於每次重開機時自動載入位於
/lib/modules/2.2.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 轉送功能在 2.2.x 版核心中預設是關閉的,請確定你以此指令將其打開:
echo "1" > /proc/sys/net/ipv4/ip_forwarding
對於 Red Hat 的使用者來說,你可以把 /etc/sysconfig/network
中的
FORWARD_IPV4=false
改成 FORWARD_IPV4=true
。
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; make 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 轉送功能在 2.0.34 之後的核心中預設是關閉的,請確定你以此指令將其打開:
echo "1" > /proc/sys/net/ipv4/ip_forwarding
對於 Red Hat 的使用者來說,你可以把 /etc/sysconfig/network
中的
FORWARD_IPV4=false
改成 FORWARD_IPV4=true
。
因為所有其它機器都沒有正式指定的位址,必須有個正確的方式來分配位址給這些機器。
節自 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 952 中描述)。一旦你建立了這個檔案,打開 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 及 dranch@trinnet.net。
到目前為止,你應該已經安裝好核心以及其它需要的套件,也載入了你的模組。同時,其它機器的 IP 位址,閘道,以及 DNS 也該全都設定完成。
現在,唯一剩下要做的事是使用 IP 防火牆工具來轉送適當的封包給適當的機器:
** 這可以用許多不同的方式來達成。下列的建議與例子對我來說能用,但你可能有不同的主意,詳節部份請參考 4.4 節及 ipchains(2.2.x) / ipfwadm(2.0.x) 的線上手冊。 **
** 本節僅提供你建立 IP 偽裝功能所需的最少規則,一些安全的考量並未包含進去。 強烈建議你花一些時間去研究適當的防火牆規則來加強安全性。 **
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
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 的詳細指引。
在這些工作完成後,現在是試試看的時候了。確定你的 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 支援的東西。
到目前為止,我還不曾在上面的設定上發生過問題,而那些花下時間讓這個絕妙功能運作的人完全同意這些設定。