作者 主題: Linux ADSL Multipath Routing Solution  (閱讀 220525 次)

0 會員 與 2 訪客 正在閱讀本文。

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5417
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
Linux ADSL Multipath Routing Solution
« 回覆 #30 於: 2002-07-05 08:59 »
引述: "kuolung"

只移除 ip rule 的部份 ,ip route add 的部份還是要留著


沒有差別, 反正沒有 rule 指定到那個 table.

日京三子

  • 全區板主
  • 俺是博士!
  • *****
  • 文章數: 8832
    • 檢視個人資料
    • http://www.24online.cjb.net
Linux ADSL Multipath Routing Solution
« 回覆 #31 於: 2002-07-09 11:04 »
大家好!

經過小弟這幾天來瘋狂的實驗結果,發現,只要在編譯核心的時候,將那個「ecmp」的patch加入,將會導致系統不穩定的因素產生... 至少,在小弟的主機上(Dual-P!!!,VIA 694X主機板)會發生開機時必定當機的結果....

難道,那個patch還有分系統的嗎?

此致
哈克不愛的多合一輸入平台----->新香草口味
過去的時間不斷流逝,抹去的眼淚已成追憶;
乾枯的雙手無力阻止,再會了我遠去的曾經。

kuolung

  • 俺是博士!
  • *****
  • 文章數: 1031
    • 檢視個人資料
    • http://www.kuolung.net
Linux ADSL Multipath Routing Solution
« 回覆 #32 於: 2002-07-09 11:46 »
引述: "日京三子"
大家好!

經過小弟這幾天來瘋狂的實驗結果,發現,只要在編譯核心的時候,將那個「ecmp」的patch加入,將會導致系統不穩定的因素產生... 至少,在小弟的主機上(Dual-P!!!,VIA 694X主機板)會發生開機時必定當機的結果....

難道,那個patch還有分系統的嗎?

此致


請問您的 [ecmp] 是指 equailze 的 path 嗎,我的 Dual-XP1800+ 也會當
=========================
http://www.kuolung.net
==========================

日京三子

  • 全區板主
  • 俺是博士!
  • *****
  • 文章數: 8832
    • 檢視個人資料
    • http://www.24online.cjb.net
Linux ADSL Multipath Routing Solution
« 回覆 #33 於: 2002-07-09 11:57 »
引述: "kuolung"
引述: "日京三子"
大家好!

經過小弟這幾天來瘋狂的實驗結果,發現,只要在編譯核心的時候,將那個「ecmp」的patch加入,將會導致系統不穩定的因素產生... 至少,在小弟的主機上(Dual-P!!!,VIA 694X主機板)會發生開機時必定當機的結果....

難道,那個patch還有分系統的嗎?

此致


請問您的 [ecmp] 是指 equailze 的 path 嗎,我的 Dual-XP1800+ 也會當


沒錯耶!  還是說,對雙CPU過敏?  請問有沒有人用單顆處理器嘗試一下下好了...!!

沒想到,我們兩個都卡在同一個地方了.... @@"
哈克不愛的多合一輸入平台----->新香草口味
過去的時間不斷流逝,抹去的眼淚已成追憶;
乾枯的雙手無力阻止,再會了我遠去的曾經。

duncanlo

  • SA 苦力組
  • 俺是博士!
  • *****
  • 文章數: 7312
    • 檢視個人資料
Linux ADSL Multipath Routing Solution
« 回覆 #34 於: 2002-07-09 13:21 »
Firewall是不是很操CPU,
為何大家都用雙CPU的板子,
我看很多Firewall版本,
都只說支援1個CPU而已!
VPN也不需要這麼快吧!

matt

  • 榮譽學長
  • 可愛的小學生
  • *
  • 文章數: 14
    • 檢視個人資料
    • http://safe.ip-market.com
Linux ADSL Multipath Routing Solution
« 回覆 #35 於: 2002-07-13 11:21 »
引述: "日京三子"

沒錯耶!  還是說,對雙CPU過敏?  請問有沒有人用單顆處理器嘗試一下下好了...!!

沒想到,我們兩個都卡在同一個地方了.... @@"

