Linux下的双线ADSL负载均衡安装日志

来源:互联网 发布:科幻世界淘宝店怎么了 编辑:程序博客网 时间:2024/04/29 12:33
1楼 发表于 2007-4-17 23:47 
看到很多兄弟在搞ADSL负载均衡,下面是今晚的安装日志。由于是第一次写安装日志,所以写作水平很差,加上时间又太晚了,难免有很多错误,需要的同志就凑或着看吧。不正确的地方,或需要改进的地方,欢迎多提意见。EMAIL:ssffzz1@126.com  另外:我不知道在这里怎么修饰文字,因为我认为需要注意的地方我都加粗了,需要的话我附带了PDF文件,也可以打印的,没有密码。

LINUX双线ADSL负载均衡
系统环境:
双线均衡服务器:赛扬1.7,128内存,30G内存。软件为FC6.
PPPOE服务器:P133,32内存128MCF卡。软件为ROUTEROS.
测试结构如下:
                                |------------------|
PC1-----均衡服务器                        PPPOE服务器--------路由器-----INTERNET
                                |------------------|

IP地址分配如下:
PC1: 192.168.10.88 GW 192.168.10.1
PPP0: 10.0.1.4 GW 10.0.0.1
PPP1:10.0.1.5 GW 10.0.0.1
一、        安装均衡服务器软件:
1、        安装FC6,安装开发包,这样在编译IPID模块的时候很方便。为防止网卡号的混乱先安装一块网卡,装完后依次插入其余2块网卡,每插一块启动一次,完成驱动的安装,如果出现网卡命名的错误,则修改/etc/modprobe.conf和/etc/sysconfig/hwconf文件,还有/etc/network-script/if-ethx文件。
2、        禁用SELINUX:修改/etc/selinux/config:文件,SELINUX=disable
3、        去掉IPV6支持:
#/etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=gw.jl.com
4、        去掉不必要的服务:这个利用setup程序完成好了。
5、        加入一些IPTABLES的模块:修改/etc/sysconfig/iptables-config文件,在原来的模块配置条目(就一条)下面加入
IPTABLES_MODULES= “ip_conntrack_ftp”  
IPTABLES_MODULES=”ip_nat_netbios_ns”
IPTABLES_MODULES=”ip_nat_ftp”
6、        配置网卡ETH0
#/etc/sysconfig/ifcfg-eth0
# VIA Technologies, Inc. VT6105 [Rhine-III]
DEVICE=eth0
BROADCAST=192.168.10.255
HWADDR=00:19:5B:34:58:CB
IPADDR=192.168.10.1
IPV6ADDR=
IPV6PREFIX=
NETMASK=255.255.255.0
NETWORK=192.168.10.0
ONBOOT=yes
7、        配置网卡ETH1 ETH2
#/etc/sysconfig/ifcfg-eth1
# VIA Technologies, Inc. VT6105 [Rhine-III]
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
HWADDR=00:19:5b:34:58:ce

#/etc/sysconfig/ifcfg-eth2
# VIA Technologies, Inc. VT6105 [Rhine-III]
DEVICE=eth2
ONBOOT=yes
BOOTPROTO=none
HWADDR=00:19:5b:34:58:c8
8、        配置ADSL,这里不要配置添加缺省网关,同时要修改PID文件,要不两条PPP链路不能同时使用,文件如下:
#/etc/sysconfig/ifcfg-ppp0
USERCTL=yes
BOOTPROTO=dialup
NAME=DSLppp0
DEVICE=ppp0
TYPE=xDSL
ONBOOT=yes
PIDFILE=/var/run/pppoe-ppp0.pid
FIREWALL=NONE
PING=.
PPPOE_TIMEOUT=80
LCP_FAILURE=3
LCP_INTERVAL=20
CLAMPMSS=1412
CONNECT_POLL=6
CONNECT_TIMEOUT=60
DEFROUTE=no
SYNCHRONOUS=no
ETH=eth1
PROVIDER=DSLppp0
USER=ppp0
PEERDNS=no
DEMAND=no

#/etc/sysconfig/ifcfg-ppp1
USERCTL=yes
BOOTPROTO=dialup
NAME=DSLppp1
DEVICE=ppp1
TYPE=xDSL
ONBOOT=yes
PIDFILE=/var/run/pppoe-ppp1.pid
FIREWALL=NONE
PING=.
PPPOE_TIMEOUT=80
LCP_FAILURE=3
LCP_INTERVAL=20
CLAMPMSS=1412
CONNECT_POLL=6
CONNECT_TIMEOUT=60
DEFROUTE=no
SYNCHRONOUS=no
ETH=eth2
PROVIDER=DSLppp1
USER=ppp1
PEERDNS=no
DEMAND=no
9、        配置均衡网关,把它方到/etc/ppp/ip-up文件中去,这样一旦拨号成功,就添加均衡网关。同时修改TCP的超时值。
#!/bin/bash
# This file should not be modified -- make local changes to
# /etc/ppp/ip-up.local instead

PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH

LOGDEVICE=$6
REALDEVICE=$1

[ -f /etc/sysconfig/network-scripts/ifcfg-${LOGDEVICE} ] && /etc/sysconfig/network-scripts/ifup-post --realdevice ${REALDEVICE} ifcfg-${LOGDEVICE}

/etc/ppp/ip-up.ipv6to4 ${LOGDEVICE}

[ -x /etc/ppp/ip-up.local ] && /etc/ppp/ip-up.local "$@"



ip route add default scope global nexthop dev ppp0 weight 1 nexthop dev ppp1 weight 1

echo "86400" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established

exit 0
10、        按照IPID模块的编译方法,编译IPID模块。
11、        配置防火墙及NAT
# Generated by iptables-save v1.3.5 on Wed Apr 18 00:10:26 2007
*mangle
REROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
OSTROUTING ACCEPT [0:0]
-A POSTROUTING -o ppp0 -j TTL --ttl-set 128
-A POSTROUTING -o ppp0 -j IPID --ipid-inc 1
-A POSTROUTING -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1440
-A POSTROUTING -o ppp1 -j TTL --ttl-set 128
-A POSTROUTING -o ppp1 -j IPID --ipid-inc 1
-A POSTROUTING -o ppp1 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1440
COMMIT
# Completed on Wed Apr 18 00:10:26 2007
# Generated by iptables-save v1.3.5 on Wed Apr 18 00:10:26 2007
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -s 192.168.10.0/255.255.255.0 -p icmp -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 127.0.0.1 -j ACCEPT
-A INPUT -d 127.0.0.1 -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A FORWARD -p gre -j DROP
-A FORWARD -s 192.168.10.0/255.255.255.0 -j ACCEPT
-A FORWARD -d 192.168.10.0/255.255.255.0 -j ACCEPT
COMMIT
# Completed on Wed Apr 18 00:10:26 2007
# Generated by iptables-save v1.3.5 on Wed Apr 18 00:10:26 2007
*nat
REROUTING ACCEPT [0:0]
OSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o ppp0 -j MASQUERADE
-A POSTROUTING -o ppp1 -j MASQUERADE
COMMIT
# Completed on Wed Apr 18 00:10:26 2007
12、        开启转发,及IP动态地址
# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled.  See sysctl( and
# sysctl.conf(5) for more details.

# Controls IP packet forwarding
net.ipv4.ip_forward = 1

# Controls source route verification
net.ipv4.conf.default.rp_filter = 1

# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0

# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0

# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1

# Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 1
net.ipv4.ip_dynaddr = 1
13、配置好nameserver服务器,/etc/resolv.conf
nameserver 202.102.134.68
14、配置文件中改变的部分,和应该注意的部分,我都加了斜体并且加粗显示了,这是要注意的地方。

二、        最后就可以在PPPOE服务器上,或者在均衡网关上看到两条PPP链路的负载均衡了。时间有限,我就不抓图了。应该说这种均衡可能是根据目的地址的均衡,因为我在PC1上开了N个迅雷任务。这样能看到均衡的结果。但如果不开任何任务只用PING程序,则基本看不到结果。

更新:
注:
1、 更改ip route add default scope global nexthop dev ppp0 weight 1 nexthop dev ppp1 weight 1 中的scope global为equalize这样的均衡效果可能要好一些。
2、 此实验在FC3下未成功。原因是MASQUERADE有缺陷,出现“MASQUERADE:Route sent us somewhere else.”错误,这需要一个内核补丁。

[ 本帖最后由 ssffzz1 于 2007-5-8 20:27 编辑 ]

4楼 发表于 2007-4-18 09:22 
LZ 能解释一下   -j TCPMSS --set-mss 1440  和  -j TTL --ttl-set 128  的意思吗?
另外  请问这种 ADSL的LB 是基于包的还是基于连接的?


5楼 发表于 2007-4-18 13:39 
-j TCPMSS --set-mss 1440 指TCP连接的最大分段尺寸协商为1440 ,这主要是为了避免传输的报文超过MTU的大小,带来重分段;

-j TTL --ttl-set 128 指将所有报文的TTL值修改为 128,其实就是TTL伪装;

 

完全正确IPID也是实现伪装的。

 

 

刚才实验了一下,应该不是基于包的。正如《LINUX高级路由和流量控制》所说,这种路由是基于缓冲的,因此并不是100%的均衡。

我个人认为基于NAT的路由应该是基于链接的。假设是基于包的,当我们譬如用QQ的时候,因为是基于包的,这时因为有NAT的原因到达QQ服务器的包的源地址是不同的,因此无法建立链接。但基于链接的却可以建立正常的链接并通讯。
如果说没有NAT的参与,那么基于包的路由均衡如果两条链路的代价不一样,可能会导致包到达的顺序不同,就会产生重传现象。
不过在CISCO的路由器中是可以做基于包的负载均衡的,但我没有条件测试。

 

 

