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