小州 <kenduest.bbs@bbs.cynix.com.tw> wrote in message
news:3bb572$545@bbs.cynix.com.tw...
> ※ 引述《jason517@bbs.openfind.com.tw (瘋中之瓜)》之銘言:
> > >  欲連結的主機在軍事區內 ,那使用 ipmasqadm 提供某個 port
> > >  進行 forward 就可以了。要不然您就把要連結的主機搬到非軍事區
> > >  區域,那就不需要額外的設定了。
> > 可是我照做了還是不行說~~~~
> > ipmasqadm portfw -a -P tcp -L web_IP 2222 -R real_ip 3333
> > 請問我該如何做才能將網頁中的超連結forward到內部的網站~~~謝謝!!
>
>   首先,您的這台 web_ip 主機本身提供 IP MASQ 服務嗎?簡單說,就是
>   real_ip 這台主機是使用 web_ip 主機的 NAT 服務可以連上 internet 。
>
>   簡單說,就是外面的使用者,可以使用 http://web_ip:2222 連結到
>   您 real_ip 這台內部主機的 port:3333 。
>
>   而這裡要補充說明的就是,您在 web 這台主機上,無法直接使用
>   web_ip:2222 連上 real_ip:3333 ,這個需要在非 web 主機內的
>   區域網路測試,要在其他非該區域網域內測試才會成功。
>
>   另外或者是您到 http://freshmeat.net 抓相關的 proxy 代理程式,
>   常駐 listen web_ip port 2222 ,然後指定讓他連結到 real_ip port
>   3333 ,這樣子也是可以的 。

看來這篇討論對 NAT 的架設來說是頗具代表性的﹐不如和大家討論一下吧。

首先﹐原發問者的架構是﹕
在 NAT 上建一個 WEB 伺服器﹐其中有 link 指到內部的私有 IP 去。

這裡有一個問題是﹕如果沒有安裝 ipmasqadm 的話﹐所有來自外部的查詢﹐
是無法到達私有 IP 去。所以﹐那樣的 link 是不工作的。

根據這樣的推斷﹐我們或許會很順理成章的使用 ipmasqadm 來進行 port fw ﹐
以滿足私有 IP 回應外部查詢的要求。

這完全是可行的。但問題又來了﹕
假如我們將外部 IP A 的 port 80 (正常的 WEB 請求) 轉到私有 IP B 的 port 80
 去﹐
那麼﹐原本架於 NAT 的 WEB 伺服器的正常請求也一並被轉遞了。
換句話說﹐原本的 NAT 的 WEB 服務將失效。既然這樣﹐我們也無從看到
那個含有 link 的網頁﹐那﹐我們又如何讓外面連起﹖

至此﹐我們或許可以干脆將整個 NAT 的 WEB 搬進私有 IP 去﹐用 ipmasqadm
進行 IP A:80 對 IP B:80 的對應。照想是沒問題了吧﹖

但﹐請再想想﹕假如在這個 IP B 上有一個 link 指向私有 IP C 去。
這時候將會發生什麼樣的狀況呢﹖

首先﹐我們必須明白﹕在使用 HTTP 標準 port 80 的情況下﹐不管 IP B 或 IP C﹐
經過 ipmasqadm 之後﹐從外部看來﹐都只有一個﹕IP A﹗

Okay﹐有這點認識之後﹐我們不難發覺﹐就算我們用一個 link 從 IP B 指到 IP C
 去﹐
從外面連接的話﹐還會是連接到 IP A 去。既然我們已經將 IP A 轉遞向 IP B 了﹐
那麼﹐這個連接﹐還是被導引到 IP B 去﹐IP C 還是無法到達。

這樣說其實還是非常表面的﹐事實上﹐在 IP B 上面指向 IP C 的 link ﹐
根本上就無法從外面辨識得到。因為它們都是使用私有 IP﹐路由首先就過不了。
這還沒牽涉到 DNS 的解釋呢。

明白了﹖

當我們明白到這原理之後﹐我們不難發現﹕用 link 的方式來指向私有 IP 的辦法﹐
其實並不可取。它只能工作於真實 IP 上面。

或者﹐您又會想﹕用另一個有別於80的跑 port 來做 link 的 portfw ﹐
但這需要非常慎密的設計。其牽涉的已經不是簡單的 URL 定址的問題了﹐
除了 routing 和 DNS 外﹐NAT的設計也異常複雜。
任何微小的疏忽﹐也會讓您通盤計劃付諸東流。

最後我們發現原發問者﹐已經改變其設計﹕用 NAT 轉址到另一個真實的 IP 去﹕
> > ipmasqadm portfw -a -P tcp -L web_IP 2222 -R real_ip 3333

這裡﹐我不禁有一個疑問﹕既然是用 real_ip﹐有必要再多此一舉嗎﹖
只要 routing 通了﹐直接 link 就可以了吧﹖關鍵點是﹕routing 而已。

我記得上星期也討論過 NAT 的 rouging 問題﹐也就是﹕NAT 上面的界面﹐
如果有多張網路路卡使用相同 subnet 的話﹐將會是一個問題。
這裡我不打算再討論這個了﹐有興趣的話翻翻前面的文章吧。題目是﹕
"Re: 請問要在NAT內部(private network)架設server...."