主要想在公司環境增加一個 VPN 環境,讓在外的同仁可以先連到 VPN Server 在進行「主機」或「服務」的存取,這樣一來就不需要直接把公司內部的資訊曝露在外網,在安全性上也多了一份保險。
現在人手一機的年代,自行輸入 VPN 相關資訊,啟用連線就可以馬上連到你要的服務群中。
之前架了一台 PPTP VPN Server,但主要 iOS 10 之後就不在支援 PPTP 協定,所以這 PPTP VPN Server 就沒有用了,後來就開始找有問 L2TP (Layer 2 Tunneling Protocol )協定的 Server 安裝教學,找到了一個不錯用的 Docker image,快速架設好之後,iPhone 手機就能馬上用了,趕緊筆記一下。
一、環境架設
需要先準備以下服務
二、建立 docker-compose.yaml
vim docker-compose.yaml
[root@localhost ~]$ cd /home/ [root@localhost home]$ mkdir vpn-service [root@localhost home]$ cd vpn-service [root@localhost vpn-service]$ vim docker-compose.yaml 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: "********" #共享的金鑰 VPN_USER: "account" #使用者的帳號 VPN_PASSWORD: "password" #使用者的密碼 networks: vpn-service: name: vpn-service-network driver: bridge :wq #(存檔離開) [root@localhost vpn-service]$
三、啟動 vpn-service 服務
- 啟用服務:
docker-compose up -d
- 查看是否啟動:
docker ps -a
[root@localhost vpn-service]$ docker-compose up -d Creating network "vpn-service-network" with driver "bridge" Creating vpn ... done [root@localhost vpn-service]$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES xxxx hwdsl2/ipsec-vpn-server:latest "/opt/src/run.sh" 3 min ago Up 3 min 0.0.0.0:500->500/udp, vpn-service :::500->500/udp, 0.0.0.0:4500->4500/udp, :::4500->4500/udp [root@localhost vpn-service]$
四、查看日誌確認服務
- 查看服務日誌檔:
docker logs -f vpn-service
[root@localhost vpn-service]$ docker logs -f vpn-service Server IP: xxx.xxx.xxx.xxx IPsec PSK: ********* Username: ********* Password: ********* 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 ================================================ xl2tpd[1]: Not looking for kernel SAref support. xl2tpd[1]: Using l2tp kernel support. xl2tpd[1]: xl2tpd version xl2tpd-1.3.16 started on 73dc289b77d7 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 driver: "json-file" [root@localhost vpn-service]$
看到以上資訊後,代表服務已啟用
五、Mac OS 建立 VPN 連線
- 系統偏好設定 > 網路 > 左下角「+」
- 介面:選擇「VPN」
- VPN類型:選擇「透過 IPSec 的 L2TP」
- 服務名稱:自行定議
- 建立完成後,進行 VPN 相關設定,輸入
伺服器位址:「你的 VPN IP 或 Domain」
帳號名稱:「使用者的帳號」
- 系統偏好設定 > 網路 > 左下角「+」
使用者認證:「使用者的密碼」
機器認證:「共享的密鑰」
- 進階設定:需勾選透過 VPN 傳送所有流量
- 選擇套用後,就可以進行「連線」
六、常見問題
- 如無法連線可先檢查 SELinux 設定,執行
setenforce 0
關閉 SELinux
[root@localhost vpn-service]$ setenforce 0 setenforce: SELinux is disabled
- 預設 DHCP IP 範圍 (192.168.42.10~192.168.42.250),因網段需求,可自行調整 DHCP IP 範圍
[root@localhost vpn-service]$ docker exec -it vpn-service bash bash-5.1$ vi /opt/src/run.sh #可修改第 250~252 行 IP 即可 L2TP_NET=${VPN_L2TP_NET:-'192.168.42.0/24'} L2TP_LOCAL=${VPN_L2TP_LOCAL:-'192.168.42.1'} L2TP_POOL=${VPN_L2TP_POOL:-'192.168.42.10-192.168.42.250'} :wq bash-5.1$ exit [root@localhost vpn-service]$ docker-compose restart Restarting vpn ... done [root@localhost vpn-service]$
七、筆記
配置文件
設定文件路徑 | 設定内容 |
---|---|
/etc/xl2tpd/xl2tpd.conf | ip池、内網IP |
/etc/ppp/options.xl2tpd | mtu、dns |
/etc/ipsec.conf | IPSec主設定文件 |
/etc/ipsec.secrets | 共享的密鑰 |
/etc/ipsec.d/l2tp_psk.conf | 服务器 IP |
/etc/ppp/chap-secrets | 帳號密碼 |
/etc/sysctl.conf | 開啟内部轉發 |
/var/log/secure | 日誌 |
所需安裝的插件
软件 | 作用 |
---|---|
libreswan(ipsec) | 提供一个密鑰 |
ppp | 撥號軟體,提供用户名和密碼 |
xl2tpd | 提供L2TP服務 |
sysctl | 提供服務器内部轉發 |
iptables | 提供请求從服務器内部轉向外部,外部回響轉向服務器内部 |