首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 网络编程
用Linux将局域网带入Internet-网管专栏,解决方案
作者:网友供稿 点击:0
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 

一、概述

通常我们所遇到的问题是这样的:一个使用私有ip的局域网,一台联入internet的机器,然后要你通过一定的手段将整个局域网联入internet。其实,该方案的实现手段很多,比如在windows下,你可以用诸如wingate、winroute以及ms proxy等等代理软件实现,但是本文所论述的是怎样在linux下不花一分钱就解决问题。本文将从最基本的接入方法开始,一步步的教你实现将使用私有ip的局域网带入internet的方法。

二、接入方法:

常用的接入方法有拨号上网和专线上网。通常,个人用户使用拨号上网方式,而单位用户则使用专线上网方式。并且,拨号方式可以分为pstn和isdn拨号,专线则可以分为isdn专线和ddn专线。
isdn拨号方式一般用外置ta适配器,相当于模拟modem,linux下的使用方法与外置modem一样,内置的一般叫isdn pc卡,linux下一般较难配置,单位用户也最好不买内置的,普通modem外置的也比内置的好。所以外置ta拨号上网可以归入外置modem一样,确实是一摸一样。其实isdn拨号方式就是数字式的modem,专线方式就是在路由器内部自己拨号,通过拨号联接建立起来的类ddn方式。
isdn的专线方式必须使用isdn路由器,专线方式128k电信部门一般给8个合法的ip地址,isdn路由器拨号是在路由器中进行的,另外isdn路由器一般还带4个网口,本身集成了ppp server的功能,又相当于一台拨号服务器,isdn专线方式还支持回拨功能,由局方向用户拨号,建立联接,联接建立之后就相当于ddn了,linux不涉及拨号,线路联接设置等,就是路由器提供静态ip。其实isdn拨号方式就是数字式的modem,专线方式就是在路由器内部自己拨号,通过拨号联接建立起来的类ddn方式。
ddn即数字数据网,ddn的专线方式通常是这样实现的,路由器的广域网口用v.35连接到基带medom,再由基带medom连接到ddn线路。
pstn也就是我们通常所说的公用电话网。使用电话拨号上网也是目前个人用户最常用的上网方式。但是在linux下要实现电话拨号上网并不是一件轻松的事,因为虽然在linux下的拨号工具很多,但是好多都得进行复杂的配置。在这里,我们向读者介绍一种最具智能化的拨号工具--wvdial,并用wvdial和ppp实现轻松上网。
wvdial是linux下的智能化拨号工具,利用wvdial和ppp可以实现linux下的轻松上网。在整个过程中wvdial的作用是拨号并等待提示,并根据提示输入相应的用户名和密码等认证信息;ppp的作用是与拨入方协商传输数据的方法并维持该连接。

1.wvdial及其相关配置

wvdial的功能很强大,会试探着去猜测如何拨号及登录到服务器,同时它还会对常见的错误智能的进行处理,不象chat一样,要求你去写登录脚本。wvdial只有一个配置文件 /etc/wvdial.conf。wvdial的启动过程是这样的:首先载入wvdial.conf配置文件,然后再初始化modem并拨号,拨号后等待拨入方的响应,收到拨入方响应后则启动pppd。

可以用wvdialconf程序自动生成wvdial.conf配置文件,自行该程序的格式为:
wvdialconf /etc/wvdial.conf
在执行该程序的过程中,程序会自动检测你的modem的相关配置,包括可用的设备文件名,modem的波特率,初始化字符等等相关的拨号信息,并根据这些信息自动生成wvdial.conf配置文件。如果/etc/wvdial.conf文件已经存在时,再次执行该命令只会改变其中的 modem、band、init等选项。

wvdial的执行格式为:
wvdial --help | --version | section
相关的说明如下:
--help:显示简单的帮助信息
--version:显示wvdial的版本号
section:这里的section有点象windows里的ini文件,一个wvdial.conf配置文件可以有好多个section,每一个section由一些变量组成,即由 变量=值 的语句组成,如上所示。使用wvdialconf自动生成配置文件时将会自动生成一些常用的变量说明如下:

