謝安室 撰寫於文章 <3YPgGQ$7Oa@bbs.kimo.com.tw>...
>
>一個有關Linux Router的問題我一直解不開,目前我的環境如下圖所示:
>
>    Server 10.0.0.189        Linux Router               Client 10.1.0.1
>    ------------            ------------------          ------------
>   |            |           |                |          |           |
>   |            |           |                |          |           |
>   |            |           |                |          |           |
>   |            |           |                |          |           |
>   |            |           | eth0      eth1 |          |           |
>    ------------            ------------------          ------------
>          |           10.0.0.1 |          | 10.1.0.1          |
>          ---------------------+          +--------------------
>                      10.2.0.1              所有的Mask都是255.255.0.0
>
>左邊網段上有 10.0.0.0 和 10.2.0.0 兩組Network ID,在Router的eth0上有
10.0.0.1
>和 10.2.0.1 兩個IP做為Gateway IP,網段上有一台Web Server,IP為 10.0.0.189
>;右邊網段Network ID為 10.1.0.0,有一部Client 10.1.0.186
>假定 10.0.0.0 是Private IP的網段,其他的網段都是Legal IP,Client 10.1.0.186
>要存取 10.2.0.189 這台Server,可是實際上並沒有這部機器,我們想要用Private的
>Server 10.0.0.189 來回應,所以在Router上要做類似NAT的轉換. 先前我們有用
>ipmasqadm mfw的方式做port mapping,在Client機器上存取 10.1.0.1:80 會對應到
>10.0.0.189:80,可是如果Destination IP沒有在Router上就不能運作. 根據Cisco
>的文件說明它們可以做到我們的需求,不知道Linux能不能做到,這也是我們想突破的地
方!

不是很明白“可是如果Destination IP沒有在Router上就不能運作”這句話的意思。如
果您說不能將請求轉遞給網路中其它的主機的話﹐那可能是 ipchains 的設定問題了。

我猜您的意思是說﹕您有 10.1.0.1(eth0)這個地址﹐然後再建立一個虛擬地址為
10.2.0.189(eth0:0)﹐另外的一張網路卡為 10.0.0.1(eth1)﹐它和 10.0.0.189 在同
一個網路中。當 client 10.1.0.186 用 www 連接 10.2.0.189 的時候﹐請求會轉給
10.0.0.189 這台主機作答。

如果這樣的話﹐您首先要確定 ipchains 的 input 和 output 在 eth0 上面 ACCEPT
10.1.0.186 傳給 10.2.0.189 和 10.0.0.189 的請求和回復﹔eth1上面 ACCEPT
10.1.0.186 傳給 10.0.0.189 的請求和回復。然後確定 forward 能夠 MASQ
10.1.0.186 給 10.0.0.189 請求和回復。
最後﹐用 ipmasqadm portfw 將 10.2.0.189 轉給 10.0.0.189 。

命令格式為﹕
ipchains -A input -p $PROTO -j ACCEPT -i $IF -b -s $HOST/32 www -d
10.1.0.186/24
ipchains -A output -p $PROTO -j ACCEPT -i eth1 -b -s 10.0.0.189/32 www -d
10.1.0.186/24
ipchains -A forward -p $PROTO -j MASQ -b -s 10.0.0.189/32 www -d
10.1.0.186/24
ipmasqadm portfw -a -P tcp -L 10.2.0.189 80 -R 10.0.0.189 80

其中$PROTO 有兩個(tcp/udp)﹐ $IF 有兩個(eth0/eth1)﹐$HOST 也有兩個
 10.2.0.189/10.0.0.189)﹐那麼第一行僅就 www 而言就演變為最少 8 行﹗(當然﹐如
果您會寫 script 的話﹐可以用 loop function來簡化的)。


如果要看其它範例﹐可以到 http://go.to/study-area 之“學習 Linux”裡面的“使
用IP偽裝和 NAT”參考一下﹐您也可以到 http://www.tsmservices.com/masq/ 了解更
多的信息。