奇科電腦技術小秘訣 主題: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:
我們分別來看看每個欄位在做什麼的
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
转: