一、路由功能介紹
當有主機需要在不同網段之間進行相互訪問時,此時就需要引入路由器來進行路徑選擇。以實現不同網段之間的互聯。
例如下圖中共有兩個不同的網段,分別是Network A(192.168.0.0/24)和Network B(192.168.1.0/24),這兩個網段是經由一部路由器(Server A)來進行互聯,下面來說明PC1傳送資料給PC2時,數據包的傳送過程:
步驟:
1. 當PC1有IP數據包要傳送時,主機會查閱ip數據包表頭的目標ip地址
2. PC1分析自己的路由表,當發現目標IP與本機IP的Net_ID相同,則PC1會參考本身的ARP記錄而直接利用MAC來傳送數據包;
3. 若目標IP與本機IP的Net_ID不相同,則PC1會分析路由表當中是否有符合的路由設定,如果沒有的話就直接將該數據包送到默認路由器上(本例爲Server A)
4. 當數據包送至Server A後,Server A分析數據包目標IP,後檢查自己的路由表。Server A 發現這個包的目標IP正好是Network B這個網段,因此Server A會接利用MAC來傳送數據包到PC2上。
二、rout命令介紹
[root@redflag ~]# route add/del [-net|-host] [網域或主機] netmask [mask] [gw|dev] 觀察的參數: -n :不使用通訊協議或主機名,直接使用IP或端口號(建議使用); -ee :使用更詳細的訊息來顯示 增加(add)與刪除(del)路由的相關參數: -net :表示後面接的路由爲一個網域; -host :表示後面接的爲連接到單部主機的路由; netmask :設置子網掩碼的大小; gw :設置網關 dev :指定使用那張網卡;
[root@redflag ~]# route [-nee]
範例一:
[root@redflag ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
0.0.0.0 192.168.10.30 0.0.0.0 UG 0 0 0 eth0
Destination、Genmask:分別表示network和netmask Gateway:該網域是與哪個網關連接,若顯示 Flags:代表意義如下: U (route is up):該路由是啓動的; H (target is a host):目標是一部主機 (IP) 而非網域; G (use gateway):需要透過外部的主機(gateway)來轉發數據包; R (reinstate route for dynamic routing):使用動態路由時,恢復路由訊息的標誌; D (dynamically installed by daemon or redirect):已經由服務或轉端口功能設定爲動態路由 M (modified from routing daemon or redirect):路由已經被修改了; ! (reject route):這個路由將不會被接受(用來抵擋不安全的網域) Iface:這個路由由該端口傳送。
說明:
此外,路由的順序是由小網域到大網域,最後是默認路由,所以說路由是有順序的。因此如果在路由表信息中有同一路由只是端口不同,是沒有意義的。
例如:
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
如果出現上面的情況,這時任何數據包均會由eth0傳送出去。
範例二:路由的增加與刪除
[root@redflag ~]# route del -net 192.168.0.0 netmask 255.255.0.0 dev eth0
# 在刪除的時候,需要將路由表上面出現的信息都寫上包括netmask、dev等
[root@redflag ~]# route add -net 192.168.100.0 netmask 255.255.255.0 dev eth0
# 注意,這個路由必須能夠與你互通,否則無法添加。
[root@redflag ~]# route add default gw 192.168.10.30
# 增加默認路由的方法,只要有一個默認路由就夠了
#最後改變路由信息後需要重啓網絡服務
三、靜態路由舉例
網絡環境:有兩個網域分別是192.168.0.0/24 及 192.168.10.0/24,Linux Router是內部路由而Route A是內外網連接路由,具體如下圖所示:
1.配置Linux Router
a. 配置eth0
- [root@redflag ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
- DEVICE=eth0
- BOOTPROTO=static
- BROADCAST=192.168.10.255
- IPADDR=192.168.10.254 //配置該IP後,自然就會有192.168.10.0這個網域的路由
- NETMASK=255.255.255.0
- NETWORK=192.168.10.0
- ONBOOT=yes
b.配置eth1
- [root@redflag ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth1
- DEVICE=eth1
- BOOTPROTO=static
- BROADCAST=192.168.0.255
- IPADDR=192.168.0.100
- NETMASK=255.255.255.0
- NETWORK=192.168.0.0
- GATEWAY=192.168.0.254 <==這個設置很重要
- ONBOOT=yes
c.啓動IP轉發
- [root@redflag ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
d.重啓網絡服務,並觀察路由
- [root@redflag ~]# /etc/init.d/network restart
- [root@redflag ~]# route -n
- Kernel IP routing table
- Destination Gateway Genmask Flags Metric Ref Use Iface
- 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
- 192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
- 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
- 0.0.0.0 192.168.0.254 0.0.0.0 UG 0 0 0 eth1
2.配置PC2
這裏假設PC2只有一張網卡,配置如下:
- [root@linux ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
- DEVICE=eth0
- BOOTPROTO=static
- BROADCAST=192.168.10.255
- IPADDR=192.168.10.20
- NETMASK=255.255.255.0
- NETWORK=192.168.10.0
- GATEWAY=192.168.10.254
- ONBOOT=yes
- [root@linux ~]# /etc/init.d/network restart
- [root@linux ~]# route -n
- Kernel IP routing table
- Destination Gateway Genmask Flags Metric Ref Use Iface
- 192.168.10.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
- 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
- 0.0.0.0 192.168.10.254 0.0.0.0 UG 0 0 0 eth0
3.配置Router A
經過上面兩步PC2已經可以連接上Internet了,但是當有數據包從Internet上回傳回來時,由於Route A沒有與192.168.10.0/24網域的路由規則,所以數據包會丟失。此時需要在Router A上額外加一條規則來處理
[root@linux ~]# route add -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.0.100
4.配置PC1
PC1的路由爲192.168.0.254,所以當PC1與PC2連通時,數據包將由:
PC1 --> Router A --> Linux Router --> PC2
其實PC1與PC2是都有連接到Linux Router上,所以可在PC1上加入一條路由規則實現PC1和PC2直接通過Linux router連接
[root@linux ~]# route add -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.0.100