架設自己 VPN,只要十分鐘!有了 docker 我們就可以自己在家快速的建立 IPsec VPN,隨時換回家裡的 ip,甚至可以設定 AdGuard DNS 防堵廣告!這邊分享一下我實作的過程。
準備架設所需裝置
首先列出我使用的裝置:
- Raspberry pi 一片
主要是省電,如果要使用家裡的電腦取代也可以。
- linux 系統
無論是 ubuntu, debian, armbian, raspberry OS 都可以!Windows 不在這次的討論範圍內。
- 固定 IP
因為需要在 client 端設定 VPN 連線伺服器位置。如果家裡使用的 Wifi 分享器有提供免費的 DDNS 也行( tplink deco x60 有提供這個設定,好用推薦!),這樣動態 ip 也能用 domain name 的方式連線。假如家裡是中華電信光世代,都有免費提供一組固定 ip 哦!
準備 docker-compose 檔案
開始前,請先安裝好 Linux 系統,Docker ,docker-compose,以及網路等設定。
接著使用這份 yaml 檔起 docker 即可,其中幾個參數 VPN_IPSEC_PSK、VPN_USER、VPN_PASSWORD 需要自己給定:
version: '2.3'
services:
vpn-service:
image: hwdsl2/ipsec-vpn-server:latest
container_name: vpn-service
privileged: true
restart: always
mem_limit: 64M
logging:
driver: "json-file"
options:
max-size: "1k"
max-file: "3"
ports:
- "500:500/udp"
- "4500:4500/udp"
networks:
- vpn-service
environment:
VPN_IPSEC_PSK: <your_key>
VPN_USER: <your_user_name>
VPN_PASSWORD: <your_password>
VPN_DNS_SRV1: 94.140.14.14
VPN_DNS_SRV2: 94.140.14.15
networks:
vpn-service:
name: vpn-service-network
driver: bridge
另外解釋幾個重要參數:
privileged: true
給此 container 有真正的 root 權限。一般是不建議使用此參數,但 hwdsl2/ipsec-vpn-server 的文件上有特別註明,推測應該是需要去動用到系統的網路相關硬體,所以才需要開此參數。
restart: always
container 當掉或系統重開機,就會自動重新啟動,不怕他死掉。
ports:
– “500:500/udp”
– “4500:4500/udp”
後面一定要接 /udp,不然 client 無法成功連線 VPN server。
VPN_IPSEC_PSK
設定金鑰,可使用這個網站來產生亂碼 https://passwordsgenerator.net/
VPN_USER
VPN 使用者帳號名稱
VPN_PASSWORD
VPN 使用者密碼
VPN_DNS_SRV1: 94.140.14.14
VPN_DNS_SRV2: 94.140.14.15
VPN 使用的 DNS,我這邊是給定 AdGuard DNS,如果沒有特定需求可以略過這個參數不給定。
啟動 VPN container
接下來只需使用
docker-compose up -d
完成!可以檢查一下 log
docker logs -f vpn-service
如果有看到以下文字就是啟動成功!
IPsec PSK: xxxxxx
Username: xxxxxx
Password: xxxxxx
Write these down. You'll need them to connect!
Important notes: https://git.io/vpnnotes2
Setup VPN clients: https://git.io/vpnclients
IKEv2 guide: https://git.io/ikev2docker
================================================
Redirecting to: /etc/init.d/ipsec start
Starting pluto IKE daemon for IPsec: .
xl2tpd[1]: Not looking for kernel SAref support.
xl2tpd[1]: Using l2tp kernel support.
xl2tpd[1]: xl2tpd version xl2tpd-1.3.12 started on 519ced3cfa09 PID:1
xl2tpd[1]: Written by Mark Spencer, Copyright (C) 1998, Adtran, Inc.
xl2tpd[1]: Forked by Scott Balmos and David Stipp, (C) 2001
xl2tpd[1]: Inherited by Jeff McAdams, (C) 2002
xl2tpd[1]: Forked again by Xelerance (www.xelerance.com) (C) 2006-2016
xl2tpd[1]: Listening on IP address 0.0.0.0, port 1701
設定防火牆
假如你的系統裡有之安裝防火牆,要記得開放 500 和 4500 port。
以 ufw 為例,可以使用以下指令:
sudo ufw 500 allow
sudo ufw 4500 allow
設定路由器
如果跑 VPN 的主機在路由器後面,共用同一組 Public IP 的話,記得到路由器裡面設定 port forwarding,把 500 和 4500 轉到 VPN 主機。
到這邊 VPN server 就已經架設完成,很快吧!趕快自己動手試試看!如果覺得我文章內容對你有幫助的話,請在文章後面幫我按 5 個讚!讓我知道大家都喜歡什麼內容哦!
範例原始碼:github
延伸閱讀:
十分鐘 OpenVPN server 架設 – docker 手把手教學
AdGuard Home 超簡單架設教學!
參考資料 ipsec vpn server docker image:
https://hub.docker.com/r/hwdsl2/ipsec-vpn-server
https://github.com/hwdsl2/docker-ipsec-vpn-server