歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 使用iproute2配置force-onlink路由

使用iproute2配置force-onlink路由

日期:2017/2/28 15:47:42   编辑:Linux教程

有時候在系統上配置一個32位掩碼的IP地址是不錯的,這樣一來可以使系統路由表瘦身,二來可以防止顯式路由之外的主機和本系統通信。這個怎麼說呢?通過配置一個32位掩碼的IP地址,就會發現在路由表的main表中,少了該地址的直連路由,因為它是32位的,本身不表征不攜帶任何網絡,在路由表的local表中,少了該地址表征的網段的廣播路由,因為它不表征任何網段,因此除非你顯式地配置一條路由,否則該地址應該可以被看作是孤立的了。

在單網卡機器上,如果配置eth0的地址為192.168.40.249/32,那麼別指望用常規的方式添加任何路由,這是因為鏈路層直連路由已經不存在了,我們如下的嘗試:

route add -net 192.168.0.0/16 gw 192.168.40.254

將失敗,因為網關地址並不和本地地址同在任何一個網段,那麼如何是好呢?Linux的iproute2工具包提供了一個onlink參數,可以滿足這樣的要求:

ip route add 172.16.0.0/16 via 192.168.40.254 dev eth0 onlink

之所以要指明dev參數是因為沒有鏈路層直連路由,因而協議棧根本不知道從哪個網卡發出數據包,必須顯式指明才可以,最後的一個onlink參數表明強制此網關是“在鏈路上”的(雖然並沒有鏈路層路由)。除了路由之外的所有訪問都將以“路由不可達”這種錯誤而告終。

按照上述的配置,即使你訪問192.168.40.0/24網段的,也會失敗,因為192.168.40.249/32和誰都不在一個網段。那麼onlink能表達什麼呢?onlink的意義在於協議棧雖然找不到鏈路層直連路由,但是還是會發布針對via網關的arp請求的,僅此而已。如此一來,這種網絡通信顯得更加純粹些。僅僅就是為了通信,不會因為通信本身而造出一個IP網段來。

Copyright © Linux教程網 All Rights Reserved