這個問題可以試試 kernel-2.4.19pre8 看看,好像是 ECMP 在 SMP 上處理會有些問題。
詳細請參考 LARTC 的 mail list
http://mailman.ds9a.nl/pipermail/lartc/2002q3/004354.html
這個 thread 的討論
最近自己也想來試試看了....^__^

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5417
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1
Linux ADSL Multipath Routing Solution
« 回覆 #36 於: 2002-07-16 17:19 »
這幾天想了想, 發現原本指定 from 各自的 ip 走各自的線路, 雖然可以解決有時連線會一頓一頓的問題, 不過總是怪怪的...
昨天把 rule 改為 to 那個 subnet 才走那條線路後, 似乎就正常多了...
可以試試看.

# 設定 HiNet routing
#=> ip rule add from $EXT_IP1 lookup 201 移除
#加上
ip rule add to $EXT_IP1/$EXT_MASK1 lookup 201
ip route add default via $GW1 dev $EXT_IF table 201

# 設定 SeedNet routing
#=> ip rule add from $EXT_IP2 lookup 202
#加上
ip rule add to $EXT_IP2/$EXT_MASK2 lookup 201
ip route add default via $GW2 dev $EXT_IF table 202


另外, 超過兩條線路的時候, 有在 google 看過有人以前問過, 不過沒有回應...

dennis_lo

  • 懷疑的國中生
  • **
  • 文章數: 43
    • 檢視個人資料
twu2大大,kernel 加上另外的 patch 已經不在了...
« 回覆 #37 於: 2003-10-16 00:35 »
twu2大大,kernel 加上另外的 patch 已經不在了...

可否提供新的檔案位址,或 e-mail 給我呢!謝謝!

twu2

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 5417
  • 性別: 男
    • 檢視個人資料
    • http://blog.teatime.com.tw/1

kuolung

  • 俺是博士!
  • *****
  • 文章數: 1031
    • 檢視個人資料
    • http://www.kuolung.net
Linux ADSL Multipath Routing Solution
« 回覆 #39 於: 2003-10-16 14:54 »
我把我前幾天重寫的有關 multipath 的  script 登出來吧,因為前面寫的 script
是針對固定制的 adsl 如果您的兩條或兩條以上用的是 pppoe 的方式便不能使用
所以我重寫如下

#!/bin/bash
#
IPTABLES=/sbin/iptables
LSMOD=/sbin/lsmod
GREP=/bin/grep
AWK=/bin/awk
SED=/bin/sed
IFCONFIG=/sbin/ifconfig
ECHO=/bin/echo
IP=/sbin/ip
LS=/bin/ls
#
declare -i j
#
interfaces=$($IFCONFIG | $GREP 'ppp' | $AWK '{print $1}')
DEFGW='/sbin/ip route replace'
#
#   delete old rule table
#
rulelist=$($IP rule list | $AWK '{print $5}' | grep 1 )
#
for i in $rulelist ; do
    OLDIP="`$IP rule show | $GREP $i | $AWK '{print $3}'`"
    $IP rule del pref $i from $OLDIP table $i
done
#
#
#
for i in $interfaces ; do
    IPPPP="`$IFCONFIG $i | $GREP 'inet addr' | $AWK '{print $2}' | $SED -e 's/.*://'`"
    GWPPP="`$IFCONFIG $i | $GREP 'inet addr' | $AWK '{print $3}' | $SED -e 's/.*://'`"
    j="`$IFCONFIG $i | $GREP 'ppp' | $AWK '{print $1}' | $SED -e 's/.*p//'`"
    j=j+160
# set rule
    $IP rule add pref $j from $IPPPP table $j
# set default gw
    $IP route replace default via $GWPPP dev $i table $j
    $IP route list table $j
    DEFGW=$DEFGW' nexthop via '$GWPPP' dev '$i
done
$DEFGW

這樣就可以用了,不管用幾條計時的都可以,還是試過,將Hinet提供的4個計時ip全部取得也可以用喔
=========================
http://www.kuolung.net
==========================

kuolung

  • 俺是博士!
  • *****
  • 文章數: 1031
    • 檢視個人資料
    • http://www.kuolung.net
Linux ADSL Multipath Routing Solution
« 回覆 #40 於: 2003-10-16 14:57 »
再補充一下,前面的 script 是假定所使用的

