伺服器, 兩條對外服務線路要如何設定, 請協助.. [論壇 - 伺服器架設]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊

(1) 2 »


伺服器, 兩條對外服務線路要如何設定, 請協助..
會員二級
註冊日期:
2008/9/12 11:40
所屬群組:
已註冊使用者
等級: 6
HP : 0 / 145
MP : 21 / 5632
EXP: 82
離線
請問, 我有一台 SERVER , 上頭想要接兩光纖對外服務, IP 取得方式是 DHCP,
目前的情況是雙介面 eth0, eth1 , 通常 eth1 會在 eth0 後取得 IP , 此
時 default route 會指定給 eth1, 而此時只有 eth1 會對外服務, eth0 對
eth0 發出的任何請求勻不會動作, 如 ssh , 請問我要如何調整 route table,
讓由 eth1 來的請求就由 eth1 送回, 而 eth0 來的請求就由 eth0 送回..

如果可行, 可以多弄些網卡來配合對外線路加大 server 服務頻寬..

2011/7/2 21:22
應用擴展 工具箱
回覆: 伺服器, 兩條對外服務線路要如何設定, 請協助..

註冊日期:
2009/12/6 10:32
所屬群組:
已註冊使用者
等級: 71
HP : 1053 / 1756
MP : 4456 / 61592
EXP: 24
離線
參考
回覆: 兩塊網路卡問題
#7 ~ #10
這個部分 因 eth0 與 eth1 分屬 不同的 subnet
要如何修正 以適合你的情況
再研究一下

2011/7/2 21:37
應用擴展 工具箱
回覆: 伺服器, 兩條對外服務線路要如何設定, 請協助..
版主
註冊日期:
2008/7/14 0:03
來自 螢幕的另一端
所屬群組:
網站管理員
已註冊使用者
討論區管理群
等級: 33
HP : 0 / 800
MP : 500 / 31366
EXP: 3
離線
你把兩張網卡的設定值出來,並把 IP 寫出來,不想寫真的IP,你寫個假的也行,之後你得自行改回去。

兩張網卡最好是固定IP,這樣我幫你寫個兩筆 static route 即可

因為若是浮動IP的話,那難度會增加很高,不是兩筆靜態路由就可解決的

2011/7/2 23:16
應用擴展 工具箱
回覆: 伺服器, 兩條對外服務線路要如何設定, 請協助..
會員二級
註冊日期:
2008/9/12 11:40
所屬群組:
已註冊使用者
等級: 6
HP : 0 / 145
MP : 21 / 5632
EXP: 82
離線
謝謝...
首先, 兩條線都是固定 IP , 且在每次 DHCP 後都會取得同樣的 IP.
但 default route 部份會很奇怪, 因為取得的 IP 在同一群, 也就是說.
兩條線都會同一個 route ip 出去, 但是實際測試上只一條線能對外服務..
例:
eth0: 8.1.1.100/24 (先)
eth1: 8.1.1.200/24 (後)
default route 8.1.1.254

此時我用 ssh 連 eth1 的 8.1.1.200 可以動作.
而在 eth0 的 8.1.1.100 確連 ping 都 ping 不到..

因為主要是做 SERVER 用, 所以是對外服務, 希望從 eth1 來的封包,
同樣從 eth1 回去, 而 eth0 來的封包從 eth0 回去, 不知是否可行.

2011/7/2 23:34
應用擴展 工具箱
回覆: 伺服器, 兩條對外服務線路要如何設定, 請協助..
會員四級
註冊日期:
2008/11/20 21:32
所屬群組:
已註冊使用者
等級: 20
HP : 0 / 487
MP : 163 / 18572
EXP: 48
離線
多線平衡負載(合併多條對外頻寬線路,分流)
需要使用到 iproute2 多重路由功能

Google 搜尋
關鍵字:Linux iproute2
關鍵字:Linux WAN Load Balance

但網路上的教學或情報,都是片段,除非本身有一定程度了解,只是想參考一下作法,不然一定看不懂。

若想完整從頭開始,有邏輯、有順序的學習

中文書籍推薦:
旗標出版社,《iptables 技術實務》
裡面有一章專講 iproute2

除了多線負載平衡,iproute2 多重路由還有其它用途,學起是不錯的。

------------------------------------------------


2 WAN 負載平衡,一個簡單的範例:


# 變數定義
EXT1_IF=eth0
EXT1_GW_IP=11.22.33.44
EXT1_WEIGHT=5 #分配權重

