NAT(Network Address Translation)即网络地址转换,将局域网内的私有IP地址转换成Internet上公有的IP地址,反之亦然。
代理服务是指:由一台拥有公有IP地址的主机,代替若干台没有公有IP地址的主机,和Internet上的其他主机打交道,提供代理服务的这台机器称为代理服务器。
7.4.1 NAT概述
1.源NAT和目的NAT
(1)SNAT(Source NAT,SNAT):修改一个数据包的源地址,改变连接的来源地,SNAT会在包发出之前的最后时刻进行修改。
(2)DNAT(Destination NAT,DNAT):修改一个数据包的目的地址,改变连接的目的地,DNAT会在包进入之后立刻进行修改。
2.filter、nat和mangle
在Linux系统中,NAT是由Netfilter/iptables系统实现的。Netfilter/iptables内核空间中有3个默认的表:filter、nat和mangle。filter表用于包过滤,mangle表用于对数据包做进一步的修改,nat表用于IP NAT。 Netfilter/iptables由两个组件组成:netfilter和iptables。
(1)natfilter:称为内核空间,是内核的一部分,由一些表组成,每个表由若干链组成,每条链中有若干条规则。
(2)iptables:称为用户空间,是一种工具,用于插入、修改和删除包过滤表中的规则。
nat中的链有:PREROUTING、OUTPUT和POSTROUTING。
可使用的动作有:SNAT、DNAT、REDIRECT和MASQUERADE.
要做SNAT的信息包的规则被添加到POSTROUTING链中。
要做DNAT的信息包的规则被添加到PREROUTING链中。
直接从本地出站的信息包的规则被添加到OUTPUT链中。
数据包穿过nat表的过程如图7-46所示.
图7-46 数据包穿过nat表的示意图
3.认识内网客户机访问外网服务器的过程局域网内的客户机使用NAT访问Internet的示意图如图7-47所示。
图7-47 访问Internet的示意图内网客户机访问外网服务器的过程如下:
(1)PC1将访问WWW服务器的请求包发给NAT。
(2)NAT对请求包进行SNAT,即修改源IP地址和源端口号。
(3)NAT将修改后的请求包发给WWW服务器。
(4)WWW服务器将响应包发给NAT。
(5)NAT对响应包进行DNAT,即修改目的IP地址和目的端口号。
(6)NAT将修改后的响应包发给PC1。
7.4.2 NAT的设置
实例7-3 使用NAT带动局域网上网
1.服务器端的设置第1步:执行#touch /etc/rc.d/snat命令,生成空的脚本文件。
第2步:执行#chmod +x /etc/rc.d/snat命令,使该文件可执行。
第3步:编辑snat文件,如图7-48所示。
第4步:保存该文件,执行#./snat。如果想使该脚本在系统启动时自动执行,需要执行#echo,/etc/rc.d/snat” >> /etc/rc.d/rc.local命令。
第5步:执行#less /etc/resolv.conf命令,查看拨号连接时获得的DNS的IP地址,如图7-49所示。DNS的IP地址将在设置客户端时使用。
2.Windows客户端的设置在桌面右键单击【网上邻居】,在右键菜单选择【属性】,在弹出窗口中双击【本地连接】,在弹出窗口中单击【属性】按钮,在弹出窗口中双击【Internet协议(TCP/IP)】,将会显示图7-50,客户端的设置如图7-50所示。设置好网络环境后(读者可以根据实际情况进行相应调整),就可以访问Internet上的服务了。
7.4.3 代理服务器Squid的设置对于Web用户来说,Squid是一个高性能的代理缓存服务器,可以加快内部网浏览Internet的速度,提高客户机的访问命中率。当一个用户要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid连接所申请网站并请求该主页,接着把该主页传给用户,同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。
7.4.4 局域网使用Squid共享上网
实例7-4 局域网使用Squid共享上网
1.配置Squid代理服务器
第1步:修改/etc/squid/squid.conf 主配置文件,如图7-51所示。
下面对Squid配置文件中的几个基本配置选项和语句进行说明:
(1)http_port
定义Squid监听HTTP客户连接请求的端口。缺省是3128。可以指定多个端口,但是所有指定的端口都必须在一条命令中。
(2)cache_mem (bytes)
该选项用于指定Squid可以使用内存的理想值。
(3)cache_dir Type Directory-Name Mbytes Level-1 Level-2
指定Squid用来存储对象的交换空间的大小及其目录结构。可以用多个cache_dir命令来定义多个这样的交换空间,并且这些交换空间可以分布在不同的磁盘分区。
Type是指Linux使用的缓冲系统类型。
Directory-Name指明了该交换空间的顶级目录。
Mbytes定义了可用的空间总量。
Level-1是可以在该顶级目录下建立的第一级子目录的数目,缺省值为16。同理,Level-2是可以建立的第二级子目录的数目,缺省值为256。
(4)acl,定义访问控制列表定义语法为:
acl aclname acltype string1,.,
acl aclname acltype "file",.,
acltype的说明见表7-6。
表7-6 访问控制列表类型及其说明
acltype
说明
src
指明源地址,格式为:acl aclname src ip-address/netmask,..(客户IP地址)
或acl aclname src addr1-addr2/netmask,..(地址范围)
dst
指明目标地址,格式为:acl aclname dst ip-address/netmask,..(即客户请求的服务器的IP地址)
srcdomain
指明客户所属的域。格式为:acl aclname srcdomain foo.com,.,squid将根据客户IP地址反向查询DNS
dstdomain
指明请求服务器所属的域,格式为:acl aclname dstdomain foo.com,.,由客户请求的URL决定。注意:如果用户使用服务器IP地址而非完整的域名时,Squid将进行反向的DNS解析来确定其完整域名,如果失败就记录为“none”
method
指定请求方法。比如:acl aclname method GET POST,..
port
指定访问端口。可以指定多个端口,比如:
acl aclname port 80 8080 8000,.,
acl aclname port 0-2048,..(指定一个端口范围)
proto
指定使用协议。可以指定多个协议,
acl aclname proto HTTP FTP,..
time
指明访问时间格式为:acl aclname time [day-abbrevs] [h1:m1-h2:m2][hh:mm-hh:mm]
day-abbrevs为:S(Sunday)、M(Monday)、T(Tuesday)、W(Wednesday)、H(Thursday)、F(Friday)、A(Saturday)
h1:m1 必须小于 h2:m2
url_regex
使用正则表达式匹配特定一类URL,格式为:acl aclname url_regex [-i] pattern
(5)http_access
根据访问控制列表允许或禁止某一类用户访问。
如果某个访问没有相符合的项目,则缺省为使用最后一条项目的“非”。比如最后一条为允许,则缺省就是禁止。所以,通常应该把最后的条目设为“deny all”或“allow all”来避免安全性隐患。
第2步:启动squid服务器,并且清除防火墙的过滤规则,如图7-52所示。
2.设置Squid客户机设置好Squid服务器后,就该设置Squid客户机了。
(1)在Linux操作系统上设置Squid客户机首先打开Firefox浏览器,单击主菜单后面的按钮即可。然后依次选择【编辑】/【首选项】,打开【首选项】窗口,单击【高级】按钮,选择【网络】选项卡,单击【设置】按钮,打开【连接设置】窗口,如图7-53所示,在其中选择【手工配置代理】单选按钮,然后在【HTTP代理】和【端口】文本框中输入Squid服务器的IP地址和端口号。
(2)在Windows操作系统上设置Squid客户机首先打开IE浏览器,然后依次选择【工具】/【Internet选项】,打开【Internet选项】窗口,然后选择【连接】选项卡,在其中单击【局域网设置】按钮,打开【局域网设置】窗口,如图7-54所示,在其中选择【为LAN使用代理服务器】复选框,然后在【HTTP代理】和【端口】文本框中输入Squid服务器的IP地址和端口号。
代理服务是指:由一台拥有公有IP地址的主机,代替若干台没有公有IP地址的主机,和Internet上的其他主机打交道,提供代理服务的这台机器称为代理服务器。
7.4.1 NAT概述
1.源NAT和目的NAT
(1)SNAT(Source NAT,SNAT):修改一个数据包的源地址,改变连接的来源地,SNAT会在包发出之前的最后时刻进行修改。
(2)DNAT(Destination NAT,DNAT):修改一个数据包的目的地址,改变连接的目的地,DNAT会在包进入之后立刻进行修改。
2.filter、nat和mangle
在Linux系统中,NAT是由Netfilter/iptables系统实现的。Netfilter/iptables内核空间中有3个默认的表:filter、nat和mangle。filter表用于包过滤,mangle表用于对数据包做进一步的修改,nat表用于IP NAT。 Netfilter/iptables由两个组件组成:netfilter和iptables。
(1)natfilter:称为内核空间,是内核的一部分,由一些表组成,每个表由若干链组成,每条链中有若干条规则。
(2)iptables:称为用户空间,是一种工具,用于插入、修改和删除包过滤表中的规则。
nat中的链有:PREROUTING、OUTPUT和POSTROUTING。
可使用的动作有:SNAT、DNAT、REDIRECT和MASQUERADE.
要做SNAT的信息包的规则被添加到POSTROUTING链中。
要做DNAT的信息包的规则被添加到PREROUTING链中。
直接从本地出站的信息包的规则被添加到OUTPUT链中。
数据包穿过nat表的过程如图7-46所示.
图7-46 数据包穿过nat表的示意图
3.认识内网客户机访问外网服务器的过程局域网内的客户机使用NAT访问Internet的示意图如图7-47所示。
图7-47 访问Internet的示意图内网客户机访问外网服务器的过程如下:
(1)PC1将访问WWW服务器的请求包发给NAT。
(2)NAT对请求包进行SNAT,即修改源IP地址和源端口号。
(3)NAT将修改后的请求包发给WWW服务器。
(4)WWW服务器将响应包发给NAT。
(5)NAT对响应包进行DNAT,即修改目的IP地址和目的端口号。
(6)NAT将修改后的响应包发给PC1。
7.4.2 NAT的设置
实例7-3 使用NAT带动局域网上网
1.服务器端的设置第1步:执行#touch /etc/rc.d/snat命令,生成空的脚本文件。
第2步:执行#chmod +x /etc/rc.d/snat命令,使该文件可执行。
第3步:编辑snat文件,如图7-48所示。
第4步:保存该文件,执行#./snat。如果想使该脚本在系统启动时自动执行,需要执行#echo,/etc/rc.d/snat” >> /etc/rc.d/rc.local命令。
第5步:执行#less /etc/resolv.conf命令,查看拨号连接时获得的DNS的IP地址,如图7-49所示。DNS的IP地址将在设置客户端时使用。
2.Windows客户端的设置在桌面右键单击【网上邻居】,在右键菜单选择【属性】,在弹出窗口中双击【本地连接】,在弹出窗口中单击【属性】按钮,在弹出窗口中双击【Internet协议(TCP/IP)】,将会显示图7-50,客户端的设置如图7-50所示。设置好网络环境后(读者可以根据实际情况进行相应调整),就可以访问Internet上的服务了。
7.4.3 代理服务器Squid的设置对于Web用户来说,Squid是一个高性能的代理缓存服务器,可以加快内部网浏览Internet的速度,提高客户机的访问命中率。当一个用户要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid连接所申请网站并请求该主页,接着把该主页传给用户,同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。
7.4.4 局域网使用Squid共享上网
实例7-4 局域网使用Squid共享上网
1.配置Squid代理服务器
第1步:修改/etc/squid/squid.conf 主配置文件,如图7-51所示。
下面对Squid配置文件中的几个基本配置选项和语句进行说明:
(1)http_port
定义Squid监听HTTP客户连接请求的端口。缺省是3128。可以指定多个端口,但是所有指定的端口都必须在一条命令中。
(2)cache_mem (bytes)
该选项用于指定Squid可以使用内存的理想值。
(3)cache_dir Type Directory-Name Mbytes Level-1 Level-2
指定Squid用来存储对象的交换空间的大小及其目录结构。可以用多个cache_dir命令来定义多个这样的交换空间,并且这些交换空间可以分布在不同的磁盘分区。
Type是指Linux使用的缓冲系统类型。
Directory-Name指明了该交换空间的顶级目录。
Mbytes定义了可用的空间总量。
Level-1是可以在该顶级目录下建立的第一级子目录的数目,缺省值为16。同理,Level-2是可以建立的第二级子目录的数目,缺省值为256。
(4)acl,定义访问控制列表定义语法为:
acl aclname acltype string1,.,
acl aclname acltype "file",.,
acltype的说明见表7-6。
表7-6 访问控制列表类型及其说明
acltype
说明
src
指明源地址,格式为:acl aclname src ip-address/netmask,..(客户IP地址)
或acl aclname src addr1-addr2/netmask,..(地址范围)
dst
指明目标地址,格式为:acl aclname dst ip-address/netmask,..(即客户请求的服务器的IP地址)
srcdomain
指明客户所属的域。格式为:acl aclname srcdomain foo.com,.,squid将根据客户IP地址反向查询DNS
dstdomain
指明请求服务器所属的域,格式为:acl aclname dstdomain foo.com,.,由客户请求的URL决定。注意:如果用户使用服务器IP地址而非完整的域名时,Squid将进行反向的DNS解析来确定其完整域名,如果失败就记录为“none”
method
指定请求方法。比如:acl aclname method GET POST,..
port
指定访问端口。可以指定多个端口,比如:
acl aclname port 80 8080 8000,.,
acl aclname port 0-2048,..(指定一个端口范围)
proto
指定使用协议。可以指定多个协议,
acl aclname proto HTTP FTP,..
time
指明访问时间格式为:acl aclname time [day-abbrevs] [h1:m1-h2:m2][hh:mm-hh:mm]
day-abbrevs为:S(Sunday)、M(Monday)、T(Tuesday)、W(Wednesday)、H(Thursday)、F(Friday)、A(Saturday)
h1:m1 必须小于 h2:m2
url_regex
使用正则表达式匹配特定一类URL,格式为:acl aclname url_regex [-i] pattern
(5)http_access
根据访问控制列表允许或禁止某一类用户访问。
如果某个访问没有相符合的项目,则缺省为使用最后一条项目的“非”。比如最后一条为允许,则缺省就是禁止。所以,通常应该把最后的条目设为“deny all”或“allow all”来避免安全性隐患。
第2步:启动squid服务器,并且清除防火墙的过滤规则,如图7-52所示。
2.设置Squid客户机设置好Squid服务器后,就该设置Squid客户机了。
(1)在Linux操作系统上设置Squid客户机首先打开Firefox浏览器,单击主菜单后面的按钮即可。然后依次选择【编辑】/【首选项】,打开【首选项】窗口,单击【高级】按钮,选择【网络】选项卡,单击【设置】按钮,打开【连接设置】窗口,如图7-53所示,在其中选择【手工配置代理】单选按钮,然后在【HTTP代理】和【端口】文本框中输入Squid服务器的IP地址和端口号。
(2)在Windows操作系统上设置Squid客户机首先打开IE浏览器,然后依次选择【工具】/【Internet选项】,打开【Internet选项】窗口,然后选择【连接】选项卡,在其中单击【局域网设置】按钮,打开【局域网设置】窗口,如图7-54所示,在其中选择【为LAN使用代理服务器】复选框,然后在【HTTP代理】和【端口】文本框中输入Squid服务器的IP地址和端口号。