顯示頁面舊版反向連結Fold/unfold all回到頁頂 本頁是唯讀的,您可以看到原始碼,但不能更動它。您如果覺得它不應被鎖上,請詢問管理員。 ====== 安裝 DockOVPN 的 OpenVPN Docker 方案 ====== <WRAP center round tip 40%> 可參考 **[[ovpn-admin]]** </WRAP> * 因為之前主要的 OpenVPN Docker 方案(Exp. [[https://hub.docker.com/r/kylemanna/openvpn/|kylemanna/openvpn]], [[https://hub.docker.com/r/linuxserver/openvpn-as|linuxserver/openvpn-as]] 似乎都已不再更新, 因此找了 [[https://github.com/dockovpn/dockovpn|DockOVPN]] 來安裝使用 * 目前 DockOVPN 版本是 v1.13.0 (Release:2023-10-28) 系統算是穩定, 但實際使用還是需要一些手動程序 * 安裝環境 : * VM : 1vCore, 1G RAM, 16G SSD * OS : Alpine 3.18 + Docker Compose * 參考 [[tech/alpine_docker]] <note tip> **Alpine 3.19 需要執行以下指令** <cli> modprobe ip_tables echo 'ip_tables' >> /etc/modules </cli>執行後需要重新開機 </note> ===== 安裝設定 ===== * 因應維護管理設定 OpenVPN Server 的方便性, 預計將以下目錄或設定檔掛載出來 * /opt/Dockovpn -> ./Dockovpn * /opt/Dockovpn_data -> ./Dockovpn_data * /etc/openvpn/server.conf -> ./Dockovpn/config/server.conf * VPN Server : vpn.ichiayi.com * docker-compose.yml <file> version: '3' services: dockovpn: image: alekslitvinenk/openvpn:v1.13.0 cap_add: - NET_ADMIN ports: - 80:8080/tcp - 1194:1194/udp - 5555:5555/tcp environment: - HOST_ADDR=vpn.ichiayi.com - HOST_TUN_PORT=1194 container_name: dockovpn #volumes: # - ./Dockovpn:/opt/Dockovpn # - ./Dockovpn_data:/opt/Dockovpn_data # - ./Dockovpn/config/server.conf:/etc/openvpn/server.conf restart: always </file>**第一次執行時, volumes 部分必須要註解起來, 否則會出錯** * 第一次啟動 <cli> docker compose up -d </cli> * 啟動後將 Dockovpn 與 Dockovpn_data 複製出來<cli> docker cp dockovpn:/opt/Dockovpn . docker cp dockovpn:/opt/Dockovpn_data . </cli> * 將 Dockovpn 內的 genclient.sh 與 functions.sh 用 github 最新版本取代<cli> wget https://github.com/dockovpn/dockovpn/raw/master/scripts/genclient.sh -O ./Dockovpn/genclient.sh wget https://github.com/dockovpn/dockovpn/raw/master/scripts/functions.sh -O ./Dockovpn/functions.sh </cli> * 依照實際需要修改 server.conf <cli> vi ./Dockovpn/config/server.conf </cli><file> port 1194 proto udp dev tun cipher AES-256-GCM auth SHA512 keepalive 10 120 persist-key persist-tun crl-verify /etc/openvpn/crl.pem ca /etc/openvpn/ca.crt dh /etc/openvpn/dh.pem tls-auth /etc/openvpn/ta.key 0 key /etc/openvpn/MyReq.key cert /etc/openvpn/MyReq.crt ifconfig-pool-persist ipp.txt status openvpn-status.log verb 4 management 0.0.0.0 5555 server 10.8.0.0 255.255.255.0 push "redirect-gateway def1 bypass-dhcp" #push "dhcp-option DNS 1.1.1.1" #push "dhcp-option DNS 8.8.8.8" push "route 192.168.11.0 255.255.255.0" push "route 172.16.0.0 255.255.255.0" push "route 172.16.1.0 255.255.255.0" push "route 172.16.2.0 255.255.255.0" push "route 172.16.12.0 255.255.255.0" #duplicate-cn #ncp-ciphers AES-256-GCM:AES-256-CBC #tls-server #tls-version-min 1.2 </file> * 將 vloumes 掛上, 重啟 dockovpn <cli> vi ./docker-compose.yml </cli><file> : container_name: dockovpn volumes: - ./Dockovpn:/opt/Dockovpn - ./Dockovpn_data:/opt/Dockovpn_data - ./Dockovpn/config/server.conf:/etc/openvpn/server.conf restart: always </file><cli> docker compose up -d </cli> ==== FAQ ==== === 1.如果不想要 client 將 openvpn server 當 default gateway === <cli> vi Dockovpn/config/server.conf </cli>將 redirect-gateway 註解掉<file> : #push "redirect-gateway def1 bypass-dhcp" : </file> === 2.如果想要讓 openvpn server 服務 Listen 在 TCP/443 === - 修改 docker-compose.yml 將 port 由 1194:1194/udp 改成 443:443/tcp<file> : ports: - 80:8080/tcp - 443:443/tcp - 5555:5555/tcp environment: - HOST_ADDR=vpn.ichiayi.com - HOST_TUN_PORT=443 : </file> - 修改 Dockovpn/config/server.conf 內 port 與 proto 的設定<file> port 443 proto tcp dev tun : </file> - 修改 Dockovpn/config/client.ovpn 內 proto 的設定<file> : proto tcp : </file> - 重新啟動 docker compose <cli> docker compose up -d </cli> === 3. 如果想要將 openvpn server 的 VPN IP 由預設 10.8.0.0/24 改成其他的網段 Exp. 10.9.0.0/24 === - 更新 Dockovpn/start.sh (用這檔案取代 https://github.com/tryweb/dockovpn/blob/master/scripts/start.sh)((已發出 PR https://github.com/dockovpn/dockovpn/pull/232)) <cli> wget https://github.com/tryweb/dockovpn/raw/master/scripts/start.sh -O ./Dockovpn/start.sh </cli> - 修改 docker-compose.yml 增加環境變數 OVPN_IP_NET=10.9.0.0/24<file> : environment: - HOST_ADDR=vpn.ichiayi.com - HOST_TUN_PORT=443 - HOST_TUN_PROTO=tcp - OVPN_IP_NET=10.9.0.0/24 : </file> - 修改 Dockovpn/config/server.conf 內 server 的設定<file> : server 10.9.0.0 255.255.255.0 : </file> - 重新啟動 docker compose <cli> docker compose up -d </cli> === 4. 如果發現用戶端無法連線, 出現 VERIFY ERROR: depth=0, error=CRL has expired === * 表示 CRL 自動更新異常, 需要重新產生 - 進入 dockovpn 容器內<cli> docker exec -it dockovpn bash </cli> - 切換到憑證目錄手動更新 CRL 檔<cli> cd /opt/Dockovpn_data/ easyrsa gen-crl </cli> - 重新啟動 dockovpn 服務<cli> docker compose restart </cli> ===== 新增與刪除 VPN Client 憑證 ===== ==== 新增 VPN Client 憑證 ==== * Exp. 新增 test1 <cli> docker exec dockovpn ./genclient.sh n test1 </cli> * 可以在 ./Dockovpn_data/clients 目錄看到建立 test1<cli> ls -lt ./Dockovpn_data/clients </cli> ==== 刪除 VPN Client 憑證 ==== * Exp. 刪除 test1 <cli> docker exec dockovpn ./rmclient.sh test1 rm -rf ./Dockovpn_data/clients/test1 </cli> * 可以在 ./Dockovpn_data/pki/index.txt 看到被廢止憑證註記 R<cli> cat ./Dockovpn_data/pki/index.txt </cli> ===== 查看目前線上的 VPN Client ===== * <cli> cat ./Dockovpn/openvpn-status.log </cli> ===== 安裝 openvpn-snmp-stats 強化監控 ===== * 參考 - https://github.com/tryweb/-openvpn-snmp-stats/tree/alpine3 * 安裝 openvpn.py <cli> apk add --update --no-cache python3 ln -sf python3 /usr/bin/python mkdir -p /opt/openvpn-snmp-stats/db cd /opt/openvpn-snmp-stats wget https://raw.githubusercontent.com/tryweb/-openvpn-snmp-stats/alpine3/openvpn.py chmod a+x openvpn.py </cli>安裝後可以先執行驗證 Exp.<cli> openvpn-61:~# /opt/openvpn-snmp-stats/openvpn.py {"errorString": "", "error": 0, "version": 1, "data": {"tun0": {"iv9614": {"minutes_since_last_handshake": 506, "bytes_rcvd": 106350, "bytes_sent": 78677}, "jonathan_pixel5": {"minutes_since_last_handshake": 535, "bytes_rcvd": 23584, "bytes_sent": 37931}, "jonathan": {"minutes_since_last_handshake": 536, "bytes_rcvd": 7086888, "bytes_sent": 41041820}, "UNDEF": {"minutes_since_last_handshake": 495, "bytes_rcvd": 0, "bytes_sent": 0}}}} </cli> * 設定 snmpd.conf <cli> vi /etc/snmp/snmpd.conf </cli><file> : extend wireguard /opt/openvpn-snmp-stats/openvpn.py </file><cli> service snmpd restart </cli> ===== 參考網址 ===== * https://github.com/dockovpn/dockovpn * https://github.com/dockovpn/dockovpn/issues/184 {{tag>openvpn vpn}} tech/dockovpn.txt 上一次變更: 2024/06/25 13:48由 jonathan