【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 <[email protected]>

#

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

 

 

猜你喜欢

转载自blog.csdn.net/wang805447391/article/details/54767380