inherits=inheritedsection:
使用wvdialconf自动生成配置文件时将会自动生成[dialer defaults],除此之外,你还 可以自定义你自己的section。程序运行时,首先载入[dialer defaults],然后再用指 定的section的相应选项覆盖[dialer defaults]的相应选项。比如,我们在 wvdial.conf中还有[dialer tom],假如我们运行wvdail tom,则系统将先读入[dialer defaults],然后再用[dialer tom]覆盖[dialer defaults]的相应选项。如果除了以上 的section之外还有[dialer 169]并且内容如下:
[dialer tom]
username=tom
password=xxx
inherits=169
[dialer 169]
phone=169
如果这时候我们执行wvdial tom则系统将先读入[dialer defaults],然后再用[dialer tom]覆盖[dialer defaults]的相应选项,最后再用[dialer 169]的相应选项来覆盖前二者的相应选项。由此可见,利用wvdial,我们可以很方便地在不同的isp或modem之间来回移动(假如你有几个isp或medom的话)。

medom=/dev/ttysx:用于指定是用的medom,缺省的为/dev/medom。当然,在这里我们的medom是由wvdialconf自动检测并配置的,所以我们可以忽略该变量。
dial prefix=x: 假如你正在使用分机,拨外线需拨9时,可设该值为9。
username=xxxx:登录时的用户名
passwd=xxxxxx:登录密码
phone=xxxxx: 所拨的号码
pppp path=:设置pppd所在的路径,缺省为/usr/sbin/pppd
new pppd= 1 or 0: pppd 2.3.0及其以上版本需要/etc/ppp/peers/wvdial文件,如果你的pppd是2.3.0以上版本请设为1.
auto reconnect=on :断线时是否自动重新连接,缺省设为是。
以上只是wvdial.conf中的常用选项,具体情参考wvdial手册。

2.pppd及其相关配置

pppd的配置选项相对要复杂得多,你可以用命令行的形式引用有关的选项,也可以把要引用的选项写到/etc/ppp/options中进行引用。
下面的示例文件包含了最常用的选项及其相关的说明:
# /etc/ppp/options
# 如果指定了"noipdefault" 选项, pppd将使用拨入方提供的ip地址
noipdefault
# 选定该选项, pppd 将接受拨入方自己的ip地址
ipcp-accept-remote
# 设置缺省网关
defaultroute
# 在传输数据包之前,让拨入方先自我认证,注意一般的isp(如169、163)都不包含该机制,故应选中noauth
noauth
# 如果连接空闲了n秒后自动断线
idle n
以上只是options中的常用选项,具体情参考pppd手册。

三、实现手段

1.原理

从原理上,我们可以将实现的手段分为两种。其一是通过ip欺骗,也就是通过网络地址转换(nat)来实现;其二是通过代理软件来实现,而通过代理的方法又可以分为传统代理方法和透明代理方法。

1.1 ip欺骗的工作原理:
ip欺骗技术已经出现好几年了,现在linux下的ip欺骗技术已经很成熟了。
可以这样说:ip欺骗技术已经支持大多数的常用协议。那么ip欺骗是怎样工作的呢,原理很简单:客户机将进行ip欺骗的linux机器设置为缺省网关,当进行ip欺骗的linux机器收到客户机的请求包时,它对其进行改写,将源地址替换为自己的合法ip地址,将源端口换成一个新的端口号,并且对该过程进行记录;当收到internet主机的响应包时,如果其端口号正是先前所指定的端口号则再对该包进行改写,将其目的ip及目的端口号替换为原来记录的客户机ip和端口号,然后再发送给客户机。

1.2 代理的工作原理:

在tcp/ip网络中,传统的通信过程是这样的:客户端向服务器请求数据,服务器响应该请求,将数据传送给客户端。在引入了代理服务器以后,这一过程变成了这样:客户端向服务器发起请求,该请求被送到代理服务器;代理服务器分析该请求,先查看自己缓存中是否有请求数据,如果有就直接传送给客户端,如果没有就代替客户端向该服务器发出请求。服务器响应以后,代理服务器将响应的数据传送给客户端,同时在自己的缓存中保留一份该数据的拷贝。这样,再有客户端请求相同的数据时,代理服务器就可以直接将数据传送给客户端,而不需要再向该服务器发起请求。

