Linux中建立GRE通道(GRE Tunnel)的方法 (GRE Tunnel HOWTO) 奇科電腦技術小秘訣 主題:GRE VPN Tunnel 相信大家在現今的企業中,需要虛擬私人網路(Virtual Private Network, VPN)的機會越來越高了,但是VPN的設備價格這麼高昂,常常會讓企業望之卻步,今天奇科電腦就讓大家用最省錢的方式,建構您專屬的虛擬私人網路(Virtual Private Network, VPN)。 在Linux環境中,其實我們可以透過很簡單的方式來建立兩端的VPN Tunnel,我們今天採用GRE Tunnel,對GRE有興趣的同學可以看一下下面的連結噢。 GRE:Generic Routing Encapsulation (GRE) 讓我們來一下GRE的header 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |C|R|K|S|s|Recur| Flags | Ver | Protocol Type | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum (optional) | Offset (optional) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Key (optional) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sequence Number (optional) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Routing (optional) +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Read more: http://www.faqs.org/rfcs/rfc1701.html#ixzz0dJsiK4ag
我們分別來看看每個欄位在做什麼的 Flags :欄位大小2個bytes,以bit來做定義後續欄位(從bit 0 ~ bit 15)。 Protocol type:欄位大小2個bytes,定義通訊協定類型,一般來說,會定義為Ethernet protocol。 Checksum:欄位大小2個bytes,包含GRE checksum,用來檢查GRE的表頭及payload。 Offset:欄位大小2個bytes,主要是用來做來源路由(Source route)用。 Key:欄位大小4個bytes,用來認證封包是否來自信任端(4個數字)。 Sequence number:欄位大小4個bytes,包含了32個bits整數,於封裝時插入。 Routing:欄位大小4個bytes,包含要繞送(routing)時需要的資訊。 實作環境~ 作業系統:Linux 核心(kernel)版本:2.6.31 目標:讓Site A與Site B可以透過GRE Tunnel以Private IP來做溝通。 網路架構如下圖(subnet mask均是255.255.255.0) ---- ---- ---- ---- | A |----|B |---網際網路---|C |-----|D | ---- ---- ---- ---- Site甲 Site乙 Site 甲 A : IP 192.168.0.1 netmask 255.255.255.0 Gateway 192.168.0.254 B : 有兩個NIC 是路由器的角色 內部NIC IP 192.168.0.254 netmask 255.255.255.0 外部NIC IP 211.72.195.1 netmask 255.255.255.0 Site 乙 C : 有兩個NIC 是路由器的角色 內部NIC IP 192.168.2.254 netmask 255.255.255.0 外部NIC IP 61.202.178.1 netmask 255.255.255.0 D:IP 192.168.2.1 netmask 255.255.255.0 Gateway 192.168.2.254 讓我們先來設定Site 甲的部分 # ip tunnel add site_a_to_site_b mode gre remote 61.202.178.1 local 211.72.195.1 新增一個Tunnel的介面叫做site_a_to_site_b,封裝模式採用GRE #ip addr add 192.168.0.2 dev site_a_to_site_b 為這個新增的介面指定一個內部IP #ifconfig site_a_to_site_b up 啟用這個Tunnel介面,沒有啟用的話,沒有辦法做下一步驟噢 #ip route add 192.168.2.0/24 dev site_a_to_site_b 指定要往site B內部網路的封包從site_a_to_site_b這個介面繞送出去 再來就是Site 乙啦,指令說明請比對Site 甲的部分囉 #ip tunnel add site_b_to_site_a mode gre remote 211.72.195.1 local 61.202.178.1 #ip addr add 192.168.0.2 dev site_b_to_site_a #ifconfig site_b_to_site_a up #ip route add 192.168.0.0/24 dev site_b_to_site_a 後記,由於GRE的表頭共有20個bytes,所以在新增的Tunnel的介面上MTU會被調整成如下 Site_a_to_site_b Link encap:UNSPEC HWaddr 3B-78-03-5F-00-00-20-00-00-00-00-00-00-00-00-00 inet addr:192.168.0.2 P-t-P:192.168.0.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MTU:1476 Metric:1