Ya <ya_iobbc@gcn.net.tw> wrote in message
news:39DBE12C.7F1EE69F@gcn.net.tw...
>
>
> "網中人" 寫道:
>
> > Ya <ya_iobbc@gcn.net.tw> wrote in message
> > news:39DA99DF.5190A42C@gcn.net.tw...
> > > 哇! 終於要到 ADSL router (CISCO)的 routing table 了:

[ 略... ]

> >
> > 第一筆它會直接用 arp 透過 eth0 找 211.20.29.36 這個網路下面的所有 host

> > MAC 地址﹐然後將封包送到結果目標去。
> > 第二筆則會用 arp 只找 gw 211.20.29.34 這個 MAC 然把封包丟給它就不管了。
之後
> > 的路由交由 gw 自己決定。
> >
>
> 喔! 依我這個 case 來看, 第二種效率會比較好耶!

如果您目前的 case 不變的話﹐您必須要用第二種方式來制定 gw ﹐那麼外面的封包才
能送達 DMZ 去。如果從效能方面著眼﹐反而會更慢﹐因為要經過多一道路由手續。因
為您目前的 DMZ 只接到 NAT 的其中一個界面去了﹐如果您將連線接到 ADSL 同一個
HUB 去的話﹐就可以用第一個方式﹐而且會快點(盡管我們人類或許感覺不到)﹐因為
MAC 一但已經在 ARP table 中﹐在逾期前﹐都無需進行 ARP 廣播。

然而﹐您另篇問過可否用 ipchains 為 DMZ 做封包過濾。如果以目前的結構來說﹐同
時在 ADSL 上面用 gw 指定好到 DMZ 的路由的話﹐那麼 NAT 才能發揮到功能。如果直
接將線接到 ADSL 那個 HUB﹐同時用第一筆路由設定﹐那麼 NAT 就無法修改 ADSL 和
DMZ 的封包了。

綜合這樣的分析﹐以弟愚見﹐Song 兄(註﹕S為大寫﹐別誤會為 hinet news 上另一位
廣告發信者 :) 的 arp proxy 方案是最佳的(對了﹐我們說了這麼久﹐您到底有看過
Song 兄的文章嗎﹖)。他的辦法除了能多出 IP 和無需改 ADSL 之外﹐還有很重要的一
點是﹐還可以為 DMZ 提供防禦能力﹐只要封包要經過 NAT 的路由﹐就可以做到。假如
不利用 proxy arp﹐也沒做切割(保留 29 bit mask)﹐也不做 IP Aliase﹐那麼全部 5
個 IP 都應該直接接到 ADSL 的 HUB 去才能完全被利用上。這時候﹐ NAT 除了能保護
自己外﹐其他 IP 除非自己跑 firewall﹐否則就完全暴露出來了。(這點 Song 兄之前
似乎沒有指出來)。

雖然我還沒時間實作出來﹐在 IP 的利用、安全角度、設計彈性、和服務開發等考量之
下﹐下面幾個 29bit mask ADSL 方案中﹐arp proxy 應該是最好的﹕
1) 直接連 HUB﹐
2) IP Alias+NAT
3) 切割+routing(+NAT)
4) ARP Proxu(+NAT)


> >
>
> 請教一下 : arp 是什麼意思呢? 有沒有相關網路資訊, 說明 arp 呢?

哦﹐那現看看下面文章吧﹕
http://ccns.ncku.edu.tw/study-area/network/network_arp.htm

之後再看看這篇﹕
http://ccns.ncku.edu.tw/study-area/tips/iproute.htm

而 Song 兄的原文及 Joestar 兄的討論如下﹕

