简介 OpenVPN是一个功能齐全的SSLVPN,它使用行业标准SSLTLS协议实现OSI第2层或第3层安全网络扩展,支持基于证书、智能卡和或用户名密码凭据的灵活客户端身份验证方法,并允许用户或使用应用于VPN虚拟接口的防火墙规则的特定于组的访问控制策略。应用场景 在家庭网络中有动态公网IP的前提下,当我们在外部,想要访问家庭内部网络。一般可以通过路由器端口映射的方式进行,通过动态公网IP和映射的指定端口,来访问家庭内部网络环境中的一些网络服务。在把家庭网络环境中的服务直接暴露在公网环境下,可能会对家庭内部网络造成安全隐患。 内部系统可能会存在一些漏洞未能及时修复,造成网络安全问题。这些漏洞为黑客们提供了各种机会,绝大多数非法入侵、木马、病毒都是通过漏洞来突破网络安全防线的。 因此我们在考虑网络安全因素下,家庭网络环境对外访问只通过VPN服务进行访问,对外暴露服务只暴露VPN服务即可。从而保证有效提高了我们家庭内部网络环境的安全性。硬件环境 树莓派3B CPU主频 1。4GHz 核心数量 4核 线程数量 4线程 核心架构 BCM 树莓派3B所用的BCM2835是基于ARMv732位架构的4核心ARMv7Processorrev4(v7l)处理器 虽然树莓派3B的硬件支持64位的系统,但是官方的系统还是32位的,主要应该是为了兼容之前的硬件安装openvpn和easyrsasudoaptgetinstallyeasyrsasudoaptgetinstallyopenvpneasyrsa包提供证书生成脚本、模板配置文件等创建相关目录openvpn就是我们今天要安装的包了升级easyrsa为v3。0。8版本 树莓派中的easyrsa源安装的版本为v2。x。x,要把版本升级到v3。0。8。由于树莓派系统是基于Debian创建新的分支系统,我们可以使用Debian系统版本中的deb安装包,来安装easyrsav3。0。8 使用https:pkgs。org下载deb安装包,树莓派是ARM架构 点击easyrsa3。0。81all。deb打开下载页面 复制下载地址,使用wget下载文件wgethttp:ftp。de。debian。orgdebianpoolmaineeasyrsaeasyrsa3。0。81all。deb 安装easyrsa3。0。81all。deb文件dpkgieasyrsa3。0。81all。deb配置证书密钥复制easyrsa配置信息sudocprfusrshareeasyrsa3。0。8etcopenvpnservereasyrsasudocprfusrshareeasyrsaetcopenvpnservereasyrsacdetcopenvpnservereasyrsa编辑vars文件vimvars国家setvarEASYRSAREQCOUNTRYCN地区setvarEASYRSAREQPROVINCEShandong城市setvarEASYRSAREQCITYJinan组织setvarEASYRSAREQORGNilorgCA邮箱setvarEASYRSAREQEMAILxudeyi1998。qq。com拥有者setvarEASYRSAREQOUHome使变量生效source。vars生成CA根证书cdetcopenvpnservereasyrsasudo。easyrsainitpkisudo。easyrsabuildcanopass initpki:初始化,创建pki文件夹,用来存放即将生成的证书生成OpenVPN服务器客户端证书和密钥生成服务端证书,nopass参数设定证书无密码sudo。easyrsabuildserverfullservernopass生成客户端证书,nopass参数设定证书无密码sudo。easyrsabuildclientfullclient1nopass创建DiffieHellmansudo。easyrsagendh生成ta。keyopenvpngenkeysecretta。keybuildserverfull:生成服务端客户端证书DiffieHellman,迪菲赫尔曼密钥交换是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。ta。key用于防御DoS、UDP淹没等恶意攻击。配置OpenVPN服务端复制配置文件server。conf如果server。conf不存在,需要对目录下的cpusrsharedocopenvpnexamplessampleconfigfilesserver。confetcopenvpn复制证书及密钥文件 然后将CA的证书,VPNServer的证书和密钥,以及DiffieHellman参数文件复制到etcopenvpnserver目录下cpetcopenvpnservereasyrsapkica。crtetcopenvpnservercpetcopenvpnservereasyrsapkiissuedserver。crtetcopenvpnservercpetcopenvpnservereasyrsapkiprivateserver。keyetcopenvpnservercpetcopenvpnservereasyrsapkidh。pemetcopenvpnserver编辑配置文件 编辑server。conf配置,去除无用配置项local0。0。0。0port1194prototcpdevtapdevtuncaetcopenvpnservereasyrsapkica。crtcertetcopenvpnservereasyrsapkiissuedserver。crtkeyetcopenvpnservereasyrsapkiprivateserver。keydhetcopenvpnservereasyrsadh。pemserver10。8。0。0255。255。255。0ifconfigpoolpersistetcopenvpnserveripp。txtpushroute192。168。0。0255。255。255。0Ifenabled,thisdirectivewillconfigureallclientstoredirecttheirdefaultnetworkgatewaythroughtheVPN,causingallIPtrafficsuchaswebbrowsingandandDNSlookupstogothroughtheVPN(TheOpenVPNservermachinemayneedtoNATorbridgetheTUNTAPinterfacetotheinternetinorderforthistoworkproperly)。pushredirectgatewaydef1bypassdhcppushdhcpoptionDNS208。67。222。222pushdhcpoptionDNS208。67。220。220clienttoclientkeepalive10120ForextrasecuritybeyondthatprovidedbySSLTLS,createanHMACfirewalltohelpblockDoSattacksandUDPportflooding。Generatewith:openvpngenkeysecretta。keyTheserverandeachclientmusthaveacopyofthiskey。Thesecondparametershouldbe0ontheserverand1ontheclients。tlsauthetcopenvpnserverta。key0ThisfileissecretSelectacryptographiccipher。Thisconfigitemmustbecopiedtotheclientconfigfileaswell。Notethat2。4clientserverwillautomaticallynegotiateAES256GCMinTLSmode。SeealsothencpcipheroptioninthemanpagecipherAES256CBCcomplzomaxclients100persistkeypersisttunstatusvarlogopenvpnstatus。loglogvarlogopenvpnopenvpn。loglogappendvarlogopenvpnopenvpn。logverb3mute20配置iptables 配置iptables设置nat规则和打开路由转发iptablestnatAPOSTROUTINGs10。8。0。024jMASQUERADEiptablesvnLtnat打开路由转发vimetcsysctl。conf修改net。ipv4。ipforwardnet。ipv4。ipforward1sysctlp验证服务systemctlstatusopenvpnserver。servicesystemctlrestartopenvpnserver。service配置OpenVPN客户端复制配置文件创建客户端配置文件mkdirpopenvpnclient1client。conf如果client。conf不存在,需要对目录下的cpusrsharedocopenvpnexamplessampleconfigfilesclient。confopenvpnclient1client1。ovpn复制证书及密钥文件 然后将CA的证书、客户端的证书和密钥,以及DiffieHellman参数文件复制到openvpnclient1目录下cpetcopenvpnservereasyrsapkica。crtopenvpnclient1ca。crtcpetcopenvpnservereasyrsata。keyopenvpnclient1ta。keycpetcopenvpnservereasyrsapkiprivateclient1。keyopenvpnclient1client1。keycpetcopenvpnservereasyrsapkiissuedclient1。crtopenvpnclient1client1。crt编辑配置文件 编辑client1。ovpn配置,去除无用配置项clientdevtunprototcpremote服务器端IP服务器端端口remote192。168。xx。xx1194resolvretryinfiniteMostclientsdontneedtobindtoaspecificlocalportnumber。nobindpersistkeypersisttuncaca。crtcertclient1。crtkeyclient1。keyremotecerttlsservertlsauthta。key1complzoverb5不拉取服务端路由配置,可选可不选。routenopull指定访问哪些网段走vpn隧道route192。168。0。0255。255。0。0vpngateway打包客户端配置文件cdopenvpntarzcvfclient1。tar。gz。client1使用OpenVPNConnect客户端 使用OpenVPNConnect客户端连接服务