rule number 從 160 開始,
route table 的 number 也是 設為 160 ,table name 也是 160

這樣程式才可以簡化到如此
=========================
http://www.kuolung.net
==========================

kuolung

  • 俺是博士!
  • *****
  • 文章數: 1031
    • 檢視個人資料
    • http://www.kuolung.net
Linux ADSL Multipath Routing Solution
« 回覆 #41 於: 2003-10-16 15:03 »
對不起,再補充一點,因為  pppoe 平均每 24小時都會斷線重來,所以您必需把上面的 script 建一個檔,然後在

/etc/ppp/ip-up.local
/etc/ppp/ip-down.local

中加入

這樣就可以在, pppoe 重新取得 ip 後,自動執行這個 script 一次,重新幫您訂 rule 和 route table 了

還有就是,以上的設定,我只有在 RedHat 7.3 / 8.0 / 9.0 中試用,其他的就要您們自己改了

另,我還沒有加 equlize 這個 patch
=========================
http://www.kuolung.net
==========================

dennis_lo

  • 懷疑的國中生
  • **
  • 文章數: 43
    • 檢視個人資料
Linux ADSL Multipath Routing Solution
« 回覆 #42 於: 2003-10-24 00:40 »
再請問大大一個問題...

如果用三張網卡(兩張對外,一張對內)

那 iptables 要如何下 NAT 的部分?

之前電腦有兩張網卡時,是這樣下的

iptables -t nat -A POSTROUTING -o $EXT_IF -s 192.168.7.0/24 -j SNAT --to $EXT_IP

可以下成兩行,在 EXT_IF 和 EXT_IP 分別設成 EXT_IF_1 EXT_IF _2 和 EXT_IP_1 EXT_IP_2 嗎?

謝謝大大的幫忙!

IceCream

  • 懷疑的國中生
  • **
  • 文章數: 71
    • 檢視個人資料
    • http://www.taiwanes.com
Linux ADSL Multipath Routing Solution
« 回覆 #43 於: 2003-10-24 01:18 »
關於 ecmp 這個 patch....
我在另一個 thread 有討論過
有位學長是說那個equalize.patch 可以給 2.4.18+ 用
因為我本身是用 2.4.20 (RH 9.0)
所以也抓了那個去用
後來發覺從編後會一直當機, 有時候連login 的畫面都到不了
本來以為是SMP 的關係 (p4 2.4 HT). 後來把 HT disabled 後 重編也一樣有那個問題
只好放棄用equalize 那個參數.(現在用的kernel 是2.4.20 + helper-newnat for 2.4.20)
不過奇怪的事來了, 在編以前我就已經有留下做 ecmp 的 script 設定為開機執行
可是忘記把 equalize 那個參數拿掉. 照理會應該會跳error 出來
不過打ip route list 卻出現這樣的情形......

[root@servidor root]# ip route list
24.232.40.0/24 dev eth1  proto kernel  scope link  src 24.232.40.69
10.0.0.0/24 dev eth2  scope link
24.232.162.0/24 dev eth0  proto kernel  scope link  src 24.232.162.9
169.254.0.0/16 dev eth2  scope link
127.0.0.0/8 dev lo  scope link
default equalize
        nexthop via 24.232.162.1  dev eth0 weight 1
        nexthop via 24.232.40.1  dev eth1 weight 1

這就讓我不知其所以然了...... 難到 2.4.20 已經有加入 equalize?

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17484
    • 檢視個人資料
    • http://www.study-area.org
Linux ADSL Multipath Routing Solution
« 回覆 #44 於: 2003-10-24 07:20 »
引述: "IceCream"
這就讓我不知其所以然了...... 難到 2.4.20 已經有加入 equalize?

搞不好會哦.... 最好挖一下 kernel source 下的 documentation...

IceCream

  • 懷疑的國中生
  • **
  • 文章數: 71
    • 檢視個人資料
    • http://www.taiwanes.com
Linux ADSL Multipath Routing Solution
« 回覆 #45 於: 2003-10-24 10:51 »
引述: "netman"
引述: "IceCream"
這就讓我不知其所以然了...... 難到 2.4.20 已經有加入 equalize?

搞不好會哦.... 最好挖一下 kernel source 下的 documentation...


