## 8.4 特殊狀況:路由器兩邊界面是同一個 IP 網段: ARP Proxy
如果你一開始設計的網絡環境就是同一個 Class C 的網域,例如 192.168.1.0/24 , 后來因為某些因素必須要將某些主機搬到比較內部的環境中,例如[圖 8.2-1](#fig8.2-1)的 clientlinxu, winxp, win7。 然后又因為某些因素,所以你不能變更這些計算機的 IP,此時你的同一網域就會橫跨在一個路由器的左右兩邊了! 舉例來說,聯機圖示有點像底下這樣:

圖 8.4-1、在路由器兩個界面兩邊的 IP 是在同一個網域的設定情況
初次見面~看到眼睛快要掉下來哩!怎么路由器的兩邊的主機 IP 設定都在同一個網域內?而且還被規定不能夠更改原先的 IP 設定, ...真是一個頭兩個大啊~如此一來,在 Linux Router 兩邊要如何制作路由啊?好問題!真是好問題~ 因為 OSI 第三層網絡層的路由是一條一條去設定比對的,所以如果兩塊網卡上面都是同一個網域的 IP 時, 就會發生錯誤。那如何處理啊?
我們先從兩方面來說,第一個,當從正確的網段 (PC1) 要聯機到 PC2~PC4 時,他應該是要透過 Linux Router 那部主機的對外 IP (192.168.1.100) 才行!而且 Linux Router 還必須要讓該封包透過內部 IP (192.168.1.200) 聯機到 PC2~PC4 。 此時,封包傳遞的圖示有點像這樣:

圖 8.4-2、正常的網段想要傳送到內部計算機去的封包流向
在這個階段,我們可以設定PC2~PC4 的 IP 所對應的網卡卡號 (MAC) 都設定在 router 的對外網卡上, 因此, router 的對外接口可以將給 PC2~PC4 的封包給『騙』過來。接下來,就簡單的透過路由設定,讓封包轉個接口發送出去即可。 這樣 PC1 --> PC2 的問題解決了,但是 PC2 怎么傳送到 PC1 呢?我們可以透過底下的圖示來想象一下:

圖 8.4-3、內部計算機想要傳送到正常網域時的封包流向
當 PC2 要傳送的封包是給 PC3, PC4 的,那么這個封包得要能夠直接傳遞。但是如果需要傳送到正常網域的封包,就得要透過 router 的對內網卡,再透過路由規則來將該封包導向外部接口來傳遞才行!這個時候就變成內部的接口欺騙 PC2 說, PC1 與 Router A 的 IP 是在內部這張接口上就是了,然后再透過路由判斷將該封包透過外部接口來對外傳遞出去即可。 假設 Linux router 的對外界面為 eth0 而對內為 eth1 時,我們可以這樣說:
1. 當 Linux Router 的 eth0 那個網域主機想要連接到 PC2~PC4 的主機時,由 Linux Router 負責接收;
2. 當 Linux Router 要傳送數據到 PC2~PC4 時,務必要由 eth1 來傳送;
3. 當內部計算機想要連接到 PC1 或 Router A 時,由 Linux router 的 eth1 負責接收;
4. 當 Linux Router 要傳送的數據為 192.168.1.0/24 ,但并非 PC2~PC4 時,需由 eth0 傳送。
上列的步驟與圖示內的線條上的順序相符合呦!得要對照著看看。其中的 (1) 與 (3) 就是透過 ARP Proxy (代理) 的功能啦! 那啥是 ARP Proxy 呢?簡單的說,就是讓我的某張適配卡的 MAC 代理其他主機的 IP 對應,讓想要連接到這個 IP 的 MAC 封包由我幫他接下來的意思。舉我們圖 8.4-1 的例子來說,就是在 Linux Router 的 eth0 界面上,規定 192.168.1.10, 192.168.1.20, 192.168.1.30 這三個 IP 都對應到 eth0 的 MAC 上,所以三個 IP 的封包就會由 eth0 代為收下,因此才叫做 ARP 代理人嘛!所以啦,每一部在 eth0 那端的主機都會『誤判』那三個 IP 是 Linux Router 所擁有,這樣就能夠讓封包傳給 Linux Router 啦!
再接下來,咱們的 Linux Router 必須要額外指定路由,設定情況為:
* 若目標是 PC2 ~ PC4 時,該路由必須要由內部的 eth1 發送出去才行,
* 若目標不為 PC2 ~ PC4 ,且目標在 192.168.1.0/24 的網域時,需由 eth0 發送出去才行。
也就是說,你必須要指定路由規則當中,那個 PC2~PC4 具有優先選擇權,然后其他的同網域封包才由 eth0 來傳送。 這樣就能夠達成我們所想要的結局啦!^_^!看樣子似乎很難,其實設定方面還挺簡單的,你可以透過 arp 以及 route 這兩個指令來達成喔!
* 外部接口 eth0:08:00:27:71:85:BD
* 內部接口 eth1:08:00:27:2A:30:14
```
# 1\. 先設定外部 eth0 的 ARP Proxy,讓三個 IP 對應到自己的 MAC
[root@www ~]# arp -i eth0 -s 192.168.1.10 08:00:27:71:85:BD pub
[root@www ~]# arp -i eth0 -s 192.168.1.20 08:00:27:71:85:BD pub
[root@www ~]# arp -i eth0 -s 192.168.1.30 08:00:27:71:85:BD pub
[root@www ~]# arp -n
Address HWtype HWaddress Flags Mask Iface
192.168.1.30 * * MP eth0
192.168.1.10 * * MP eth0
192.168.1.20 * * MP eth0
# 首先需要讓外部接口擁有三個 IP 的操控權,透過這三個指令來建立 ARP 對應!
# 2\. 開始處理路由,增加 PC2~PC4 的單機路由經過內部的 eth1 來傳遞
[root@www ~]# route add -host 192.168.1.10 eth1
[root@www ~]# route add -host 192.168.1.20 eth1
[root@www ~]# route add -host 192.168.1.30 eth1
[root@www ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.20 0.0.0.0 255.255.255.255 UH 0 0 0 eth1
192.168.1.10 0.0.0.0 255.255.255.255 UH 0 0 0 eth1
192.168.1.30 0.0.0.0 255.255.255.255 UH 0 0 0 eth1
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth0
# 這樣就處理好單向的單機路由啰!不過有個問題啊!那就是 192.168.1.0/24
# 的網域,兩個接口都可以傳送!因此,等一下第四個步驟得要將 eth1 刪除才行!
3\. 設定一下內部的 ARP Proxy 工作 (綁在 eth1 上頭啰)!
[root@www ~]# arp -i eth1 -s 192.168.1.101 08:00:27:2A:30:14 pub
[root@www ~]# arp -i eth1 -s 192.168.1.254 08:00:27:2A:30:14 pub
# 這樣可以騙過 PC2 ~ PC4 ,讓這三部主機傳遞的封包可以透過 router 來傳遞!
4\. 開始清除掉 eth1 的 192.168.1.0/24 路由
[root@www ~]# route del -net 192.168.1.0 netmask 255.255.255.0 eth1
```
所有的計算機都在同一個網域內,因此 default gatway 都是 192.168.1.254 ,而 netmask 都是 255.255.255.0, 只有 IP 不一樣而已。最后,所有的計算機都可以直接跟對方聯機,也能夠順利的連上 Internet ! 這樣的設定就能夠滿足上述的功能需求啰!如果一切都沒有問題,那么將上述的指令寫成一個腳本檔, 例如 /root/bin/network.sh ,然后將該檔案設定為可執行,并將它寫入 /etc/rc.d/rc.local , 同時每次重新啟動網絡后,就得要重新執行一次該腳本,即可達到你的需求啰!
透過這個案例你也可以清楚的知道,能不能聯機其實與路由的關系才大哩! 而路由是雙向的,你必須要考慮到這個封包如何回來的問題喔!
* * *
- 鳥哥的Linux私房菜:服務器架設篇 第三版
- 第一部份:架站前的進修專區
- 作者序
- 第一章、架設服務器前的準備工作
- 1.1 前言: Linux 有啥功能
- 1.2 基本架設服務器流程
- 1.3 自我評估是否已經具有架站的能力
- 1.4 本章習題
- 第二章、基礎網絡概念
- 2.1 網絡是個什么玩意兒
- 2.2 TCP/IP 的鏈結層相關協議
- 2.3 TCP/IP 的網絡層相關封包與數據
- 2.4 TCP/IP 的傳輸層相關封包與數據
- 2.5 連上 Internet 前的準備事項
- 2.6 重點回顧:
- 2.7 本章習題
- 2.8 參考數據與延伸閱讀
- 第三章、局域網絡架構簡介
- 3.1 局域網絡的聯機
- 3.2 本書使用的內部聯機網絡參數與通訊協議
- 第四章、連上 Internet
- 4.1 Linux 連上 Internet 前的注意事項
- 4.2 連上 Internet 的設定方法
- 4.3 無線網絡--以筆記本電腦為例
- 4.4 常見問題說明
- 4.5 重點回顧
- 4.6 本章習題
- 4.7 參考數據與延伸閱讀
- 第五章、 Linux 常用網絡指令
- 5.1 網絡參數設定使用的指令
- 5.2 網絡偵錯與觀察指令
- 5.3 遠程聯機指令與實時通訊軟件
- 5.4 文字接口網頁瀏覽
- 5.5 封包擷取功能
- 5.6 重點回顧
- 5.7 本章習題
- 5.8 參考數據與延伸閱讀
- 第六章、 Linux 網絡偵錯
- 6.1 無法聯機原因分析
- 6.2 處理流程
- 6.3 本章習題
- 6.4 參考數據與延伸閱讀
- 第二部分:主機的簡易資安防護措施
- 第七章、網絡安全與主機基本防護:限制端口, 網絡升級與 SELinux
- 7.1 網絡封包聯機進入主機的流程
- 7.2 網絡自動升級軟件
- 7.3 限制聯機埠口 (port)
- 7.4 SELinux 管理原則
- 7.5 被攻擊后的主機修復工作
- 7.6 重點回顧
- 7.7 課后練習
- 7.8 參考數據與延伸閱讀
- 第八章、路由觀念與路由器設定
- 8.1 路由
- 8.2 路由器架設
- 8.3 動態路由器架設:quagga (zebra + ripd)
- 8.4 特殊狀況:路由器兩邊界面是同一個 IP 網段: ARP Proxy
- 8.5 重點回顧
- 8.6 本章習題
- 8.7 參考數據與延伸閱讀
- 第九章、防火墻與 NAT 服務器
- 9.1 認識防火墻
- 9.2 TCP Wrappers
- 9.3 Linux 的封包過濾軟件:iptables
- 9.4 單機防火墻的一個實例
- 9.5 NAT 服務器的設定
- 9.6 重點回顧
- 9.7 本章習題
- 9.8 參考數據與延伸閱讀
- 第十章、申請合法的主機名
- 10.1 為何需要主機名
- 10.2 注冊一個合法的主機名
- 10.3 重點回顧
- 10.4 本章習題
- 10.5 參考數據與延伸閱讀
- 第三部分:局域網絡內常見的服務器架設
- 第十一章、遠程聯機服務器SSH / XDMCP / VNC / RDP
- 11.1 遠程聯機服務器
- 11.2 文字接口聯機服務器: SSH 服務器
- 11.3 最原始圖形接口: Xdmcp 服務的啟用
- 11.4 華麗的圖形接口: VNC 服務器
- 11.5 仿真的遠程桌面系統: XRDP 服務器
- 11.6 SSH 服務器的進階應用
- 11.7 重點回顧
- 11.8 本章習題
- 11.9 參考數據與延伸閱讀
- 第十二章、網絡參數控管者: DHCP 服務器
- 12.1 DHCP 運作的原理
- 12.2 DHCP 服務器端的設定
- 12.3 DHCP 客戶端的設定
- 12.4 DHCP 服務器端進階觀察與使用
- 12.5 重點回顧
- 12.6 本章習題
- 12.7 參考數據與延伸閱讀
- 第十三章、文件服務器之一:NFS 服務器
- 13.1 NFS 的由來與其功能
- 13.2 NFS Server 端的設定
- 13.3 NFS 客戶端的設定
- 13.4 案例演練
- 13.5 重點回顧
- 13.6 本章習題
- 13.7 參考數據與延伸閱讀
- 第十四章、賬號控管: NIS 服務器
- 14.1 NIS 的由來與功能
- 14.2 NIS Server 端的設定
- 14.3 NIS Client 端的設定
- 14.4 NIS 搭配 NFS 的設定在叢集計算機上的應用
- 14.5 重點回顧
- 14.6 本章習題
- 14.7 參考數據與延伸閱讀
- 第十五章、時間服務器: NTP 服務器
- 15.1 關于時區與網絡校時的通訊協議
- 15.2 NTP 服務器的安裝與設定
- 15.3 客戶端的時間更新方式
- 15.4 重點回顧
- 15.5 本章習題
- 15.6 參考數據與延伸閱讀
- 第十六章、文件服務器之二: SAMBA 服務器
- 16.1 什么是 SAMBA
- 16.2 SAMBA 服務器的基礎設定
- 16.3 Samba 客戶端軟件功能
- 16.4 以 PDC 服務器提供賬號管理
- 16.5 服務器簡單維護與管理
- 16.6 重點回顧
- 16.7 本章習題
- 16.8 參考數據與延伸閱讀
- 第十七章、區網控制者: Proxy 服務器
- 17.1 什么是代理服務器 (Proxy)
- 17.2 Proxy 服務器的基礎設定
- 17.3 客戶端的使用與測試
- 17.4 服務器的其他應用設定
- 17.5 重點回顧
- 17.6 本章習題
- 17.7 參考數據與延伸閱讀
- 第十八章、網絡驅動器裝置: iSCSI 服務器
- 18.1 網絡文件系統還是網絡驅動器
- 18.2 iSCSI target 的設定
- 18.3 iSCSI initiator 的設定
- 18.4 重點回顧
- 18.5 本章習題
- 18.6 參考數據與延伸閱讀
- 第四部分:常見因特網服務器架設
- 第十九章、主機名控制者: DNS 服務器
- 19.1 什么是 DNS
- 19.2 Client 端的設定
- 19.3 DNS 服務器的軟件、種類與 cache only DNS 服務器設定
- 19.4 DNS 服務器的詳細設定
- 19.5 協同工作的 DNS: Slave DNS 及子域授權設定
- 19.6 DNS 服務器的進階設定
- 19.7 重點回顧
- 19.8 本章習題
- 19.9 參考數據與延伸閱讀
- 第二十章、WWW 伺服器
- 20.1 WWW 的簡史、資源以及伺服器軟體
- 20.2 WWW (LAMP) 伺服器基本設定
- 20.3 Apache 伺服器的進階設定
- 20.4 登錄檔分析以及 PHP 強化模組
- 20.5 建立連線加密網站 (https) 及防砍站腳本
- 20.6 重點回顧
- 20.7 本章習題
- 20.8 參考資料與延伸閱讀
- 第二十一章、文件服務器之三: FTP 服務器
- 21.1 FTP 的數據鏈路原理
- 21.2 vsftpd 服務器基礎設定
- 21.3 客戶端的圖形接口 FTP 聯機軟件
- 21.4 讓 vsftpd 增加 SSL 的加密功能
- 21.5 重點回顧
- 21.6 本章習題
- 21.7 參考數據與延伸閱讀
- 第二十二章、郵件服務器: Postfix
- 22.1 郵件服務器的功能與運作原理
- 22.2 MTA 服務器: Postfix 基礎設定
- 22.3 MRA 服務器: dovecot 設定
- 22.4 MUA 軟件:客戶端的收發信軟件
- 22.5 郵件服務器的進階設定
- 22.6 重點回顧
- 22.7 本章習題
- 22.8 參考數據與延伸閱讀