如果你的私用网路里有任何重要的资讯,在使用 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 支援的东西。
到目前为止,我还不曾在上面的设定上发生过问题,而那些花下时间让这个绝妙功能运作的人完全同意这些设定。