【LEDE】樹莓派上玩LEDE終極指南-82-部署OpenVPN服務端
在OpenWRT上部署OpenVPN服務端
QQ805447391
20170128
轉載請註明出處
實現效果
1、部署一個可以在OpenWRT上穩定執行的OpenVPN Server,對連入虛擬專用網的外界使用者提供內網的訪問(諸如路由器管理,內網客戶端之間互相通訊,內網穿透,代理伺服器,網路架設等服務)
2、使用者可以通過使用者名稱和密碼以及相關的配置檔案通過OpenVPN Client軟體連入虛擬網路,也可以通過自登入配置一鍵連入網路。
3、支援proxy,使用者可以自定義虛擬專用網路使用的埠號,可以有效的解決運營商的埠封殺。
4、使用者線上狀態控制,精確記錄使用者名稱及上線、離線的時間。使用者的管理。
5、服務端防DDos攻擊。
6、虛擬專用網內部通訊。
7、(附屬)利用frp技術跳出frp server,實現流量的點對點傳輸。進而實現內網無運營商或內網代理控制OpenVPN服務。
準備條件
1、OpenWRT 環境,可以利用手頭閒置的路由,或者使用虛擬機器,OpenWRT x86 等等。
2、OpenSSL環境,也可以使用PolarSSL,EasyRsa等等。這裡我採用EasyRsa以及OpenSSL。
3、必要的網路環境,內外網即可,我們的目的是學會如何搭建服務,這裡只需要提供簡單的網路環境即可。
4、SSH客戶端一臺(我使用的是xShell+WinScp)
5、必要的準備檔案(後文會提供)
開始
(提供luci配置法和conf配置法,最好都弄懂,因為luci對OpenVPN 的特性支援的不好)
1、更新軟體源以及安裝必要的元件
opkg update
opkg install openvpn-openssl luci-app-openvpn openvpn-easy-rsa libopenssl
可能會出現找不到元件的問題,文章附後部分提供我使用的軟體源,請自行切換可用的軟體源以安裝或更新元件。
以上步驟完成之後,luci介面即可出現
新手建議使用luci配置,我會一步步的截圖,老鳥建議別看我的文章了,沒啥用~
2、OpenVPN準備
a、生成CA證書,cert,key,ta,pem
定位到/etc/easy-rsa/vars檔案,將以下欄位改成自己的值。(非必須,但是學過加密就會知道ca就相當於證書頒發機構,把ca的資訊配置成自己的會符合規範)
ssh下:
cd /etc/easy-rsa #進入工作目錄,這是我的工作目錄 = =
./clean-all #清除以前生成的證書(非必須,彈藥理解作用)
source ./vars #將vars配置的環境變數讀入
./build-ca #構建CA
./build-key-server server #構建server.csr
./build-key client #構建client.csr
./build-dh #構建2048位大質數pem,生成的時間會很長,如果嫌長,在vars中改或更小值即可,我使用的是1024,在我的mt7620a效能下,2分鐘即可生成dh???.pem。
./sign-req –server server #使用CA簽名server.csr生成server.crt,一路y即可,注意,OpenWRT的easyrsa對server簽名的時候存在bug,需要加—server引數才能正常的對server.csr簽名。
./sign-req client #使用CA簽名client.csr生成client.crt,一路y即可
./openvpn --genkey --secret ./keys/ta.key #生成ta.key,用來進行tls_auth
出錯的話,把每條命令前面的./去掉試試。
執行成功的話,此時在/etc/easy-rsa/keys資料夾裡面即可出現以下檔案:
b、配置準備
netstat –apn檢視埠是否與自己想使用的埠有衝突,並且加以解決。
3、開始搭建
在luci中新建一個多使用者伺服器,使用tun(routed),點選add按鈕。
依照下圖配置各個屬性。
(*)或者使用conf配置,配置單如下:
配置好之後儲存自己的配置,在luci中的oepnvpn介面手動啟動這個vpn並執行即可。
執行成功之後是介個樣紙的:
執行netstat –apn檢視當前埠的使用情況,可見1198已啟動。
這時候就可以使用ovpn配置檔案連線到改OpenVPN伺服器了。
ovpn 的配置方式我不做詳細闡述,只提供我自己使用的ovpn。(附後)
4、密碼認證功能(*)
有的同學想通過使用者名稱以及密碼連線OpenVPN怎麼辦呢?
首先需要配置luci或者conf:
對應的conf:
之後編寫login.sh
#!/bin/sh
###########################################################
# checkpsw.sh (C) 2004 Mathias Sundman <mathias@openvpn.se>
#
# This script will authenticate OpenVPN users against
# a plain text file. The passfile should simply contain
# one row per user with the username first followed by
# one or more space(s) or tab(s) and then the password.
PASSFILE="/etc/openvpn/password"
LOG_FILE="/var/log/openvpn-password.log"
TIME_STAMP=`date "+%Y-%m-%d %T"`
###########################################################
if [ ! -r "${PASSFILE}" ]; then
echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
exit 1
fi
CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`
if [ "${CORRECT_PASSWORD}" = "" ]; then
echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1
fi
if [ "${password}" = "${CORRECT_PASSWORD}" ]; then
echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
exit 0
fi
echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1
然後配置密碼檔案password:
最後在客戶機ovpn配置檔案裡面新增:auth-user-pass即可。當然也可以實現使用者的自動登入,這個知識點自己去研究吧,我就不說了,手好累= =
此時通過客戶端連入OpenVPN伺服器,就會出現輸入密碼的介面:
可能出現的錯誤以及解決方案
1、Authenticate/Decrypt packet error: packet HMAC authentication failed
檢查ca,cert,key,ta是否對應。
檢查auth演算法和cipher演算法。
檢查服務端tls_auth中的0欄位。
寫在後面
0、這裡需要說明一下為何不用client_cert_not_request引數,其實openvpn二進位制是支援該引數的,但是如果我們使用luci配置的話,是無法使用的,因為luci並沒有提供給我們這個引數的選項== ,所以這裡我採用了cs雙重認證的方式搭建server。
1、軟體源(個人自用的,需要自己配置)
dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlay
option force_checksum 0
arch all 100
arch ralink 200
arch ramips 300
arch ramips_24kec 400
# src/gz pdr_mt7620_base http://downloads.pandorabox.com.cn/pandorabox/packages/mt7620/packages/base
# src/gz pdr_mt7620_luci http://downloads.pandorabox.com.cn/pandorabox/packages/mt7620/packages/luci
# src/gz pdr_mt7620_packages http://downloads.pandorabox.com.cn/pandorabox/packages/mt7620/packages/packages
src/gz pdr_compat_base http://downloads.pandorabox.com.cn/pandorabox/packages/mipsel_24kec_dsp/base
src/gz pdr_compat_luci http://downloads.pandorabox.com.cn/pandorabox/packages/mipsel_24kec_dsp/luci
src/gz pdr_compat_packages http://downloads.pandorabox.com.cn/pandorabox/packages/mipsel_24kec_dsp/packages
src/gz pdr_compat_lafite http://downloads.pandorabox.com.cn/pandorabox/packages/mipsel_24kec_dsp/lafite
src/gz pdr_compat_mtkdrv http://downloads.pandorabox.com.cn/pandorabox/packages/mipsel_24kec_dsp/mtkdrv
#src/gz op_b0_base http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/base
#src/gz op_b0_luci http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/luci
#src/gz op_b0_management http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/management
#src/gz op_b0_packages http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/packages
#src/gz op_b0_old http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/oldpackages
#src/gz op_b0_routing http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/routing
#src/gz op_b0_telephony http://downloads.openwrt.org/barrier_breaker/14.07/ramips/mt7620a/packages/telephony
2、我自己的ovpn檔案。
client
dev tun
proto tcp-client
remote 192.168.2.1 1198 #我的閘道器的ip,埠
resolv-retry infinite
;float
nobind
persist-key
persist-tun
#auth SHA256
#cipher BF-CBC
nice 0
verb 3
mute 10
#auth-user-pass
ns-cert-type server
comp-lzo
<ca>
xxx
</ca>
<cert>
xxx
</cert>
<key>
xxx
</key>
key-direction 1
<tls-auth>
xxx
</tls-auth>
####################### 帶密碼的ovpn ##################
client
dev tun
proto tcp-client
remote 192.168.2.1 1195
resolv-retry infinite
;float
nobind
persist-key
persist-tun
#auth SHA256
#cipher BF-CBC
nice 0
verb 3
mute 10
auth-user-pass
ns-cert-type server
comp-lzo
<ca>
xxx
</ca>
<cert>
xxx
</cert>
<key>
xxx
</key>
key-direction 1
<tls-auth>
xxx
</tls-auth>
相關文章
- OpenYurt 入門 - 在樹莓派上玩轉 OpenYurt樹莓派
- LEDE 虛擬機器安裝虛擬機
- 在樹莓派上部署yolo模型推理並使用onnx加速樹莓派YOLO模型
- 在樹莓派上安裝 Ubuntu MATE樹莓派Ubuntu
- 在樹莓派上開發SpringBoot 之使用VSCode遠端開發樹莓派Spring BootVSCode
- 在樹莓派上執行 DOS 系統樹莓派
- Kubernetes部署之終極指南 - semaphoreci
- 在樹莓派上搭建智慧家居閘道器樹莓派
- 樹莓派上安裝USB網路攝像頭樹莓派
- 關於在windows,ubuntu,樹莓派上安裝使用opencvWindowsUbuntu樹莓派OpenCV
- 樹莓派使用入門:在樹莓派上使用 Mathematica 進行高階數學運算樹莓派
- FTP服務端部署FTP服務端
- 樹莓派上利用Tensorflow實現小車的自動駕駛樹莓派自動駕駛
- 在樹莓派上安裝c++版本的opencv並執行樹莓派C++OpenCV
- 在樹莓派上設定家庭網路的家長控制功能樹莓派
- 【LEDE】x86軟路由之路-06-前所未有,在OpenWrt跑Docker路由Docker
- [譯] 使用 styled-components 的 React 服務端渲染極簡指南React服務端
- 「玩轉樹莓派」樹莓派 3B+ 配置無線WiFi樹莓派WiFi
- 「玩轉樹莓派」搭建智慧家居遠端監控系統樹莓派
- 服務端指南 | 微服務初級設計指南服務端微服務
- Angular CLI 終極指南Angular
- [譯] 如何輕鬆地在樹莓派上使用深度學習檢測物件樹莓派深度學習物件
- 將搭建在樹莓派上的leanote用frp對映到自己的域名樹莓派FRP
- Windows terminal中WSL Linux 終端的極簡美化指南WindowsLinux
- 瀏覽器端儲存資料的終極指南瀏覽器
- 如何輕鬆玩轉樹莓派系統?樹莓派
- ChatGPT的終極指南概要ChatGPT
- 服務端指南 | 報表匯出服務端
- 基於樹莓派部署 code-server樹莓派Server
- 樹莓派使用Docker部署EdgeX(jakarta版本)樹莓派Docker
- 樹莓派部署Elasticsearch6叢集樹莓派Elasticsearch
- 服務端思維指南 | 常用效能監控指南服務端
- Ubuntu和樹莓派遠端操作Ubuntu樹莓派
- 超強教程!在樹莓派上構建多節點K8S叢集!樹莓派K8S
- Python除錯終極指南 - martinheinzPython除錯
- CSS居中對齊終極指南CSS
- FFmpeg - 終極指南 | IMG.LY
- UI設計終極配色指南UI