==> 在
gslin. 的文章中提到:
: 這句話是對的,在沒有設 static
route 或是用
ipfw 做 policy routing 時,都
: 會走 default gateway。
: > 所以 reply 時的 src IP Address 不一定等於人家 request 時的 dst IP Address
: > 這樣 connection 當然就建不起來了。
: 這句話是錯的,對方連到你的某個 ip,你就會用那個 ip 跟對方建立連線。
: > 解法最簡單的就是用
ipfw fwd。
: source ip 不是 kernel 幫你決定的,是 application 要自己用 bind() 決定,
: 只是你不指定的時候會用 default ip 連線而已。
: 假設現在有一台機器 (實際上也的確有這台機器) 同時有 TANet & HiNet 的 IP,
: 他的兩個 IP & Gateway 分別是:
: * 211.72.48.2 (Netmask: 255.255.255.248, Gateway: 211.72.48.1)
: HiNet's ADSL IP,同時他的 IP & Gateway 也是這台機器的 default IP &
: default Gateway。
: * 140.113.54.13 (Netmask: 255.255.255.0, Gateway: 140.113.54.254)
: TANet's IP。
: 我要連到
www.nctu.edu.tw &
www.google.com,在
ipfw 不設定的情況下,兩者
: 走的路線都是:
: (過去的 packets)
: 211.72.48.2 -> 211.72.48.1 -> ... (HiNet's Backbone) ... -> NCTU
: 211.72.48.2 -> 211.72.48.1 -> ... (HiNet's Backbone) ... -> Google
: (回來的 packets)
: NCTU -> ... (HiNet's Backbone) ... -> 211.72.48.1 -> 211.72.48.2
: Google -> ... (HiNet's Backbone) ... -> 211.72.48.1 -> 211.72.48.2
: 如果我在 connect() 前用 bind() 讓連線到
www.nctu.edu.tw 的 source IP 是
: 140.113.54.13,那麼:
: (過去的 packets)
: 140.113.54.13 -> 211.72.48.1 -> ... (HiNet's Backbone) ... -> NCTU
: 211.72.48.2 -> 211.72.48.1 -> ... (HiNet's Backbone) ... -> Google
: (回來的 packets)
: NCTU -> ... (交大校內 Backbone) ... -> 140.113.54.254 -> 140.113.54.13
: Google -> ... (HiNet's Backbone) ... -> 211.72.48.1 -> 211.72.48.2
: 回來的 path 是看 dst ip 所決定的,而回來的 dst ip 也就是出去的 source
: ip。而這件事情,不屬於 kernel 管的,是 application 管的,也就是說,你必
: 須修改 squid 的 source code,讓他決定要走 ADSL 線路的時候,source IP 變
: 成 HiNet 給你的 IP,這樣的話回來就會走 HiNet 的出國線路。
: 然後,另外一個問題在於,如果今天 HiNet 的 ADSL 斷掉了,因為你的 Default
: Gateway 設到 HiNet ADSL Gateway 去,所以你整個 proxy 就癱瘓了。
: 我們提到的
ipfw 就是在解決這個問題:送出去的封包依據 source IP 決定要怎
: 麼走。
: 所以在最理想的狀況下 (改 source code,同時加上
ipfw 的設定),會變成這樣:
: (過去)
: 140.113.54.13 -> 140.113.54.254 -> ... (交大校內 Backbone) ... -> NCTU
: 211.72.48.2 -> 211.72.48.1 -> ... (HiNet's Backbone) ... -> Google
: (回來)
: NCTU -> ... (交大校內 Backbone) ... -> 140.113.54.254 -> 140.113.54.13
: Google -> ... (HiNet's Backbone) ... -> 211.72.48.1 -> 211.72.48.2
: --
: * Gea-Suan Lin (public key:
http://infomath.nctu.edu.tw/~gslin/key.txt)
: * If you cannot convince them, confuse them. -- Harry S Truman
想請問一下,Squid的source code要改那裡?
方便講一下嗎?.... 先謝謝您的詳細解說。
有個想法可以改Freebsd的kernel source code,一次解決上述來、回封包的問題。
另外,照您的說法,用修改routing table是無法解決squid出去IP的問題囉!
--
★ 發信站: 白色情迷 (140.122.77.49) 來自: 163.20.163.72 [0m