利用Wildcard來過濾單數/偶數IP條件

在R/S,S/P Lab中常常會問到類似的問題"only accept EVEN network"或是"only allow IP address forth octet number is ODD number"。這樣的問題事實上就是要考驗考生們對於wildcard的應用是否清楚。

一般來說wildcard最常使用於routing process中的network command或是access-list中來表示一個範圍。比方說:


Router(config)#router ospf 1
Router(config-router)#network 10.1.1.0 0.0.0.255 area 0


像這樣的指令就是要求在這個router上所有active interface所使用的ip address只要屬於10.1.1.0/255.255.255.0(10.1.1.0~10.1.1.255)的範圍內就會成為ospf interface主動發送hello packet去進行neighbor discovery(224.0.0.5/224.0.0.6)。

Wildcard的定義剛好跟Mask的位元相反,所以我們也稱Wildcard是Invert Mask。這些是我們對於Wildcard常用的使用方式,就是直接將network mask轉換,將mask中的0變1,1變0。

但是wildcard的使用並非僅止於此,因為wildcard的正式定義是:
  • 當wildcard 32 bits中的第一個位元為0時,代表所有符合條件的ip/network 32bits中第一個位元必須跟設定條件中的ip/network 32bits中的第一個位元一模一樣;
  • 當wildcard 32 bits中的第一個位元為1時,代表忽略所有符合條件的ip/network 32bits中第一個位元,不論是0或是1。


因此我們來看一下,如何利用wildcard來過濾奇數(odd)的IP:
假設我們要允許192.168.1.0/24這個網段中所有奇數的IP,符合的條件可以看得出來前面三個十進位數字都必定相同,而最後一個數字則是1,3,5..,255。當我們把這些符合條件數字轉換成二進位時:

1100 0000.1010 1000.0000 0001.0000 0001(192.168.1.1)
1100 0000.1010 1000.0000 0001.0000 0011(192.168.1.3)
1100 0000.1010 1000.0000 0001.0000 0101(192.168.1.5)
...
1100 0000.1010 1000.0000 0001.1111 1111(192.168.1.255)


所以我們知道這些數字的共同處,最後一個位元永遠都是1,倒數第二個到第八個位元則會有0 or 1的組合出現,因此我們可以設定一行這樣的ACL來允許所有的奇數(odd) IP:

access-list 1 permit 192.168.1.1 0.0.0.254


以上這個ACL的條件是前面三個十進位數字都必須相同,第四個十進位數字為1(Binary:0000 0001),Wildcard第四個十進位數字為254(Binary:1111 1110),這個意思就是IP第四個數字只有最後一個位元必須是1,IP第四個數字其餘的位元可以是0 or 1,這樣的組合就可以只允許奇數(odd)的IP。

同理可證,如果今天我們要允許192.168.1.0/24中所有的偶數(even) IP,可以這樣設定:

access-list 1 permit 192.168.1.0 0.0.0.254


這樣的意思就是IP第四個數字只有最後一個位元必須是0,IP第四個數字其餘的位元可以是0 or 1。

Comments

Popular posts from this blog

TCP/IP 明確擁塞通知 (ECN)

L2TPv3 Enables Layer 2 Services for IP Networks

Q-in-Q(Dot1Q Tunnel) Sample Configuration