能否請學長指點一下那裡有 documentation 可以挖?
之前因為這個問題我有上www.kernel.org 找 2.4.19 跟 2.4.20 的changelog
但是好像都沒有跟equalize 有關係的.....

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17484
    • 檢視個人資料
    • http://www.study-area.org
Linux ADSL Multipath Routing Solution
« 回覆 #46 於: 2003-10-24 14:12 »
哦,一般是在 /usr/src/linux/documentation 底下。
因為我沒有你的版本,也不確定是否由 eq 相關的內容,用 grep 找一下如何?

要不然,找一找 .config 的內容?

jade-rabbit

  • 鑽研的研究生
  • *****
  • 文章數: 833
  • 性別: 男
    • 檢視個人資料
Linux ADSL Multipath Routing Solution
« 回覆 #47 於: 2003-10-25 16:43 »
引述: "IceCream"
這就讓我不知其所以然了...... 難到 2.4.20 已經有加入 equalize?


我記得 redhat 有把 iproute2 加入 equalize 這個參數的樣子。
但是如果 kernel 沒有 equalize patch ,結果是沒有關係的。
--(中也者天下之大本也,和也者天下之達道也)--

kuolung

  • 俺是博士!
  • *****
  • 文章數: 1031
    • 檢視個人資料
    • http://www.kuolung.net
Linux ADSL Multipath Routing Solution
« 回覆 #48 於: 2004-01-11 15:34 »
引述: "dennis_lo"
再請問大大一個問題...

如果用三張網卡(兩張對外,一張對內)

那 iptables 要如何下 NAT 的部分?

之前電腦有兩張網卡時,是這樣下的

iptables -t nat -A POSTROUTING -o $EXT_IF -s 192.168.7.0/24 -j SNAT --to $EXT_IP

可以下成兩行,在 EXT_IF 和 EXT_IP 分別設成 EXT_IF_1 EXT_IF _2 和 EXT_IP_1 EXT_IP_2 嗎?

謝謝大大的幫忙!


我不知道您的寫法,有沒有問題,但是我都是這樣用的

iptables -t nat -A POSTROUTING -o $EXT_IF -s 192.168.7.0/24 -j MASQUERAD

而不是用 -j SNAT --to $EXT_IP
=========================
http://www.kuolung.net
==========================

akong

  • 鑽研的研究生
  • *****
  • 文章數: 523
    • 檢視個人資料
    • http://www.aspa.idv.tw
在fedora上不行啊
« 回覆 #49 於: 2004-02-09 22:23 »
我是用fedora的linux
但是不管我怎麼用都沒辦法
請問各位大大有什麼可能問題
請問是不是要用sh來執行他
還是要怎麼做
那幾行是寫在檔案內執行嗎

akong

  • 鑽研的研究生
  • *****
  • 文章數: 523
    • 檢視個人資料
    • http://www.aspa.idv.tw
一對多的NAT
« 回覆 #50 於: 2004-02-16 18:44 »
請問一下
像我們用多條ADSL的方法
給一個對內的DHCP
nat的部分要設定什麼嗎
我把iptables的-o的值設定成eth1跟eth2
執行時他跟我說
multiple -o flags not allowed
請問一下是要如何解決

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17484
    • 檢視個人資料
    • http://www.study-area.org
Linux ADSL Multipath Routing Solution
« 回覆 #51 於: 2004-02-16 19:21 »
你是分兩行來打還是打在同一行?

akong

  • 鑽研的研究生
  • *****
  • 文章數: 523
    • 檢視個人資料
    • http://www.aspa.idv.tw
用ecmp無法併線
« 回覆 #52 於: 2004-02-16 22:44 »
我現在的情形是這樣子
我用ecmp來併兩條adsl
但是用大大的方法
卻完全無法使用
不知道是不是我的設定有問題
我是用fedora core 1的linux系統
我把現在我的內容po上來
請各位大大幫我檢查一下
#!/bin/sh
LAN="eth0"

WAN1="192.168.XXX.4"
WANM1="24"
GW1="192.168.XXX.1"

WAN2="61.62.XXX.129"
WANM2="24"
GW2="61.62.XXX.254"

ip addr add $WAN1/$WANM1 dev $LAN
ip addr add $WAN2/$WANM2 dev $LAN

