Linux網絡——一種強制門戶技術

概述

強制門戶技術是一種位於網關上的功能,lan側用戶訪問外網,強制先進行網關認證,認證經過,才能夠訪問外網。最近研究了一下這種技術,並在項目中實現,用於用戶的web快速登錄web

強制門戶原理

我認爲強制門戶技術的核心是重定向,重定向的方法有多種,好比基於MAC或IP的重定向、DNS重定向、HTTP重定向、WPAD等等,固然重定向的做用範圍遠不止強制門戶技術。不管是何種重定向,本質上是利用通訊協議的機制和規則,實現特定數據流的轉發瀏覽器

我使用的是DNS重定向和HTTP重定向結合的方案,經過DNS重定向,將lan側用戶的外網訪問請求指定到網關管理地址,網關HTTP進程接收特定的HTTP請求後,返回特定的重定向報文,lan側客戶端瀏覽器以重定向報文中指定的URL再次發起請求,以此將用戶強制到網關的登錄頁面。整個通訊過程以下圖服務器

clipboard.png

詳細過程

這裏有幾個前提:dom

  1. 用戶設備上網方式是DHCP獲取地址,或者手動設置靜態地址但必須設置DNS地址爲網關地址,總之用戶設備必須知道DNS服務器位於網關上
  2. 用戶瀏覽器設置了默認主頁,或者用戶手動輸入任意域名,而非ip地址

基於這樣的前提,會有如下的幾個過程:tcp

  • 當用戶手動打開瀏覽器時,瀏覽器會無條件去訪問默認主頁,假如爲www.hao123.com,可是主頁是一個域名(domain name)而非一個ip地址,瀏覽器不知道主頁www.hao123.com的ip地址是多少,沒法與該域名所在服務器創建tcp鏈接,因此須要經過DNS協議向DNS服務器查詢域名對應的的ip
  • 因爲用戶設備上預先已經存在DNS服務器的地址,而且該地址是網關地址,用戶設備會以www.hao123.com封裝DNS query報文發往網關上的DNS Proxy進程。網關上的DNS Proxy進程查詢當前wan側鏈接狀況,若是未鏈接,則封裝一個ip地址爲本機地址的DNS answer報文回覆給用戶
  • 瀏覽器收到DNS answer報文後,便以此報文中的ip地址,向該地址發起tcp鏈接,並在鏈接創建以後,發起HTTP HEAD或GET請求,通常URL爲空,或者爲/wpad.dat,這個特殊URL是WPAD協議規定,該協議還未研究,只是PC機固定會發該URL
  • 網關上HTTP Server接收到該(/wpad.dat)特殊請求後,以狀態碼爲301或307,Location爲登陸頁面的URL封裝HTTP應答報文,告訴瀏覽器將請求重定向到以Location指定的URL
  • 瀏覽器以該Location爲URL再次封裝HTTP GET報文,請求該頁面,完成強制登錄
相關文章
相關標籤/搜索