2. ip欺骗的实现

在内核版本2.2.x以上的linux中,我们可以通过ipchains来实现ip欺骗。

2.1配置系统内核

确定你的内核已经配置了支持ip欺骗的相关特性,如果没有,请你重新编译内核。一般在redhat6.x以上,系统已经缺省配置了这些特性。

2.2 装载所需模块

你可以在系统启动时装载所需模块。可以在/etc/rc.d/rc.local文件中添加下列语句来在系统启动时自动装载所需模块。
/sbin/depmod -a
/sbin/modprobe ip_masq_ftp
/sbin/modprobe ip_masq_raudio
/sbin/modprobe ip_masq_irc
/sbin/modprobe ip_masq_cuseeme
/sbin/modprobe ip_masq_vdolive
等等。

2.3 启用ip转发

在2.2.x以上的版本中,ip转发缺省是禁止的,你可以通过以下语句来启用ip转发。
echo "1" > /proc/sys/net/ipv4/ip_forwarding
如果你用的是redhat的发行版本, 你也可以将/etc/sysconfig/network文件中的
forward_ipv4=false改为forward_ipv4=true来启用ip转发。然后重新启动系统。

2.4 配置客户端

步骤一、将客户机的缺省网关设置为进行ip欺骗的机器的局域网口的ip;
步骤二、设置客户机的dns服务器为你真实的dns服务器;
步骤三、设置浏览器为直接与internet相连;

2.5 设置ipchains规则


关于ipchains的详细语法,你可以参考ipchains-howto文档。这里我们只给出具体的应用。
假设你的局域网ip为192.168.1.*,eth1为局域网口,eth0为广域网口,则你可以设置如下的ipchains规则来实现ip欺骗:

#!/usr/bin
/sbin/ipchians -a forward -s 192.168.1.0/24 -d 0/0 -i eth0 -j masq

如果你使用拨号方式并且你的关于网口为ppp0,则相应的配置为:
#!/usr/bin
/sbin/ipchians -a forward -s 192.168.1.0/24 -d 0/0 -i ppp0 -j masq

3. 传统代理的实现

3.1 安装软件

我们以目前最新的稳定版本squid-2.3.stablex为例。
rpm包的安装
1.进入/mnt/cdrom/redhat/rpms
2.执行rpm -ivh squid-2.2.stable4-8.i386.rpm。
当然,我们也可以在开始安装系统的过程中安装该软件。

3. 源代码包的安装

1.从http://www.squid-cache.org下载squid-2.3.stable2-src.tar.gz。
2.将该文件拷贝到/usr/local目录。
3.解开该文件 tar xvzf squid-2.3.stable2-src.tar.gz。
4.解开后,在/usr/local生成一个新的目录squid-2.3.stable2,为了方便用mv命令将 该目录重命名为squid mv squid-2.3.stable2 squid;
5.进入squid cd squid
6.执行./configure 可以用./confgure --prefix=/directory/you/want指定安装目录
系统缺省安装目录为/usr/local/squid。
7.执行 make all
8.执行 make install
9.安装结束后,squid的可执行文件在安装目录的bin子目录下,配置文件在etc子目录下。

3.2 配置squid

由于redhat各方面的优势(包括易用性,稳定性等等),全世界范围内使用该发行版的用户比较多,所以,我们下面的说明都是以redhat6.1环境下squid-2.2.stable4-8版本为主。从我的使用经验看来,该版本的squid要比其他版本稳定的多,以前的1.1.22版本也比较稳定,但是在功能及灵活性方面有所欠缺。
squid有一个主要的配置文件squid.conf,在redhat环境下所有squid的配置文件位于/etc/squid子目录下。

1.常用的配置选项

