又到咗四年一度嘅世界杯,又係善用公司資源嘅時侯。
公司部電腦係唔可以裝 VPN,雖然 Firefox 有 Extension 可以用到 VPN,但平日都要連去日本用 AI,所以唔想攪到佢。咁就諗到個方法係用屋企部陳年 tablet 用 Wifi 連去公司機,再經 VPN 出去。
最初 Gemini 係推薦用 Gluetun + Squid,但睇文件見 Gluetun 有內置 proxy 就試下飛走 Squid 簡單啲,但係 Gluetun 內置 proxy 功能似乎唔夠全面,睇波係唔 work 的,所以都係要用返 Squid 先得。
比較奇怪係用唔到香港,唔知係公司問題定乜…
Important
以下內容由 AI 生成並以人手加以俢改
這個架構成功實現了:「內聯網電腦 ➔ 本地 Proxy (Gluetun/Squid) ➔ Gluetun VPN (Surfshark OpenVPN TCP) ➔ 成功繞過公司防火牆 ➔ 跨區互聯網」。
📁 1. 檔案與資料夾結構
請確保所有檔案都擺放喺同一個資料夾入面(例如 surfshark-squid/):
surfshark-squid/
├── .env # 存放敏感資料與動態國家設定
├── squid.conf # Squid Proxy 的權限設定
└── docker-compose.yml # Docker 容器編排設定檔
⚙️ 2. 設定檔內容
📝 ① .env (國家與帳號密碼設定檔)
將容易變動的國家名稱以及敏感的 VPN 帳號資料抽離到此檔案:
CONTAINER_SUFFIX=JP
HOST_PORT=0.0.0.0:3839
CONTAINER_PORT=3128
VPN_TYPE=openvpn
OPENVPN_USER=XXXXXXXXXXXXXXXX
OPENVPN_PASSWORD=XXXXXXXXXXXXXXXXX
WIREGUARD_PRIVATE_KEY=XXXXXXXXXXXXXXXXXXXX
WIREGUARD_ADDRESSES=x.x.x.x/16
VPN_COUNTRY=Japan
📝 ② squid.conf (Squid 代理伺服器設定)
允許內聯網(LAN)的電腦連接,並隱藏真實 IP:
acl localnet src 192.168.0.0/16
acl localnet src 10.0.0.0/8
acl localnet src 172.16.0.0/12
http_access allow localnet
http_access deny all
http_port 3128
forwarded_for off
request_header_access Via deny all
上面係 Gemini 比我嘅建議,不過我係咁樣 set:
# 允許所有來源連線 (僅建議測試使用)
acl all_access src all
http_access allow all
# Default Listening Port
http_port 0.0.0.0:3128
# Cache & Log Locations
coredump_dir /var/spool/squid
# 關閉快取(若只需轉發流量)
cache deny all
# 隱藏轉發標頭,增加匿名性
forwarded_for off
request_header_access Via deny all
📝 ③ docker-compose.yml (核心編排檔)
安全重點:Squid 的 3128 埠口必須開在 VPN 容器上,且 Squid 必須強制使用 VPN 的網絡模式 (network_mode)。同時開啟了 OpenVPN TCP 443 模式以繞過封鎖,並啟用 DoT 加密 DNS。
version: '3'
services:
vpn:
image: qmcgaw/gluetun
container_name: surfshark_vpn2_${CONTAINER_SUFFIX}
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
environment:
# VPN 基本設定
- VPN_SERVICE_PROVIDER=surfshark
- VPN_TYPE=${VPN_TYPE:-openvpn} # 預設使用 OpenVPN
# 填入你的 Surfshark OpenVPN 帳號密碼 (通常是一串很長的隨機字元,需在後台取得)
- OPENVPN_USER=${OPENVPN_USER}
- OPENVPN_PASSWORD=${OPENVPN_PASSWORD}
# 關鍵設定:強制使用 TCP
- OPENVPN_PROTOCOL=tcp
# 你想跨區連線的國家 (例如 Japan, Taiwan, US)
- SERVER_COUNTRIES=${VPN_COUNTRY}
# 開啟內建的 DNS over TLS (DoT)
- DOT=on
- BLOCK_SURVEILLANCE=off
- BLOCK_ADS=off
- HTTPPROXY=on
- HTTPPROXY_LISTENING_ADDRESS=0.0.0.0:3888
- HTTPPROXY_LOG=on
ports:
# 將 Squid 的 3128 Port 開放給內聯網連接 (重要:這裡必須寫在 VPN 容器下)
- "${HOST_PORT}:${CONTAINER_PORT}"
- "0.0.0.0:3888:3888" # Gluetun Porxy server
restart: unless-stopped
squid:
image: ubuntu/squid
container_name: squid_proxy2_${CONTAINER_SUFFIX}
# 核心設定:讓 Squid 強制使用 VPN 容器的網絡
network_mode: "service:vpn"
depends_on:
- vpn
volumes:
- ./squid.conf:/etc/squid/squid.conf:ro
restart: unless-stopped
🚀 3. 常用操作指令
- 啟動服務:docker compose –env-file .\.env up -d
- 關閉服務:docker compose down
- 檢查 VPN 連線狀態(日誌):docker logs -f surfshark_vpn2
- 手動更換國家:1. 打開 .env 修改 VPN_COUNTRY 2. 執行 docker compose restart vpn 即可
🔒 4. 安全與隱私狀態
- 內容絕對保密:所有流量在離開你電腦前已被 VPN 加密,並偽裝成普通 HTTPS (Port 443) 流量。公司 IT 睇唔到你睇緊咩網頁、入咗咩密碼。
- 無 DNS 洩漏:Gluetun 內建 Unbound DNS 並開啟了 DoT (DNS over TLS),所有網址查詢直接在加密通道內完成,公司 DNS 伺服器完全無法監測。
- 安全建議(辦公室生存):公司 IT 雖然睇唔到內容,但睇得到「流量大小」。盡量避免長時間狂睇 4K 影片或下載巨型檔案,避免大流量引起 IT 同事注意。