随笔-211  评论-26  文章-8  trackbacks-0

系统准备:一个运转正常的Linux(这个大家都有)
硬件要求:至少一块网卡,宽带设备已经申请完毕,同时已经开通

广州电信的ADS(LAN)L使用的是PPPOE拨号方式,因此,要在Linux下使用ADSL,必须安装PPPOE客户端软件。
下面说明如何进行安装:  
     本人以RedHat Linux 7.3为平台,其它平台Linux的安装办法可以参照下面安装的步骤。 
     一、安装的前提条件  
     1.确保安装了网卡并工作正常
     使用命令
     #ifconfig eth0
     查看网卡状态
     2.在系统中不要设置默认路由(网关),让ADSL拨号后自动获得  
     如果已经设置了默认路由,使用以下方法删除:  
     在文件 /etc/sysconfig/network 中删除 GATEWAY= 这一行,然后以root执行:  
     #/etc/rc.d/init.d/network restart  
     3.已经安装了pppd软件包  
     如果存在文件 /usr/sbin/pppd,则说明已经安装了pppd;  
     如未安装,从RedHatLinux 安装光盘上装ppp-2.3.11-4.i386.rpm(版本可能不一样)这个软件包  
     二、安装PPPOE客户端软件  
     Linux下的PPPOE客户端软件比较多,而且大多使用GNU License,推荐使用rp-pppoe这个软件包, 从http://www.roaringpenguin.com/pppoe/这个网站上,不仅可以下栽RedHat 平台下的rp-pppoe的二进制软件包,而且可以下栽源代码软件包。  
     1.二进制软件包的安装:  
     A.下栽二进制软件包  
     http://www.roaringpenguin.com/pppoe/rp-pppoe-3.5-1.i386.rpm  
     B.进行安装  
     以root执行:
     #rpm -Uvh rp-pppoe-3.5-1.i386.rpm  
     2.从源代码进行安装:  
     从源代码进行安装同样适用于其它平台的Linux,但必须在Linux系统中安装gcc编译器
。  
     A.下栽源代码软件包  
     http://www.roaringpenguin.com/pppoe/rp-pppoe-3.5.tar.gz  
     B.解压缩
     #tar xvfz rp-pppoe-3.5.tar.gz  
     #cd rp-pppoe-3.5
     C.进行编译和安装  
     运行脚本  
     #./go  
     将自动进行编译和安装,最后,自动调用/usr/sbin/adsl-setup进行配置,具体解释见三。  
     三、配置PPPOE客户端软件  
     安装完软件包后,必须配置pppoe的配置文件/etc/ppp/pppoe.conf,从而让ADSL拨号
时使用配置文件中的用户名、密码等参数。我们不必手工改动这个文件,可以使用
     adsl-setup这个工具进行配置:  
     #/usr/sbin/adsl-setup  
     当出现  
     >>> Enter your PPPoE user name :  
     输入ADSL帐号的用户名  
     当出现  
     >>> Enter the Ethernet interface connected to the ADSL modem  
     For Solaris, this is likely to be something like /dev/hme0.  
     For Linux, it will be ethn, where 'n' is a number.  
     (default eth0):  
     输入 eth0 ,这是ADSL相连的网卡的名字  
     当出现  
     >>> Enter the demand value (default no):  
     输入 no  
     当出现  
     >>> Enter the DNS information here:  
     输入 "server" ,这表示使用ADSL拨号自动获得的DNS服务器IP地址  
     当出现  
     >>> Please enter your PPPoE password:  
     输入ADSL帐号的密码  
     当出现  
     >>> Choose a type of firewall (0-2):  
     输入 0 ,不使用防火墙  
     当出现  
     >>> Accept these settings and adjust configuration files (y/n)?  
     如果输入的信息正确,输入 y ,完成配置,否则,输入 n 重新输入。  
     四、启动PPPOE客户端软件  
     使用命令  
     /usr/sbin/adsl-start 启动PPPOE客户端软件,进行连接,如果成功,将出现
     Connected;  
     如果不成功,请检查网线、ADSL MODEM等物理设备,并查看 /var/log/messages中的信息  
     /usr/sbin/adsl-stop 关闭和ISP的连接  
     /usr/sbin/adsl-status 查看当前连接的状态  
     如果想在Linux系统启动时自动启动ADSL连接,输入以下命令  
     #chkconfig --add adsl  
     将在当前的运行级下加入ADSL的自启动脚本  
     五、测试  
     当连接成功后,使用命令
     #ifconfig -a  
     在输出中应含有关于 ppp0 的信息,其中还绑定了IP 地址,说明已经从拨号中获得了IP地址。  
     使用命令
     #netstat -nr  
     查看路由表信息,这时的默认路由应该是上面获得的IP地址。  
     如果没有默认路由,我们可以手动增加:  
     #route add default gw 上面获得的IP地址  
     使用命令
     #nslookup www.sina.com.cn  
     如果解析出新浪的IP,说明已经从拨号中正确获得了DNS服务器  
     最后,使用命令ping某个域名或IP,如果有响应,表示你已经大功告成了。

注:好像在进行配置的过程中,会提示你是否在启动时加载ADSL,选yes,这样就会省的登录后再start了.

