謝安室 撰寫於文章 <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/
了解更
多的信息。