About | NetLify | NeoCities | Project | TEST | 管理

<<基於 Apache 正向代理與 DNS 迴路技術之 SoftEther VPN 穿透方案研究>>

摘要 (Abstract)

本研究旨在解決企業嚴格防火牆環境下,SoftEther VPN 協定無法順利建立連線之問題。透過整合 Apache HTTP Server 的 mod_proxy_connect 模組,利用 HTTP Proxy Tunneling 技術建立傳輸通道。研究發現,SoftEther Client 的 Proxy 機制存在對 HTTPS 握手的限制,最終採用 Port 80 明文 HTTP 隧道配合高強度 Base64 驗證標頭,並結合 DNS Loopback (迴路) 技術,成功實現在單一公網 IP 下的 VPN 流量隱蔽與穿透,同時確保了內網服務的安全性。

1. 研究背景 (Background)

在現代網路架構中,SoftEther VPN 因其強大的多重協定支援與穿透性而被廣泛使用。然而,在某些受到嚴格監管的網路環境(如公司內網、校園網路或公共 Wi-Fi),防火牆通常僅開放標準網頁連接埠(Port 80/443),並對非標準 HTTPS 流量進行深度封包檢測 (DPI)。此外,現有伺服器架構通常已部署 Apache 或 Nginx 等 Web Server 佔用 Port 80/443,導致 VPN Server 無法直接監聽標準連接埠。

2. 研究動機與目的 (Motivation & Objective)

  • 動機:需在不更動現有 Apache (WAMP) 架構且不增加額外公網 IP 的前提下,讓外部客戶端能穿透防火牆連線至內網 VPN Server。
  • 目的:
    1. 驗證 Apache 作為 VPN 前置代理的可行性。
    2. 解決 SoftEther Client 在 Proxy 模式下的協定相容性問題。
    3. 設計一套無需維護實體密碼檔 (.htpasswd) 的安全驗證機制。

3. 研究方法與實驗過程 (Methodology)

本研究採用實驗法,分階段測試不同的代理架構,並針對失敗原因進行修正。

實驗階段 架構設計 測試結果 原因分析
階段一 反向代理 (Reverse Proxy)
Client -> Apache (443) -> VPN

失敗

(400 Bad Request)

SoftEther 原生協定非標準 HTTP,

Apache Layer 7 解析失敗。

階段二 正向代理 (HTTPS Proxy)
Connect Method over SSL

失敗

(無回應/斷線)

SoftEther Client 的 Proxy 設定僅支援發送明文 CONNECT 指令,

無法與 Apache 進行 SSL 握手。

階段三 正向代理 (HTTP Proxy) + DNS Loopback
Client -> Apache (80) -> Localhost (5555)
成功

改用 Port 80 傳輸 CONNECT 指令,

並透過 DNS 欺騙解決路由問題。

4. 研究結果與實作配置 (Results & Implementation)

最終採用「Apache HTTP 正向代理」搭配「Expression Header 驗證」之架構。此架構成功讓 VPN 流量偽裝成一般的 HTTP 代理請求。

4.1 環境參數

  • VPN Server Listen Port: TCP 5555
  • Apache Listen Port: TCP 80
  • 外部 DNS 設定: web-loc.proxyserver.com 解析至 127.0.0.1
  • 驗證機制: HTTP Basic Auth (Base64 Encoded Long String)

4.2 Apache VirtualHost 配置代碼

<VirtualHost *:80>
     # 定義伺服器名稱,對應外部 DNS 設定
     ServerName softether-proxy
     ServerAlias web-loc.proxyserver.com
     ServerAdmin root@proxyserver.com
     
     # 開啟正向代理功能 (Forward Proxy)
     ProxyRequests On
    
     # 安全性核心:限制 Proxy 使用權限
     <Proxy *>
        # 使用表達式引擎驗證 HTTP Header,避免維護 .htpasswd 實體檔案
        # 驗證字串為 Base64 編碼之 "帳號:密碼"
        Require expr %{HTTP:Proxy-Authorization} == 'Basic 9vbCB0byBlbmNvZGUgb3IgZGVjb2RlIHlvdXIgZGF0YS4='
     </Proxy>

     # 允許使用 CONNECT 方法連接到後端 VPN Port (5555)
     AllowCONNECT 5555
    
     # 優化連線逾時設定,防止 VPN 長時間連線中斷
     Timeout 5400
     ProxyTimeout 5400

     # Log 設定:關閉錯誤日誌以節省 I/O (視需求開啟)
     ErrorLog "nul"
     LogLevel crit
     CustomLog "|bin/rotatelogs.exe -l logs/softether-proxy-access-%Y-%m-%d-%H.log 3600" common 
</VirtualHost>

4.3 SoftEther Client 端設定

Destination Setting (目的地):

  • Host Name: web-loc.proxyserver.com (DNS 解析為 127.0.0.1)
  • Port: 5555

Proxy Setting (代理伺服器):

  • Type: HTTP Proxy
  • Host: proxyserver.com (Apache 公網位址)
  • Port: 80
  • Auth: 使用高強度密碼 (Base64 編碼前長度 > 60 chars)

5. 研究發現與討論 (Findings & Discussion)

  1. DNS Loopback 技術的關鍵作用: 傳統 Proxy 設定中,Client 若直接請求 127.0.0.1 容易造成混淆或被防火牆阻擋。本研究透過將 web-loc.proxyserver.com 指向 127.0.0.1,欺騙 Client 端發出合法的 Domain 請求,而 Apache 解析後實際連線至本機 Loopback,巧妙解決了路由與身分識別問題。
  2. SoftEther Client 的 Proxy 限制: 實驗證實 SoftEther Client 的 "HTTP Proxy" 功能不支援 SSL/TLS 握手。這意味著在 Proxy 層級必須使用 Port 80 (明文 HTTP)。雖然 Proxy 驗證資訊為明文,但透過極高複雜度的密碼字串 (High-Entropy Password) 可有效降低暴力破解風險。
  3. Apache 表達式驗證的優勢: 使用 Require expr %{HTTP:Proxy-Authorization} 取代傳統的 AuthUserFile,不僅減少了檔案 I/O,更避免了在系統中留下明文或雜湊密碼檔的資安風險,適合用於自動化部署環境。

6. 參考文獻 (References)

  • [1] Apache HTTP Server Project. "mod_proxy_connect - Apache HTTP Server Version 2.4."
  • [2] SoftEther VPN Project. "SoftEther VPN 4.0 Specification."
  • [3] Apache HTTP Server Project. "Expression parser in Apache HTTP Server 2.4."
  • [4] RFC 7231, "Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content", Section 4.3.6 (CONNECT).

Jplopsoft | THI | Netlify | NeoCities | LionFree

加密工具 | 提交歸檔 | QRCODE產生器 | 密碼產生器

アクセスカウンター