EXT2_IF=eth1
EXT2_GW_IP=55.66.77.88
EXT2_WEIGHT=5 #分配權重

# 設定每一線(網卡)的預設閘道
ip route replace default \
nexthop via $EXT1_GW_IP dev $EXT1_IF weight $EXT1_WEIGHT \
nexthop via $EXT2_GW_IP dev $EXT2_IF weight $EXT2_WEIGHT

# 清除路由快取,使設定立刻生效
ip route flush cache


要更多線的話,就依此類推

「權重」是 NAT 分流用途的,是指 NAT 出去時,分配的比例,比如有 50M 和 20M 線路各一條,那就可以分配 2:1。每兩次從50M那條出去,才1次從20M那條出去,是這個意思。

不過 iproute2 只管路由,不管 NAT 的,NAT 需要 iptables 那部份另外設定。

還有如果是外面進來,WAN TO LAN,那個又和 NAT 無關,是要用 DNS 跳號的...

以上都是說 WAN 端多線分流,至於 LAN 端的多線分流,不是用 iproute2,而是用 Linux bonding 綁定網卡技術,那又是另一門學問...

總之很複雜,三言兩語無法解釋清,自行研究吧,這裡只講個入門大概。

-----------------------------------------------------------

能負載的上限是網卡數量,主機板插槽有限,所以能插的網路卡數量有限。

有那種1片抵4片用的專業網卡,就是一張卡有4個網孔,各有獨立晶片。但不便宜,一張要2~4千元。

理論上,如果有一台主機有 5個插槽可用,加上那種4孔網卡,總共能到 20孔(20線)

20 WAN 的負載平衡機器,一台市面要多少錢呢?-->肯定6位數以上

用低價 PC + Linux 自己 DIY,成本只需 1/10 不到,讚! y( ̄▽ ̄)y

這個就是學習 Linux 技術的價值,省錢!
自訂性高,用起來自由,想要什麼功能自己搭。

2011/7/3 1:44
應用擴展 工具箱
回覆: 伺服器, 兩條對外服務線路要如何設定, 請協助..
會員二級
註冊日期:
2008/9/12 11:40
所屬群組:
已註冊使用者
等級: 6
HP : 0 / 145
MP : 21 / 5632
EXP: 82
離線
謝謝.
照您的方法測試過了, 我目前並無內部的 LAN 對外的問題..
可是下了 ip 指令後, 還是無法從外部 PING 到 default route 以外
的網卡上的實體 ip .

不知道是那裡設錯了..

2011/7/3 12:25
應用擴展 工具箱
回覆: 伺服器, 兩條對外服務線路要如何設定, 請協助..
會員四級
註冊日期:
2008/11/20 21:32
所屬群組:
已註冊使用者
等級: 20
HP : 0 / 487
MP : 163 / 18572
EXP: 48
離線
那個範例不是「指令」哦
是「shell script 腳本」,要寫成一個檔案,一次性執行
而且不完整的,僅是提供參考

上面那個腳本範例,仔細一看,發覺少了幾行
沒有指定 rule 規則和路由表預設閘道
應該是沒有效果的...

-----------------------------------------------

因為我的腳本都是模組化的,很難從中抽出幾行就有效果
又懶得去抓關鍵處,有些腳本已經寫好幾年,早忘了原理...

提供樓主完整的 shell script 吧

檔案這裡可下載:http://www.box.net/shared/k5gky2g5b52e1yysfi06

zip 壓縮的,解開後得到 mroute.sh 腳本檔

賦予可執行權限
sudo chmod +x mroute.sh

執行方法:
sudo ./mroute.sh

sudo /路徑/mroute.sh


腳本內容如下:
(因為貼論壇,格式會亂掉,建議直接下原始檔來用)

#!/bin/sh

## "#" 號之後的內容為註解, 執行時不會有作用

# =============================================================
# 雙 WAN 線路分流,路由規則 script v1.0
# 環境:基本三片網卡,對外線路1 (EXT)、對外線路2 (EXT2) 、對內 (LAN)
# 功能:雙 WAN 多重路由自動設定
# 測試可運作環境為 CentOS,其它 distro 不掛保證
# 建議檔名:mroute.sh,權限:700,擁有者:root:root
# 建議存放位置:/usr/local/bin,並將其寫入 /etc/rc.local 以便一開機即執行
# ============================================================

# 使用說明:
# 1.預設使用 table 100、200,請確定這兩個 RPDB 表沒有使用到
# 2.此 script 不會自動撥接,若使用 ppp 連線,請確定執行此 script 前,已經設定好 rp-pppoe 服務