六、使用双网卡带动公司网、家庭网络上网

  硬件要求:同上双网卡

  1. NAT方式:接内部网络的网卡设置IP为私有地址(192.168.0.0/24、172.16.0.0/16、10.0.0.0/8),例如192.168.100.123/24。不要设置默认路由(网关),DNS设置为广州地区(61.144.56.100),其它地区的相应改动为本地区的DNS. 在/etc/rc.d/目录下用touch命令建立firewall文件,执行chmod u+x firewall以改变文件属性,编辑
    /etc/rc.d/rc.local文件,在末尾加上/etc/rc.d/firewall以确保开机时能自动运行该脚本.
    firewall内容为:
    #!/bin/sh
    echo "Enable IP Forwarding..."
    echo "1">/proc/sys/net/ipv4/ip_forward
    echo "Starting iptables rules..."
    /sbin/modprobe iptable_filter
    /sbin/modprobe ip_tables 
    /sbin/modprobe iptable_nat
    #Refresh all chains
    /sbin/iptables -F -t nat
    iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MMASQUERADE
    客户端设置(windows98/2000/xp、linux)网关设置为这台linux地址(192.168.100.123),DNS设置为61.144.56.100。

  2. 透明代理
    配置代理软件squid:

    编辑/usr/local/squid/etc/squid.conf,修改以下内容,确保以下配置:

      http_port 192.168.100.123:8080

      cache_mem 48 MB
      acl all src 0.0.0.0/0.0.0.0
      acl manager proto cache_object
      acl localhost src 127.0.0.1/255.255.255.255
      acl SSL_ports port 443 563
      acl Safe_ports port 80 # http
      acl Safe_ports port 21 # ftp
      acl Safe_ports port 443 563 # https, snews
      acl Safe_ports port 70 # gopher
      acl Safe_ports port 210 # wais
      acl Safe_ports port 1025-65535 # unregistered ports
      acl Safe_ports port 280 # http-mgmt
      acl Safe_ports port 488 # gss-http
      acl Safe_ports port 591 # filemaker
      acl Safe_ports port 777 # multiling http
      acl CONNECT method CONNECT
      acl flag src  192.168.100.0/255.255.255.0

      httpd_accel_host virtual 
      httpd_accel_port 80 
      httpd_accel_with_proxy on 
      httpd_accel_uses_host_header on 
      cache_effective_user nobody 
      cache_effective_group nobody 
      http_access allow flag 

      http_access deny  all

      (限制只允许局域网用户使用代理,具体可以参考squid手册中关于Access Control Lists的内容来限制访问代理)

      cache_dir ufs /var/spool/squid 100 16 256  cache_dir type 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

      (注意这是个不定方程,可以有多个解)

      acl allow_domain dstdomain "/etc/squid/allow_domain"
      创建cache目录 

      [root@proxy squid]# squid -z

      修改该目录所有者squid:

      [root@proxy squid]# chown squid:squid /usr/spool/squid

      最后启动squid:

      [root@iptable logs]# /usr/local/squid/bin/RunCache &

     并且系统中应该有如下几个端口被监听:

      [root@proxy logs]# netstat -ln  tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN  udp 0 0 0.0.0.0:3130 0.0.0.0:*

      这些说明squid已经正常启动了。

      然后使用Redhat的serviceconf工具以使得系统启动时自动启动squid服务器。

    5.iptables的设置

      在/etc/rc.d/目录下用touch命令建立firewall文件,执行chmod u+x firewll以更改文件属性,编辑/etc/rc.d/rc.local文件,在末尾加上/etc/rc.d/firewall以确保开机时能自动执行该脚本。

      firewall文件内容为:

      #!/bin/sh  echo "Enabling IP Forwarding..."  echo 1 > /proc/sys/net/ipv4/ip_forward  echo "Starting iptables rules..."  #Refresh all chains  /sbin/iptables -F -t nat  iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp      --dport 80 -j REDIRECT --to-ports 8080  iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -- -j MMASQUERADE

七、在含有多个vlan的三层交换网络中实现squid+iptables的透明代理
     在企业中网络常常会有三层交换。它能够有效隔离广播,防止广播风暴。通过三层交换机
划分vlan,使得应用和管理都变得相对容易些。但也给代理的设置带来一点小麻烦,传统代理要设置代理服务器地址和端口,这对三层交换网络没有什么问题。关键是透明代理中网关的设置,在三层交换的网络中每个vlan的计算机的网关都要设置成所在vlan的网关,如:下表中vlan1的网关必须是192.168.100.1,vlan2的网关必须是192.168.110.1,像普通网络中把网关都设置成代理服务器的地址是绝对不行的。所以,三层交换网络中透明代理的设置主要问题集中在三层中心交换机和代理服务器路由的设置,三层交换机的路由表中要有一条默认路由指向代理服务器,服务器的路由表中要有一个容纳所有vlan的网关。
   以下是我的网络说明:
   网络内网有15个vlan如路由表所示,代理服务器(squid+iptables)在vlan1中服务器有两块网卡,eth0连接外网ip是A.B.C.D,网关为A.B.C.1。eth1连接内网ip是192.168.100.123/24不设网关。给服务器加上一条路由,将192.168.0.0/16,指向vlan1的网关192.168.100.1,route add -net 192.168.0.0 netmask 255.255.0.0 eth1以保证与其他vlan的通信,如此网络部分便配置成功,关于透明代理设置这里就不说了,请参考其他文章。这样所有的vlan的计算机只要网关和dns配置好就可以上网了,如:vlan3中某台计算机ip设置192.168.120.47,网关为192.168.120.1,dns地址为服务商给的(广州地区ADSL:61.144.56.100),这样就OK了。其出网的路由为->192.168.120.47->192.168.120.1->192.168.100.1->192.168.100.123->A.B.C.1->......

posted on 2007-05-13 13:07 dragon 阅读(51) 评论(0)  编辑  收藏 所属分类: linux