9楼 发表于 2007-4-18 20:32 


QUOTE:
原帖由 kevin.tan 于 2007-4-18 16:55 发表于 7楼  
呵呵,还是要谢谢兄ssffzz1给我们写的文档啊

顺便问一下ssffzz1兄,RouterOS好用不?是不是稳定性比自己配置的路由器要强很多呀?

也不是,RouterOS也是基于LINUX+IPTABLES+IPROUTE2的,基本都差不多。不过RouterOS是一个比较全面的成品的软件,你只要会设置就可以了,但它的功能是定制的,譬如想自己写个小软件运行,几乎不可能。而LINUX需要我们几乎纯手工的制作,最大的特点就是灵活。

 

 

10楼 发表于 2007-4-18 21:56 


QUOTE:
原帖由 ssffzz1 于 2007-4-18 20:29 发表于 8楼  


刚才实验了一下,应该不是基于包的。正如《LINUX高级路由和流量控制》所说,这种路由是基于缓冲的,因此并不是100%的均衡。

我个人认为基于NAT的路由应该是基于链接的。假设是基于包的,当我们譬如用QQ的 ...

所以,我认为很大一部分人会有一个误区,就是用linux(NAT)可以做到负载均衡,其实应该叫冗余会比较好一些,真正的负载均衡应该是不涉及到nat的,因为在路由上,路由器只是修改nexthop的mac地址,而ip的源和目的是不变的,所以cisco的路由的负载均衡才是真正的LB    在linux上 因为router cache的问题,而且包负载在NAT上几乎是不可用,我认为LB应该做在nexthop上而不是NAT上,LZ认为呢?
33楼 发表于 2007-4-24 10:07 
我觉得 ip route flush cache 即便能实现route cache的刷新 但是仍不能解决断线后的冗余

我的实验没有2个ppp口  是2个网关 一个是nat 一个是普通的forward

ip route add default scope global nexthop dev eth0 weight 1 nexthop dev eth1 weight 1

设置了之后,用tracert 一个ip是一个路由,当我down掉那个出口后,再 tracert 发现路由不通了,然后在linux上执行 ip route flush cache ,再 tracert 发现路由还是走那个口,而且linux本地的那条 ip route add default scope global nexthop dev eth0 weight 1 nexthop dev eth1 weight 1 依旧存在(正常路由在端口关闭后会消失)

可不可以理解为 down掉一个口后,仍然不能把出口流量全部走另外一个正常的口呢
35楼 发表于 2007-4-24 13:36 


QUOTE:
原帖由 5iwww 于 2007-4-24 10:07 发表于 33楼  
我觉得 ip route flush cache 即便能实现route cache的刷新 但是仍不能解决断线后的冗余

我的实验没有2个ppp口  是2个网关 一个是nat 一个是普通的forward

ip route add default scope global nexthop d ...

应该是的。按照我的做法,如果一条ADSL断掉,不能够实现冗余。要实现的话,可以编写一个检测脚本,来根据链路的变化实现路由的相应变更。


39楼 发表于 2007-4-30 09:48 
更新:
ip route add default scope global nexthop dev ppp0 weight 1 nexthop dev ppp1 weight 1
语句的scope global为equalize
即:
ip route add default equalize nexthop dev ppp0 weight 1 nexthop dev ppp1 weight 1
感觉这样均衡的效果要好一些。
从帖子发布至今一直运行,中间未出现过掉线和重启。感觉ADSL有时候掉线可能和线路质量有很大关系,这个是双绞铜线的线路。
69楼 发表于 2007-5-11 08:21 
关于等价多路vpn线路负载均衡及类似网络连接实现的方法


关于等价多路vpn线路负载均衡及类似网络连接实现的方法


                     +-------+  eth1(tunnel1)         +-------+
                     |          | ================|          |
network1----   |   A     |                              |  B       |----  network 2
                     |          | ================|          |
                     +-------+  eth2(tunnel2)         +-------+
# tc qdisc add dev eth1(tun1) root teql0
# tc qdisc add dev eth2(tun2) root teql0
# ip link set dev teql0 up

路由 A:
eth1(tun1) 10.0.0.1
eth2(tun2) 10.0.0.2
# ip addr add dev teql0 10.0.0.3/24
# ip ru add default via 10.0.1.3 dev teql0
路由B:
eth1(tun1) 10.0.1.1
eth2(tun2) 10.0.1.2
#ip addr add dev teql0 10.0.1.3/24
#ip ru add default via 10.0.0.3 dev teql0
# echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
# echo 0 > /proc/sys/net/ipv4/conf/eth2/rp_filter

这是一种包均衡方案.

 

 

 

原创粉丝点击