ip rule add from $WAN1 lookup 201
ip route add default via $GW1 dev $LAN table 201

ip rule add from $WAN2 lookup 202
ip route add default via $GW2 dev $LAN table 202

ip route replace default equalize \
nexthop via $GW1 dev $LAN
nexthop via $GW2 dev $LAN
這是我之前的方法
可是因為無法使用
我就試著把nexthop via $GW1 dev $LAN改成nexthop via $GW1 dev eth1
$GW2 dev eth2
可是也是無法使用
當時我想可能是nat的問題
但是因為我的iptables的nat只是針對一對一的nat
是不是nat也要改呢
所以好像也不能用
只能ping而不能上網
請各位大大能告訴我哪裡還需要設定需要改
感謝感謝

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17484
    • 檢視個人資料
    • http://www.study-area.org
Linux ADSL Multipath Routing Solution
« 回覆 #53 於: 2004-02-23 15:22 »
這個題目想玩很久了,但一直沒環境來做。
幸得阿忠兄慷慨讚助一條 hinst 固一 adsl ,終於有機會了...
(詳見: http://phorum.study-area.org/viewtopic.php?t=20673 )

為了方便日後討論,我不想另開主題了。
基本上我也是照著 twu2 兄的文件來做的,不過環境有點不一樣:
代碼: [選擇]

                  /\__/\__/\
              ,--| internet |--.
             /    \/--\/--\/    \
            |                   |
            |                   |
  [seednet ADSL]           [hinet ADSL]
      (非固定)                  (固一)
            |               220.130.96.254
     [ ip share ]               |
    192.168.100.1               |
            |                   |
     192.168.100.2           220.130.96.21
    +----------------------------------+
    |     (eth1)               (eth0)  |
    |         kernel 2.4.23            |
    +----------------------------------+
            (my linux box RH9.0)


我是下載 2.4.23 的 kernel 及 equalize.patch 這個 patch 回來 compile 的。
(細節請自行解決)
不過,用 twu2 兄的 script 實作不起來,後來再重看『 Linux 平台上之 Multipath Routing 應用』
http://www.study-area.org/tips/m_routing.htm
將 script 改為如下:
代碼: [選擇]
#!/bin/bash

#-- hinet (fixed) ---#
EXT_IF0=eth0
EXT_IP0=220.130.96.21
EXT_MASK0=24
EXT_NET0=220.130.96.0
EXT_BRD0=220.130.96.255
EXT_GW0=220.130.96.254

#-- seednet (dialup) via ip share --#
EXT_IF1=eth1
EXT_IP1=192.168.100.2
EXT_MASK1=24
EXT_NET1=192.168.100.0
EXT_BRD1=192.168.100.255
EXT_GW1=192.168.100.1

#-- define tables --#
TB0=10
TB1=20

#-- config interfaces --#
ip addr flush dev $EXT_IF0
ip addr flush dev $EXT_IF1
ip addr add $EXT_IP0/$EXT_MASK0 broadcast $EXT_BRD0 dev $EXT_IF0
ip addr add $EXT_IP1/$EXT_MASK1 broadcast $EXT_BRD1 dev $EXT_IF1

#-- config routing --#
ip rule add pref 10 from $EXT_IP0 table $TB0
ip route add default table $TB0 via $EXT_GW0
ip rule add pref 20 from $EXT_IP1 table $TB1
ip route add default table $TB1 via $EXT_GW1

ip route add $EXT_NET0/$EXT_MASK0 dev $EXT_IF0
ip route add $EXT_NET1/$EXT_MASK1 dev $EXT_IF1

#-- apply routing --#
ip route replace default equalize \
        nexthop via $EXT_GW0 dev $EXT_IF0 weight 2 \
        nexthop via $EXT_GW1 dev $EXT_IF1 weight 1

#-- flushing cache --#
ip route flush cache

exit 0


嗯... 這樣可以連線到外面了,不過,問題狀況如下:

我用 ftp 來測試對外 upload ,
發現 packets 都是走 hinet 出去,也就是第一條 routing ...
(我是用 tcpdupm -i any 來看的)。
若將 weight 從 2 改為 1 ,那就只會走其中的一條,且是最前面一條 routing 。
(我試過互換行順了...)

因為才玩一會(今天開始),目前還在測試中...
且斷線偵測部份我還沒 try ,等有心得再回來報告。
(日後我會另外整理較為詳細的報告給大家)

日京三子

  • 全區板主
  • 俺是博士!
  • *****
  • 文章數: 8832
    • 檢視個人資料
    • http://www.24online.cjb.net
Linux ADSL Multipath Routing Solution
« 回覆 #54 於: 2004-02-23 16:36 »
N老, 期待你在2.6.x版本上的實驗啊!
哈克不愛的多合一輸入平台----->新香草口味
過去的時間不斷流逝,抹去的眼淚已成追憶;
乾枯的雙手無力阻止,再會了我遠去的曾經。

kuolung

  • 俺是博士!
  • *****
  • 文章數: 1031
    • 檢視個人資料
    • http://www.kuolung.net
Linux ADSL Multipath Routing Solution
« 回覆 #55 於: 2004-02-24 09:11 »
引述: "netman"
這個題目想玩很久了,但一直沒環境來做。
代碼: [選擇]
#!/bin/bash

ip route replace default equalize \
        nexthop via $EXT_GW0 dev $EXT_IF0 weight 2 \
        nexthop via $EXT_GW1 dev $EXT_IF1 weight 1



嗯... 這樣可以連線到外面了,不過,問題狀況如下:

我用 ftp 來測試對外 upload ,
發現 packets 都是走 hinet 出去,也就是第一條 routing ...
(我是用 tcpdupm -i any 來看的)。
若將 weight 從 2 改為 1 ,那就只會走其中的一條,且是最前面一條 routing 。
(我試過互換行順了...)



equalize -> 已經做在 kernel 裡面了嗎 ?? 如果 kernel 已經內含了,這樣是有問題的,如果還是要另外加 patch 那您測出來的現象算是正常的


另我看您的架構,非固定的那一條 adsl 有過 ip share , 將來在寫斷線偵測會比較難寫
=========================
http://www.kuolung.net
==========================

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17484
    • 檢視個人資料
    • http://www.study-area.org
Linux ADSL Multipath Routing Solution
« 回覆 #56 於: 2004-02-24 16:50 »
哦,感謝 Kuolung 兄﹗
我試過沒 patch 也試過有 patch ,
( 抓  http://www.teatime.com.tw/~tommy/linux/equalize.patch )
結果都一樣... >_<

倒是改了你的 script 來用,感覺蠻好的:
代碼: [選擇]
#!/bin/bash
#
IPTABLES=/sbin/iptables
LSMOD=/sbin/lsmod
GREP=/bin/grep
AWK=/bin/awk
SED=/bin/sed
CUT=/bin/cut
WC=/usr/bin/wc
SEQ=/usr/bin/seq
IFCONFIG=/sbin/ifconfig
ECHO=/bin/echo
IP=/sbin/ip
LS=/bin/ls

#-- define fixed interface & gateway --#
fixed_if="eth0 eth1"
#-- format: if:gw:weight --#
fixed_gw="eth0:220.130.96.254:1 eth1:192.168.100.1:1"

#-- determine active interfaces --#
interfaces=$($IFCONFIG | $GREP -E 'ppp|eth' | $AWK '{print $1}')
DEFGW='/sbin/ip route replace'

#-- define table_id --#
init_num=10
offset=`$ECHO -e "${interfaces// /\n}" | $WC -l`
last_num=$(($init_num + $((offset * 10)) ))
tb_num=`$SEQ $init_num 10 $last_num | xargs echo`

#-- delete old rule table --#
$IP rule list | $GREP -E `$ECHO ${tb_num// /|} | $SED 's/[^|][^|]*/^&:/g'` \
        | while read line; do
        TABID=`echo $line | awk -F: '{print $1}'`
        OLDIP=`echo $line | awk '{print $3}'`
        PREID=`echo $line | awk '{print $5}'`
        $IP rule del pref $PREID from $OLDIP table $TABID
done

#-- FUNCTION: determine gw --#
dgw() {
        #-- for fixed if --#
        if $ECHO "$fixed_if" | $GREP -wq $1 ; then
                GWIP=`$ECHO -e "${fixed_gw// /\n}" | $GREP "^$1:" | $CUT -d: -f2`
                WEIGHT=`$ECHO -e "${fixed_gw// /\n}" | $GREP "^$1:" | $CUT -d: -f3`
        #-- for ppp if --#
        elif $ECHO $1 | $GREP -q ppp ; then
                GWIP="`$IFCONFIG $i | $GREP 'inet addr' | $AWK '{print $3}' | $SED -e 's/.*://'`"
        #-- for unkown, point back to itself --#
        else
                GWIP=$IFIP
        fi
}

#-- config rule & routing --#
for i in $interfaces ; do
        IFIP="`$IFCONFIG | $GREP -w -A1 $i | $AWK '/inet/{print $2}' | $SED -e 's/.*://'`"
        dgw $i
        [ "$tb_num" ] && tb_id=${tb_num%% *}
        # set rule
        $IP rule add pref $tb_id from $IFIP table $tb_id
        # set default gw
        $IP route replace default via $GWIP dev $i table $tb_id
        DEFGW=$DEFGW" nexthop via $GWIP dev $i weight ${WEIGHT:=1}"
        tb_num=${tb_num#* }
done

#-- apply routubg --#
$DEFGW

#-- flush cache --#
$IP route flush cache

#-- show routing
$IP route list

#-- FINISH --#
exit 0

jade-rabbit

  • 鑽研的研究生
  • *****
  • 文章數: 833
  • 性別: 男
    • 檢視個人資料
Linux ADSL Multipath Routing Solution
« 回覆 #57 於: 2004-02-25 01:27 »
說一下我自己之前實作時候遇到的心得:
我的環境跟 netman 雷同,一邊通往 gateway box再通往固接 ADSL;
一邊透過 pppoe 撥接上 ADSL。
1.iproute 可以下 equalize 參數成功並不代表 kernel 部分已有 equalize (outbound load sharing by packets) 的修補。

2.equalize 的 patch 之所以沒進 official Linux kernel,我在一次連上酷學園時終於明白了~對方會沒法紀錄你到底是從那個 IP 來。造成明明登入了,過不久就認為你又登出了。

3.若該台 gateway 本身所出去的也要 by session 分流。請注意之前所post 的 scripts or commands 都少了一段 routing 設定。所以才會有一頓一頓的現象。請跟 LARTC.org 原文的 4.2 那段範例比對一下,就可以知到囉。
--(中也者天下之大本也,和也者天下之達道也)--

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17484
    • 檢視個人資料
    • http://www.study-area.org
Linux ADSL Multipath Routing Solution
« 回覆 #58 於: 2004-02-25 01:37 »
請問 JR 兄: 不知如何確認 kernel 呢?

jade-rabbit

  • 鑽研的研究生
  • *****
  • 文章數: 833
  • 性別: 男
    • 檢視個人資料
Linux ADSL Multipath Routing Solution
« 回覆 #59 於: 2004-02-25 01:51 »
引述: "netman"
請問 JR 兄: 不知如何確認 kernel 呢?

在套用那個 equalize patch 成功後,如果沒有 errors 就應該有 patch 進 kernel..
可以看一下那個 patch file,
它 patch (diff) 哪些檔案,去 vi 再確認已經改過的即可。
如下片段則看 你的 kernel source dir/net/ipv4/udp.c
有沒有改成有 + 號開頭的那幾行。
代碼: [選擇]

diff -urN linux-2.4.18-clean/net/ipv4/udp.c linux-2.4.18/net/ipv4/udp.c
--- linux-2.4.18-clean/net/ipv4/udp.c Mon Feb 25 20:38:14 2002
+++ linux-2.4.18/net/ipv4/udp.c Thu Mar 21 20:48:07 2002
@@ -740,6 +740,14 @@
  sk->state = TCP_ESTABLISHED;
  sk->protinfo.af_inet.id = jiffies;
 
+ #ifdef CONFIG_IP_ROUTE_MULTIPATH
+ if(rt->rt_flags&RTCF_EQUALIZE) {
+ ip_rt_put(rt);
+ sk->dst_cache=NULL;
+ }
+ else
+ #endif
+
  sk_dst_set(sk, &rt->u.dst);
  return(0);
 }
--(中也者天下之大本也,和也者天下之達道也)--