Song  wrote in message news:3cQacZ$50C@bbs.cynix.com.tw...
> ●這篇文章主要是要寫,在 ADSL 架構下的 DMZ 劃分的規劃。
>   主要是在這 2 個重點之下:
>
>   1.  不需修改 ADSL Router 的 Routing Table。
>   2.  在一般只有 5 個可用 IP 的 ADSL,讓 DMZ 有 4 個可用 IP。
>
> ●網路架構示意圖:
>              Internet        ◎ eth0, eth1, eth2 均為 Linux Router 之介
面。
>         ┌───┴───┐      eth0 203.xx.oo.82/29    # 沒錯,你沒看錯!
>         │ ADSL  Router │      eth1 203.xx.oo.82/29    # eth0 與 eth1 一
樣!
>         └───┬───┘      eth2 192.168.1.254/24
>   203.xx.oo.81  │eth0
>         ┌───┴───┐eth1  ┌───────┐
>         │ Linux Router ├───┤  Switch/HUB  │
>         └───┬───┘      └┬─┬─┬─┬┘
>                 │eth2          ┌┴  ┴  ┴  ┴┐
>         ┌───┴───┐        83  84  85  86
>         │  Switch/HUB  │      └ DMZ ── DMZ ┘
>         └┬┬┬┬┬┬┬┘
>       ┌  ┴  ┴  ┴  ┴  ┐ ◎ 假設取得的 IP 是 203.xx.oo.80/29
>           Private network       Private 的 IP 是 192.168.1.0/24
>       └  ─  ─  ─  ─  ┘
>
> ● 常用參數設定:
>     ADSL_net="203.xx.oo.80"         PRI_bct="192.168.1.255"
>     ADSL_gw="203.xx.oo.81"          LIN_IP="203.xx.oo.82"
>     ADSL_msk="255.255.255.248"      IP83="203.xx.oo.83"
>     ADSL_bct="203.xx.oo.87"         IP84="203.xx.oo.84"
>     PRI_IP="192.168.1.254"          IP85="203.xx.oo.85"
>     PRI_net="192.168.1.0"           IP86="203.xx.oo.86"
>     PRI_msk="255.255.255.0"         HOST_msk="255.255.255.255"
>
> ● Linux Router 的 ethernet card 設定:
>     /sbin/ifconfig eth0 ${LIN_IP} broadcast ${ADSL_bct} netmask
${ADSL_msk}
>     /sbin/ifconfig eth1 ${LIN_IP} broadcast ${ADSL_bct} netmask
${ADSL_msk}
>     /sbin/ifconfig eth2 ${PRI_IP} broadcast ${PRI_bct}  netmask ${PRI_msk}
>
> ● Linux Router 的 Routing 設定:
>     eth0:   route add -net  ${ADSL_net} netmask ${ADSL_msk} eth0
>     eth1:   route add -host ${IP83} eth1
>             route add -host ${IP84} eth1
>             route add -host ${IP85} eth1
>             route add -host ${IP86} eth1
>     eth2:   route add -net  ${PRI_net}  netmask ${PRI_msk}  eth2
>
> default gw  route add default gw ${ADSL_gw} netmask 0.0.0.0 metric 1
>
> ● ARP 欺騙:
>     在 Linux Router 上執行 ifconfig 取得主機 eth0 之 hw_addr ...
> Linux:~# ifconfig
> eth0      Link encap:Ethernet  HWaddr 00:80:C5:11:5V:DA
>           inet addr:.....
>
>     取得後執行 ...
>     arp -s 203.xx.oo.83 00:80:C5:11:5V:DA pub
>     arp -s 203.xx.oo.84 00:80:C5:11:5V:DA pub
>     arp -s 203.xx.oo.85 00:80:C5:11:5V:DA pub
>     arp -s 203.xx.oo.86 00:80:C5:11:5V:DA pub
>
>     如此可讓 ADSL Router 的 ARP cache 建立起 DMZ 內主機的 IP<->hw_addr
>     ARP Table。
>
> ● 總結:
>     這個規劃的重點就是,利用 ARP 欺騙的手法,讓 ADSL Router 將 DMZ 內
>     主機的封包,往 Linux Router 的 eth0 遞送。當封包到達後,再依據
>     Linux Router 的 Routing Table 判斷後往 eth1 丟出,而到達目標。如此
>     達到無須更改 ADSL Router 的 Routing Table 而切分出 DMZ 的規劃。
>
>     再則,利用 -host 的方式設定 Linux Router 上的 routing,及將 2 塊網卡
>     設定為共用一個 IP 的方式,得到最大的 IP 利用率。