因为缺省的配置文件有问题,所以我们必须首先修改该配置文件的有关内容,以便让squid跑起来。
下面我们来看一看一些常用的选项:
1.http_port
说明:定义squid监听http客户连接请求的端口。缺省是3128,如果使用httpd加速模式 则为80。你可以指定多个端口,但是所有指定的端口都必须在一条命令行上。

2.cache_mem (bytes)
说明:该选项用于指定squid可以使用的内存的理想值。这部分内存被用来存储以下对象 :
in-transit objects (传入的对象)
hot objects (热对象,即用户常访问的对象)
negative-cached objects (消极存储的对象)
需要注意的是,这并没有指明squid所使用的内存一定不能超过该值,其实,该选项只 定义了squid所使用的内存的一个方面,squid还在其他方面使用内存。所以squid实际 使用的内存可能超过该值。缺省值为8mb。

3.cache_dir directory-name mbytes level-1 level2

说明:指定squid用来存储对象的交换空间的大小及其目录结构。可以用多个cache_dir命令来定义多个这样的交换空间,并且这些交换空间可以分布不同的磁盘分区。"directory "指明了该交换空间的顶级目录。如果你想用整个磁盘来作为交换空间,那么你可以将该目录作为装载点将整个磁盘mount上去。缺省值为/var/spool/squid。"mbytes"定义了可用的空间总量。需要注意的是,squid进程必须拥有对该目录的读写权力。"level-1"是可以在该顶级目录下建立的第一级子目录的数目,缺省值为16。同理,"level-2"是可以建立的第二级子目录的数目,缺省值为256。为什么要定义这么多子目录呢?这是因为如果子目录太少,则存储在一个子目录下的文件数目将大大增加,这也会导致系统寻找某一个文件的时间大大增加,从而使系统的整体性能急剧降低。所以,为了减少每个目录下的文件数量,我们必须增加所使用的目录的数量。如果仅仅使用一级子目录则顶级目录下的子目录数目太大了,所以我们使用两级子目录结构。
那么,怎么来确定你的系统所需要的子目录数目呢?我们可以用下面的公式来估算。
已知量:
ds = 可用交换空间总量(单位kb)/ 交换空间数目
os = 平均每个对象的大小= 20k
no = 平均每个二级子目录所存储的对象数目 = 256

未知量:
l1 = 一级子目录的数量
l2 = 二级子目录的数量

计算公式:
l1 x l2 = ds / os / no
注意这是个不定方程,可以有多个解。

4.acl

说明:定义访问控制列表。
定义语法为:
acl aclname acltype string1 ...
acl aclname acltype "file" ...
当使用文件时,该文件的格式为每行包含一个条目。
acltype 可以是 src dst srcdomain dstdomain url_pattern urlpath_pattern time port proto method browser user 中的一种。
分别说明如下:
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"。
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,表达示为[hh:mm-hh:mm]。
port 指定访问端口。可以指定多个端口,比如:
acl aclname port 80 70 21 ...
acl aclname port 0-1024 ... (指定一个端口范围)
proto 指定使用协议。可以指定多个协议:
acl aclname proto http ftp ...
method 指定请求方法。比如:
acl aclname method get post ...

5.http_access

说明:根据访问控制列表允许或禁止某一类用户访问。
如果某个访问没有相符合的项目,则缺省为应用最后一条项目的"非"。比如最后一条为允许,则缺省就是禁止。所以,通常应该把最后的条目设为"deny all" 或 "allow all" 来避免安全性隐患。

3.3启动、停止squid。

配置并保存好squid.conf后,可以用以下命令启动squid。
squid
或者,使用redhat的启动脚本来启动squid.
/etc/rc.d/init.d/squid start
同样地,你也可以用下列脚本停止运行squid或重启动squid.
/etc/rc.d/init.d/squid stop
/etc/rc.d/init.d/squid restart


4. 透明代理

