【LEDE】樹莓派上玩LEDE終極指南-82-部署OpenVPN服務端

小學生414發表於2018-12-26

在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>

 

 
 

相關文章