~~~~~~

> > ※ 引述《Joestar.bbs@cis.nctu.edu.tw ( )》之銘言:
> > > 兩張網路界面用同一個ip,然後用 proxy arp,就好像是一般的 dial-in RAS
server
> >     是了,弟有聽過小州兄提到 ARP Proxy 這詞兒,但不知這就是 ARP Proxy,
> >     還自創「ARP 欺騙」一詞,承教了。
>
> 呵呵..我也錯了,是arp proxy 而不是proxy arp...真是汗顏
>
> > > 一樣. 如eth0 和 ppp0用同一個ip是沒有問題的. 至於兩張網卡bind同一個ip,
> > > 小弟剛看到時也心存懷疑. 試了一下,初步發現linux 可以兩張網卡bind同一個
ip.
> > > 可是solaris和win2k就不行.
> > > 昨天按照Song兄的方式用了solaris實作一次,可以成功,可是有點複雜,似乎沒有

> > > Song兄的方法那麼好用.最主要在用arp -s 建立static arp entry的時候有問題
> > > 因為solaris的arp 並沒有辦法指某arp entry對應到某張網卡. 所以有點小麻煩
.
> > > 要用route 指令幫忙.
> >     Linux 可以兩張網卡 bind 同一個 ip,所以她的 arp -s 可以直接指定 eth*
> >     Solaris 不行,所以她的 arp -s 也不能對應到網卡,搭配的剛剛好 :)
> >     請教 Joestar 兄,如何用 route 來作到?
> >     謝謝。
>
>           external network
>                 |
>         [ADSL Router]
>                 |
>                 |----------------[hostb]
>                 |
>            nei0 |
>         [Solaris]-nei1--[hostA]
>
>
>
> ADSL Subnet ID- 10.113.1.232
> ADSL Internal Interface-  10.113.1.233
> Solaris eth0- 10.113.1.235 MAC address-- mac1
>         eth1- 10.113.1.236 MAC address-- mac2
> HostA - 10.113.1.234 MAC address--mac3
>
> HostB - 10.113.1.238
> 剛開機時solaris box的routing table如下
> Routing Table:
>   Destination           Gateway           Flags  Ref   Use   Interface
> -------------------- -------------------- ----- ----- ------ ---------
> 10.113.1.232         10.113.1.235          U        3     33  nei0
> 10.113.1.232         10.113.1.236          U        2     59  nei1
> 224.0.0.0            10.113.1.235          U        3      0  nei0
> default              10.113.1.233          UG       0   2315
> 127.0.0.1            127.0.0.1             UH       0      6  lo0
>
> arp cache如下
> Net to Media Table: IPv4
> Device   IP Address               Mask      Flags   Phys Addr
> ------ -------------------- --------------- ----- ---------------
> nei0   10.113.1.235         255.255.255.255 SP    mac1
> nei1   10.113.1.236         255.255.255.255 SP    mac2
> dnet0  BASE-ADDRESS.MCAST.NET 240.0.0.0     SM    01:00:5e:00:00:00
>
> 當時我設定步驟如下
> route delete 10.113.1.232 10.113.1.236 將第二筆的routing entry去掉
> route add 10.113.1.234 10.113.1.236 -interface 指定到HostA由 nei1出去
>
>
> 此時 Routing table 如下
> Routing Table:
>   Destination           Gateway           Flags  Ref   Use   Interface
> -------------------- -------------------- ----- ----- ------ ---------
> 10.113.1.234         10.113.1.236          U        3     33  nei1
> 10.113.1.232         10.113.1.235          U        2     59  nei0
> 224.0.0.0            10.113.1.235          U        3      0  nei0
> default              10.113.1.233          UG       0   2315
> 127.0.0.1            127.0.0.1             UH       0      6  lo0
>
> ok. 用ping和snoop (類似tcpdump) 看看,確定是由nei1出去
> check arp cache
>
> arp cache如下
> Net to Media Table: IPv4
> Device   IP Address               Mask      Flags   Phys Addr
> ------ -------------------- --------------- ----- ---------------
> nei0   10.113.1.235         255.255.255.255 SP    mac1
> nei1   10.113.1.236         255.255.255.255 SP    mac2
> nei1   10.113.1.234         255.255.255.255       mac3
> dnet0  BASE-ADDRESS.MCAST.NET 240.0.0.0     SM    01:00:5e:00:00:00
>
> 沒錯,多了一筆 10.113.1.234 <-> mac3
> 此時我所要做的就是將10.113.1.234 <-> mac1指定給nei0,由nei0來回應來自該網卡
所連接
> 的ethernet,所有要求10.113.1.234 所對應mac address的arp request.
>
> 首先用arp -s 10.113.1.234 mac1 試試看
>
> arp cache如下
>
> Net to Media Table: IPv4
> Device   IP Address               Mask      Flags   Phys Addr
> ------ -------------------- --------------- ----- ---------------
> nei0   10.113.1.235         255.255.255.255 SP    mac1
> nei1   10.113.1.236         255.255.255.255 SP    mac2
> **nei1   10.113.1.234       255.255.255.255 S     mac1
> dnet0  BASE-ADDRESS.MCAST.NET 240.0.0.0     SM    01:00:5e:00:00:00
>
> ok, static arp entry已經建立了,ㄟ..為什麼會是由nei1 負責回答要求
10.113.1.234
> 的arp request呢?? ping 一下 10.113.1.234,果然不會通,
> 因為hostA的mac address應該是mac3而不是mac1
> 因為沒有加 pub參數,所以只是單純的static entry,而不會回應要求 10.113.1.234
> mac address的arp request
>
> 輸入
> arp -s 10.113.1.234 mac1 pub
>
> 突然hostA出現ip衝突的警示視窗,沒錯,果然是由nei1負責回答.
> 突然想起以前要讓某台電腦不能上網時,也是用這樣的方式加上cron job
> 擾亂ethernet上的所有電腦的arp cache table.
>
> 所以我碰到的問題就是,如何指定 10.113.1.234 <-> mac1 這筆記錄由nei0負責回答
> 而 10.113.1.234 <-> mac3 由 nei1負責呢??
> 因為nei1跟HostA是在同一個ethernet,所以10.113.1.234 <-> mac3 static arp
entry
> 不需要手動設定
>
> man 過來,man 過去,查了手冊,上網找資料.花了一個多小時,也沒做出來.
> 突然就想到如果將 到 hostA的連線,先指定由nei0負責,在手動增加 static arp
entry,
> 不曉得會怎樣
> 於是
>
> route delete 10.113.1.234 10.113.1.236
> route add 10.113.1.234 10.113.1.235 -interface.
>
> ping 10.113.1.234 .沒錯,不會通,因為 hostA是與 nei1連在一起,而不是nei0
>
> 再手動建立10.113.1.234 <-> mac1的static arp entry.
> arp -s 10.113.1.234 mac1 pub
>
> Bingo!!!
>
> Net to Media Table: IPv4
> Device   IP Address               Mask      Flags   Phys Addr
> ------ -------------------- --------------- ----- ---------------
> nei0   10.113.1.235         255.255.255.255 SP    mac1
> nei1   10.113.1.236         255.255.255.255 SP    mac2
> nei0   10.113.1.234         255.255.255.255 SP    mac1
> dnet0  BASE-ADDRESS.MCAST.NET 240.0.0.0     SM    01:00:5e:00:00:00
>
> 再重新更改routing table
>
> route delete 10.113.1.234 10.113.1.235
> route add 10.113.1.234 10.113.1.236 -interface.
>
> 找一台外部機器ping(不是hostB)一下,果然通了...
> 可是用hostB去ping hostA,或hostA去ping hostB卻不通..
> 為什麼呢??? 想想看吧...:)
>
>
> PS. 手邊剛好沒機器,所以就?當時記憶,如果有筆誤,煩請高手指正