关于透明代理的概念我们已经在第一节将过了,下面我们看一下怎么样在squid中实现透明代理。
透明代理的实现需要在linux 2.0.29以上,但是linux 2.0.30并不支持该功能,好在我们现在使用的通常是2.2.x以上的版本,所以不必担心这个问题。下面我们就用ipchains+squid来实现透明代理。在开始之前需要说明的是,目前我们只能实现支持http的透明代理,但是也不必太担心,因为我们之所以使用代理,目的是利用squid的缓存来提高web的访问速度,至于提供内部非法ip地址的访问及提高网络安全性,我们可以用ipchains来解决。
实现环境:redhat6.x+squid2.2.x+ipchains

4.1 linux的相关配置

确定你的内核已经配置了支持透明代理解的相关特性,如果没有,请你重新编译内核。一般在redhat6.x以上,系统已经缺省配置了这些特性。

4.2squid的相关配置选项

设置squid.conf中的相关选项,如下所示:
http_port 3218
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
说明:
1.http_port 3128
在本例中,我们假设squid的http监听端口为3128,即squid缺省设置值。然后,把所有来自于客户端web请求的包(即目标端口为80)重定向到3128端口。
2.httpd_accel_host virtual
httpd_accel_port 80
这两个选项本来是用来定义squid加速模式的。在这里我们用virtual来指定为虚拟主机模式。80端口为要加速的请求端口。采用这种模式时,squid就取消了缓存及icp功能,假如你需要这些功能,这必须设置httpd_accel_with_proxy选项。
3.httpd_accel_with_proxy on
该选项在透明代理模式下是必须设置成on的。在该模式下,squid既是web请求的加速器,又是缓存代理服务器。
4.httpd_accel_uses_host_header on
在透明代理模式下,如果你想让你代理服务器的缓存功能正确工作的话,你必须将该选项设为on。设为on时,squid会把存储的对象加上主机名而不是ip地址作为索引。这一点在你想建立代理服务器阵列时显得尤为重要。

4.3 ipchains的相关配置
ipchains在这里所起的作用是端口重定向。我们可以使用下列语句实现将目标端口为80端口的tcp包重定向到3128端口。

#接收所有的回送包
/sbin/ipchains -a input -j accept -i lo
#将目标端口为80端口的tcp包重定向到3128端口
/sbin/ipchains -a input -p tcp -d 0.0.0.0/0 80 -j redirect 80

当然在这以前,我们必须用下面的语句打开包转发功能。
echo 1 > /proc/sys/net/ipv4/ip_forward


文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·使用windows脚本入侵WINDOWS服务器-网管专栏,网络技术
·清除网页历史记录-ASP教程,ASP应用
·在java中利用动态编译实现eval-JSP教程,Java技巧及代码
·如何制作Asp.Net界面模板-.NET教程,Asp.Net开发
·C#实现的18位身份证格式验证算法-.NET教程,数据库应用
·如何用PHP发电子邮件(1)-PHP教程,邮件处理
·Java 中的 XML:Java 文档模型的用法-JSP教程,Java与XML
·如何更新父窗体-.NET教程,Asp.Net开发
·用Windows 2003实现软RAID-网管专栏,操作系统
·使用Magic Winmail Server轻松架设邮件服务器(五)-网管专栏,邮件服务
最新文章
·photoshop让花卉照片更加清晰嫩绿_photoshop教程
·论c#变得越来越臃肿是不可避免的_c#应用
·杜少军:行走在网络世界的奇才_站长访谈
·教你用photoshop外插滤镜做卷页效果_photoshop教程
·通过dreamweaver设计网页时组织css的建议_dreamweaver教程
·草根网站比门户网站更有前途_站长心得
·如何针对google进行网站优化_google推广
·google推“我的搜索历史”测试版 提高个性化搜索竞争力_google推广
·八大要领 做网站就这么简单2_站长心得
·关闭widnows vista偷偷共享的文件_windows vista
相关主题
  • 用linux作邮件服务器_qmail
  • 用Linux+IPChains代替Windows+WinGate-网管专栏,防火墙和路由
  • 用Linux防火墙构建软路由-网管专栏,防火墙和路由
  • 用Linux防火墙伪装抵住黑客攻击-网管专栏,安全与管理
  • 用linux建立自己的mp3广播站-网管专栏,解决方案
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