Linux下的雙線ADSL負載均衡安裝日誌

火星人 @ 2014-03-04 , reply:0
←手機掃碼閱讀

Linux下的雙線ADSL負載均衡安裝日誌

看到很多兄弟在搞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
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
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
HWADDR=00:19:5b:34:58:ce

#/etc/sysconfig/ifcfg-eth2
# VIA Technologies, Inc. VT6105
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
:PREROUTING ACCEPT
:INPUT ACCEPT
:FORWARD ACCEPT
:OUTPUT ACCEPT
:POSTROUTING ACCEPT
-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
:FORWARD DROP
:OUTPUT ACCEPT
-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
:PREROUTING ACCEPT
:POSTROUTING ACCEPT
:OUTPUT ACCEPT
-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(8) 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 編輯 ]
《解決方案》

睡覺前自己頂一下,順便發PDF上來。更詳細的測試及問題以後再說,先睡覺覺。
《解決方案》

頂一下!:D
限制10個字喲
《解決方案》

LZ 能解釋一下   -j TCPMSS --set-mss 1440  和  -j TTL --ttl-set 128  的意思嗎?
另外  請問這種 ADSL的LB 是基於包的還是基於連接的?
《解決方案》

-j TCPMSS --set-mss 1440 指TCP連接的最大分段尺寸協商為1440 ,這主要是為了避免傳輸的報文超過MTU的大小,帶來重分段;

-j TTL --ttl-set 128 指將所有報文的TTL值修改為 128,其實就是TTL偽裝;
《解決方案》

原帖由 kevin.tan 於 2007-4-18 13:39 發表於 5樓  
-j TCPMSS --set-mss 1440 指TCP連接的最大分段尺寸協商為1440 ,這主要是為了避免傳輸的報文超過MTU的大小,帶來重分段;

-j TTL --ttl-set 128 指將所有報文的TTL值修改為 128,其實就是TTL偽裝;


謝謝你都替我回答了,完全正確IPID也是實現偽裝的。
《解決方案》

呵呵,還是要謝謝兄ssffzz1給我們寫的文檔啊

順便問一下ssffzz1兄,RouterOS好用不?是不是穩定性比自己配置的路由器要強很多呀?

[ 本帖最後由 kevin.tan 於 2007-4-18 17:05 編輯 ]
《解決方案》

原帖由 5iwww 於 2007-4-18 09:22 發表於 4樓  
LZ 能解釋一下   -j TCPMSS --set-mss 1440  和  -j TTL --ttl-set 128  的意思嗎?
另外  請問這種 ADSL的LB 是基於包的還是基於連接的?

剛才實驗了一下,應該不是基於包的。正如《LINUX高級路由和流量控制》所說,這種路由是基於緩衝的,因此並不是100%的均衡。

我個人認為基於NAT的路由應該是基於鏈接的。假設是基於包的,當我們譬如用QQ的時候,因為是基於包的,這時因為有NAT的原因到達QQ伺服器的包的源地址是不同的,因此無法建立鏈接。但基於鏈接的卻可以建立正常的鏈接並通訊。
如果說沒有NAT的參與,那麼基於包的路由均衡如果兩條鏈路的代價不一樣,可能會導致包到達的順序不同,就會產生重傳現象。
不過在CISCO的路由器中是可以做基於包的負載均衡的,但我沒有條件測試。
《解決方案》

原帖由 kevin.tan 於 2007-4-18 16:55 發表於 7樓  
呵呵,還是要謝謝兄ssffzz1給我們寫的文檔啊

順便問一下ssffzz1兄,RouterOS好用不?是不是穩定性比自己配置的路由器要強很多呀?


也不是,RouterOS也是基於LINUX+IPTABLES+IPROUTE2的,基本都差不多。不過RouterOS是一個比較全面的成品的軟體,你只要會設置就可以了,但它的功能是定製的,譬如想自己寫個小軟體運行,幾乎不可能。而LINUX需要我們幾乎純手工的製作,最大的特點就是靈活。
《解決方案》

原帖由 ssffzz1 於 2007-4-18 20:29 發表於 8樓  


剛才實驗了一下,應該不是基於包的。正如《LINUX高級路由和流量控制》所說,這種路由是基於緩衝的,因此並不是100%的均衡。

我個人認為基於NAT的路由應該是基於鏈接的。假設是基於包的,當我們譬如用QQ的 ...


所以,我認為很大一部分人會有一個誤區,就是用linux(NAT)可以做到負載均衡,其實應該叫冗餘會比較好一些,真正的負載均衡應該是不涉及到nat的,因為在路由上,路由器只是修改nexthop的mac地址,而ip的源和目的是不變的,所以cisco的路由的負載均衡才是真正的LB :mrgreen:   在linux上 因為router cache的問題,而且包負載在NAT上幾乎是不可用,我認為LB應該做在nexthop上而不是NAT上,LZ認為呢?:em11:




[火星人 via ] Linux下的雙線ADSL負載均衡安裝日誌已經有410次圍觀

http://www.coctec.com/docs/service/show-post-5625.html