前言
最近在工作中遇到 VPN 的相關問題,之前一直對 VPN 的原理存在一些疑惑,借此機會學習一下 VPN 的原理以及進行實作驗證。
由于 VPN 在不同系統下的實作方式不同,為了便于學習和了解,這裡我們選擇
Linux
環境,我本地測試環境使用的是
Ubuntu 18.04 x64
。
本文從 TUN/TAP 出發,逐漸了解 VPN 中的技術細節;并結合 simpletun 源碼,進行 VPN 的原理驗證。
VPN是什麼
VPN 全稱為虛拟私人網絡(Virtual Private Network),常用于連接配接中、大型企業或團體間私人網絡的通訊方法,利用隧道協定(Tunneling Protocol)來達到發送端認證、消息保密與準确性等功能。
比如多地辦公的公司,可以使用 VPN 将不同地區連接配接在同一内網下;或者在家辦公的時候也可以通過 VPN 接入公司内網中。
VPN 以 CS 架構運作,工作流程如下:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAnYldHL0FWby9mZvwFN4ETMfdHLkVGepZ2XtxSZ6l2clJ3LcV2Zh1Wa9M3clN2byBXLzN3btgHL9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsQTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5CNzUTO0EjN0MDOkZjNzQGNzYzX5AzMwkTM3EzLcBTMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
1.VPN工作流程
在外網的使用者可以使用
vpn client
連接配接組織搭建的
vpn server
以建立通信隧道,随後便建立了虛拟的私人網絡,處于外網的
worker
和内網中的
server
可以互相通信。
那麼我們可以簡單了解 VPN,由
VPN client
捕獲使用者發出的封包,封裝封包後通過實體網絡通信鍊路将封包發給
VPN server
,
VPN server
接收到封包後進行解包,再将其轉發給實際的目标,反之同理; VPN 在邏輯層面建構了虛拟網絡。
https://paper.seebug.org/1648/
https://baijiahao.baidu.com/s?id=1637664009162027887&wfr=spider&for=pc