# 版本演進:
# v1.0 基本版


# ==========================================
# 變數設定區
# ==========================================
# 您必須設定相關變數的值,這個 script 才會生效

# 線路一
# EXT1_TYPE=線路型態,可用的兩個選項 (小寫):static (固定 IP)、ppp (撥接取得)
# EXT1_IF=代表線路的網卡介面,若為 ppp,則為 ppp0....
# EXT1_IP=線路的 IP,若為 ppp,則會自動取得,此處省略
# EXT1_GW=線路的閘道 IP,若為 PPP,則會自動取得,此處省略
# EXT1_WEIGHT=線路權重,指該線路的使用量比率,數字愈高使用愈頻繁
EXT1_TYPE="static"
EXT1_IF="eth0"
EXT1_IP="11.22.33.44"
EXT1_GW="11.22.33.44"
EXT1_WEIGHT="1"

# 線路二
EXT2_TYPE="static"
EXT2_IF="eth1"
EXT2_IP="55.66.77.88"
EXT2_GW="55.66.77.88"
EXT2_WEIGHT="1"


# =================================================
# 程式區
# =================================================
# 以下至檔尾為止,為指令稿的運作程式碼, 如果對於 shell script 不太熟悉, 建議您不要隨意更動

# 如果線路其中之一,是 ppp 連線
[ "$EXT1_TYPE" = "ppp" ] && PPP="1"
[ "$EXT2_TYPE" = "ppp" ] && PPP="1"

# 檢查是否有 ppp 連線,若無,程式結束 (例外錯誤)
if [ "$PPP" = "1" ]; then
if ! ip address ls | grep ppp > /dev/null; then
echo "ppp0 is down!"
exit 1
fi
fi

# 雙 WAN 的路由 table 分別使用 100、200
for i in 100 200 ; do
# 轉換區域變數
if [ "$i" = "100" ]; then
TYPE="$EXT1_TYPE"
IP="$EXT1_IP"
GW="$EXT1_GW"
else
TYPE="$EXT2_TYPE"
IP="$EXT2_IP"
GW="$EXT2_GW"
fi

# 判斷線路型態,依照型態執行專屬程式區段
if [ "$TYPE" = "static" ]; then
# 清除 table,以避免重複執行時,顯示錯誤
ip rule del from $IP table $i 2>/dev/null
ip route del table $i 2>/dev/null
# 設定固定 IP 線路的相關 rule 與 table
ip route replace default via $GW table $i
ip rule add from $IP table $i
# 重新定義閘道,給稍後設定多重路由時使用
[ "$i" = "100" ] && EXT1_GW_S="$GW"
[ "$i" = "200" ] && EXT2_GW_S="$GW"
else
# 因為 ppp 每次取得的 IP 或閘道,可能都不相同,所以必須用程式判斷
# 秀出目前 route 表,用 awk 搜尋含有 ppp0.src 的字串,取第 1、9 個字串
ppp0_gw=`ip route ls | awk '/ppp0.*src/ {print $1}'`
ppp0_ip=`ip route ls | awk '/ppp0.*src/ {print $9}'`

# 清除 table,以避免重複執行時,顯示錯誤
ip rule del from $ppp0_ip table $i 2>/dev/null
ip route del table $i 2>/dev/null
# 設定 ppp 線路的相關 rule 與 table
ip route replace default via $ppp0_gw table $i
ip rule add from $ppp0_ip table $i
# 重新定義閘道,給稍後設定多重路由時使用
[ "$i" = "100" ] && EXT1_GW_S="$ppp0_gw"
[ "$i" = "200" ] && EXT2_GW_S="$ppp0_gw"
fi
done


# 設定預設閘道,多重路由關鍵
ip route replace default \
nexthop via $EXT1_GW_S dev $EXT1_IF weight $EXT1_WEIGHT \
nexthop via $EXT2_GW_S dev $EXT2_IF weight $EXT2_WEIGHT


# 清除路由快取,使設定立刻生效
ip route flush cache

# 顯示設定完成之訊息
echo
echo "Multiple Routing set OK!"
echo



說明:

1.
此腳本必須 修改變數區,才能使用!
都有詳細中文註解,若不知道怎麼填,請參考註解說明。

2.
請注意線路(網卡)的 IP 和 GW(GateWay 閘道器IP)是不一樣的。勿填錯。

用指令 ip route ls (可能要加 sudo)可以看線路的 IP 和 GW

例如:
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.253
---> 這是指 eth0 的 ip 為 192.168.0.253

default via 192.168.0.254 dev eth0
---> defalut via 就是閘道的意思,此處 eth0 閘道ip 為 192.168.0.254

3.
若網卡是 DHCP 自動取得,且每次取得的 IP 和閘道都一樣
在腳本的變數區那邊,TYPE 模式請設定 "static"。


補充說明:
4.
此腳本僅負責 iproute2 多重路由部份
LAN TO WAN 雙線,NAT 的部份,需要另外寫 iptables 腳本去負責

不過依照樓主的描述,只是要讓 WAN TO LAN 可以雙線,應該用不到 NAT。

2011/7/3 18:26
應用擴展 工具箱
回覆: 伺服器, 兩條對外服務線路要如何設定, 請協助..
版主
註冊日期:
2008/7/14 0:03
來自 螢幕的另一端
所屬群組:
網站管理員
已註冊使用者
討論區管理群
等級: 33
HP : 0 / 800
MP : 500 / 31366
EXP: 3
離線
yanis 寫到:
謝謝...
首先, 兩條線都是固定 IP , 且在每次 DHCP 後都會取得同樣的 IP.
但 default route 部份會很奇怪, 因為取得的 IP 在同一群, 也就是說.
兩條線都會同一個 route ip 出去, 但是實際測試上只一條線能對外服務..
例:
eth0: 8.1.1.100/24 (先)
eth1: 8.1.1.200/24 (後)
default route 8.1.1.254

此時我用 ssh 連 eth1 的 8.1.1.200 可以動作.
而在 eth0 的 8.1.1.100 確連 ping 都 ping 不到..

因為主要是做 SERVER 用, 所以是對外服務, 希望從 eth1 來的封包,
同樣從 eth1 回去, 而 eth0 來的封包從 eth0 回去, 不知是否可行.



你的路由概念沒有錯,就是哪張網卡進來的就要讓它從原來的那張網卡回去

首先跟你確認一件事,就是你兩張網卡的 gateway 確定都是 8.1.1.254 嗎?
若是的話,執行以下的指令,你的兩個真實 IP 就都可以從外面連進去了
(當然你得改回你自己的真實IP,不要照貼上去了都不改,然後再來跟我說不行)

ip rule add pref 10 from 8.1.1.100 table 10
ip route replace default via 8.1.1.254 dev eth0 table 10

ip rule add pref 20 from 8.1.1.200 table 20
ip route replace default via 8.1.1.254 dev eth1 table 20

這條指令只在此次開始時有效,重開機又沒有了,所以待你測試沒問題之後,就把以上的指令,弄成開機自動執行吧。

2011/7/3 22:27
應用擴展 工具箱
回覆: 伺服器, 兩條對外服務線路要如何設定, 請協助..
會員二級
註冊日期:
2008/9/12 11:40
所屬群組:
已註冊使用者
等級: 6
HP : 0 / 145
MP : 21 / 5632
EXP: 82
離線
感謝兩位輩..
後來依夢見草前輩的方法是可行的.
將執行的狀況報告一下.

環境是 ubuntu 10.4 64bit
目前我的介面是 eth1 , eth2 而 default route 被抓在 eth1
當我下指令時
ip rule add pref 10 from 8.1.1.100 table 10
ip route replace default via 8.1.1.254 dev eth1 table 10

這裡系統回應這行
Error: either "to" is duplicate, or "8.1.1.254" is a garbage.

我不管他, 繼續下完指令.
ip rule add pref 20 from 8.1.1.200 table 20
ip route replace default via 8.1.1.254 dev eth2 table 20

系統並未回應任何訊息..

但我已經可以由外部 ping 到 eth1 , eth2 的 ip 了.
試了 port 22 , 80 均可成功.

同樣的情況, 我將環境搬到 centos 下頭, 在下指令的過程中, 並不會有任何訊
息產生, 且同樣的兩線均可動作.

2011/7/5 21:53
應用擴展 工具箱
回覆: 伺服器, 兩條對外服務線路要如何設定, 請協助..
站長
註冊日期:
2005/6/10 9:50
來自 Taichung, Taiwan.
所屬群組:
網站管理員
已註冊使用者
等級: 19
HP : 0 / 451
MP : 140 / 21774
EXP: 7
離線
此討論串已收錄為精華文章。

2011/7/7 13:33
應用擴展 工具箱

(1) 2 »

 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.