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. 手邊剛好沒機器,所以就?當時記憶,如果有筆誤,煩請高手指正