參考網址:http://linux.vbird.org/linux_server/0230router.php
路由就像交通一樣, 設計良好的交通系統,可以讓我們迅速地到達世界各地,
而錯誤的交通則會讓我們塞車,甚至迷路以至於無法到達目的地,
因此在網路功能強大的Linux Server當中,正確的路由設計是相當重要的。
路由最大的功能就是在幫我們規劃網路封包的傳遞方式與方向。
至於路由的觀察則可以使用 route 這個指令來查閱與設定。
每一部主機都有自己的路由表, 也就是說,
你必須要透過你自己的路由表來傳遞你主機的封包到下一個路由器上頭。
若傳送出去後,該封包就得要透過下一個路由器的路由表來傳送了,
此時與你自己主機的路由表就沒有關係。
這邊來解釋一下幾個上面重要的英文名詞:
因此路由表就是我們的交通指南,Destination就像我們旅途中的目的地,Gateway就像中途的轉運站,
Genmask決定了更清楚的目的地,Iface則是我們搭乘的交通工具,
而預設路由就是我們出門時預定會先前往的地方(如火車站或機場)。
路由表是由小網域排列到大網域, 例如上面的路由表當中,
路由是由『 192.168.1.0/24 --> 169.254.0.0/16 --> 0.0.0.0/0 (預設路由) 』來排列的。
(如果這邊還是不太了解可以回顧一下四年級的網概課本或上網找一下相關資料,資源很多的。)
使用 route 這個指令時,最重要的一個概念是:
『你所規劃的路由必須要是你的裝置 (如 eth0) 或 IP 可以直接溝通 (broadcast) 的情況』
除了上面這兩種可以直接使用指令的方法來增加路由規則之外, 還有一種透過路由器與路由器之間的協商以達成動態路由的環境, 不過,那就需要額外的軟體支援了。
如果你的這部主機需要連接多個網域,但該設備卻無法提供安裝更多的網卡時,
你只好勉為其難的使用 IP Alias 來提供不同網段的連線服務了。
不過,你需要知道的是:所有的 IP Alias 都是由實體網卡模擬來的,所以當要啟動 eth0:0 時,
eth0 必須要先被啟動才行。而當 eth0 被關閉後,所以 eth0:n 的模擬網卡將同時也被關閉。
舉例來說,你可以透過底下這個方法來建立一個虛擬裝置的設定檔案:
只要 ifcfg-eth0 這個實體網卡的設定檔中,ONBOOT為yes時,開機就會將全部的eth0:n都啟動。
可不可以利用兩張網卡, 利用兩個相同網域的 IP 來增加我這部主機的網路流量?
答案是不行,為什麼呢?我們來看一下以下的例子。
如果你有兩張網路卡時,假設:eth0 : 192.168.0.100 eth1 : 192.168.0.200
那你的路由規則會是如何呢?理論上會變成這樣:
當要主動發送封包到 192.168.0.0/24 的網域時,都只會透過第一條規則,也就是只透過 eth1 來傳出去!
(2)在回應封包方面,不管是由 eth0 還是由 eth1 進來的網路封包,都只會透過 eth1 來回傳。
一般來說,不應該設定同一的網段的不同 IP 在同一部主機上面。 例如上面的案例就是一個不好的示範。
路由器的主要功能就是:轉遞網路封包
路由器會分析來源端封包的 IP 表頭,在表頭內找出要送達的目標 IP 後,
透過路由器本身的路由表 (routing table) 來將這個封包向下一個目標 (next hop) 傳送。
如何達到路由器的功能呢?有以下二種方法:
觀察核心是否已經有啟動封包轉遞
讓該檔案的內容變成啟動值 1 最簡單的方是就是使用:『echo 1 > /proc/sys/net/ipv4/ip_forward』
不過,這個設定結果在下次重新開機後就會失效。因此,鳥哥建議您直接修改系統設定檔的內容,
那就是 /etc/sysctl.conf 來達成開機啟動封包轉遞的功能。
由於 Linux 路由器的路由表設定方法的不同,通常路由器規劃其路由的方式就有兩種:
NAT 本身就是一個路由器,只是 NAT 比路由器多了一個『 IP 轉譯』的功能。
如果兩個介面一邊是公共 IP (public IP) 但一邊是私有 IP (private IP) 呢?
由於私有 IP 不能直接與公共 IP 溝通其路由資訊,此時就得要額外的『 IP 轉譯』功能了。
所以說,當路由器兩端的網域分別是 Public 與 Private IP 時,才需要 NAT 的功能。
如果是超過數百部電腦的大型企業環境,由於他們的環境通常需要考慮如下的狀況
備註:這邊還滿重要的,老師有說會考圖
接下來的內容都會跟著下面的那張示意圖,可以拉出來至另一個分頁,方便觀看
假設在貴公司的網路環境當中,除了一般職員的工作用電腦是直接連接到對外的路由器來連結網際網路,
在內部其實還有一個部門需要較安全的獨立環境,因此這部份的網路規劃可能是這樣的情況
這家公司主要有兩個 class C 的網段,分別是:
其中 192.168.1.0/24 是用來做為一般員工連接網際網路用的, 至於192.168.100.0/24則是給特殊的部門用的。
workstation 代表的是一般員工的電腦,clientlinux 及 winxp, win7 則是特殊部門的工作用電腦,
Linux Router 則是這個特殊部門用來連接到公司內部網域的路由器。
在這樣的架構下,該特殊部門的封包就能夠與公司其他部門作實體的分隔了。
如果 clientlinux 想要連上 Internet,那麼他的連線情況會是如何?
注意Router A 必須要有兩個介面,一個是對外的 Public IP 一個則是對內的 Private IP,
因此 Router A 還需要額外增加 NAT 這個機制才行。
且透過最後的 ping 我們也知道 Linux Router 可以連上 Router A
以 Linux 作業系統為例,並且 clientlinux 僅有 eth0 一張網卡時,他的設定是這樣的:
最後一個動作有問題!怎麼會連 ping 都沒有辦法 ping 到 Router A 的 IP 呢?
表示我們的連線是有問題的!再從剛剛的回應連線需求流程來看一下吧!
簡單來說就是RouterA的路由表不夠完整,沒辦法將封包回送至獨立區域,
只好告知 Router A 當路由規則碰到 192.168.100.0/24 時,要將該封包傳 192.168.1.100 就是了。
在 Router A 增加一條路由規則
不過這個規則並不會寫入到設定檔,因此下次重新開機這個規則就不見了! 你應該要建立一個路由設定檔。由於這個路由是依附在 eth0 網卡上的,
所以設定檔的檔名應該要是 route-eth0。
接下來 ping 192.168.100.10 看看能不能有回應?
然後再到 clientlinux 上面去 ping 192.168.1.254 看看有沒有回應,你就知道設定成功了!
既然內部保護網路已經可以連上 Internet 了,那麼是否代表 clientlinux 可以直接與一般員工的網域,例如 workstation 進行連線呢?
不過回應連線竟然會偷偷透過 Router A 來幫忙,這是因為 workstation
與當初的 Router A 一樣,並不知道 192.168.100.0/24 在 192.168.1.100 裡面,
反正 Router A 已經知道了該網域在 Linux Router 內,就能正常回到 clientlinux。
如果是 Linux 的系統,就得在workstation底下添加設定如下:
透過這樣的設定方式,你也可以發現到一件事,那就是: 『路由是雙向的,你必須要瞭解出去的路由與回來時的規則』
不過這裡必須要提醒的是,如果你的 Linux Router 有設定防火牆的話,
而且還有設定類似 NAT 主機的 IP 偽裝技術,那可得特別留意,因為還可能會造成路由誤判的問題。
如果某天因為組織的再造導致需要重新規劃子網路網段,就只好再次的處理與檢查路由規則, 那能不能讓路由器自己學習新的路由,來達成自動增加該筆路由的資訊呢?
上述的功能就是所謂的動態路由。動態路由通常是用在路由器與路由器之間的溝通, 你必須要瞭解到對方路由器上面所提供的動態路由協定才行, 這樣兩部路由器才能夠透過該協定來溝通彼此的路由規則。
目前常見的動態路由協定有:RIPv1, RIPv2, OSPF, BGP 等。
常見的 Linux 上的動態路由套件為 quagga (zebra + ripd)
以下動態路由內容老師不考,有興趣的同學可參考以下網站。 http://linux.vbird.org/linux_server/0230router.php#dynamicroute