openVpn搭建异地局域网

场景:

公司内网只能在公司内使用,出差时需访问公司内网,所以搭建一个局域网于公网的VPN

需要一点Linux动手能力

需有一台固定的公网IP服务器,如云服务器。

如下以Centos7服务器为例

一、服务端:证书免密模式

1、安装证书软件easy-rsa,运行如下命令:

yum -y install easy-rsa

#创建目录

mkdir /opt/easy-rsa

#查看已安装的RPM包中名为 easy-rsa 的文件列表

rpm -ql easy-rsa

#进入目录进行操作

cd /opt/easy-rsa

cp -a /usr/share/easy-rsa/3.0.8/* .

cp -a /usr/share/doc/easy-rsa-3.0.8/vars.example ./vars

#编辑文件

vim vars

#源文件vars的内容比较多,精简配置如下,可以使用如下配置替换vars内容

#修改加粗处

if [ -z "$EASYRSA_CALLER" ]; then

        echo "You appear to be sourcing an Easy-RSA

'vars' file." >&2

        echo "This is no longer necessary and is

disallowed. See the section called" >&2

        echo "'How to use this file' near the top

comments for more details." >&2

       return 1

fi

set_var EASYRSA_DN "cn_only"

set_var EASYRSA_REQ_COUNTRY "CN"

set_var EASYRSA_REQ_PROVINCE "GuangDong"

set_var EASYRSA_REQ_CITY "ShenZhen"

set_var EASYRSA_REQ_ORG "公司简称"

set_var EASYRSA_REQ_EMAIL "邮箱@qq.comm"

set_var EASYRSA_NS_SUPPORT "yes"

2、创建证书

继续执行如下命令:

#1、初始化,在当前目录创建PKI目录,用于存储整数

./easyrsa init-pki

#2、创建根证书,会提示设置密码,用于ca对之后生成的server和client证书签名时使用,其他提示内容直接回车即可

./easyrsa build-ca

Enter New CA Key Passphrase:         #注意密码不能太短,例如设置123456

Re-Enter New CA Key Passphrase:    #再次输入密码

#3、创建server端证书和私钥文件,nopass表示不加密私钥文件,提示内容直接回车即可

 ./easyrsa gen-req server nopass

#4、给server端证书签名,提示内容需要输入yes和创建ca根证书时候的密码,步骤2的密码

./easyrsa sign server server

#5、创建Diffie-Hellman文件,密钥交换时的Diffie-Hellman算法

./easyrsa gen-dh

#6、创建client端的证书和私钥文件,nopass表示不加密私钥文件,提示内容直接回车即可

./easyrsa gen-req client nopass

#7、给client端证书前面,提示内容输入yes和创建ca根证书时候的密码,步骤2的密码

./easyrsa sign client client

#检查是否有ca根证书、客户端服务端证书、客户端服务端私钥

tree

#如下加粗部分是后续需要的文件,可以先下载下来

├── easyrsa                    #管理命令

├── openssl-easyrsa.cnf

├── pki

│   ├── ca.crt                #ca根证书,服务端与客户端都需要用

│   ├── certs_by_serial

│   ├── dh.pem                #认证算法 服务端

│   ├── index.txt

│   ├── index.txt.attr

│   ├── index.txt.attr.old

│   ├── index.txt.old

│   ├── issued

│   │   ├── client.crt        #客户端证书

│   │   └── server.crt        #服务端证书

│   ├── openssl-easyrsa.cnf

│   ├── private

│   │   ├── ca.key

│   │   ├── client.key        #客户端私钥

│   │   └── server.key        #服务端私钥

3、服务器端:安装openvpn

yum -y install openvpn

#编辑配置文件

/etc/openvpn/server.conf

#参考如下内容,修改自己的配置,加粗部分需注意

port 1194                                    #端口

proto udp                                    #协议

dev tun                                      #采用路由隧道模式

ca /opt/easy-rsa/pki/ca.crt                  #ca证书的位置

cert /opt/easy-rsa/pki/issued/server.crt     #服务端公钥的位置

key /opt/easy-rsa/pki/private/server.key     #服务端私钥的位置

dh /opt/easy-rsa/pki/dh.pem                  #证书校验算法  

server 10.8.0.0 255.255.255.0                #给客户端分配的地址池,10.8.0.0 可以自定义

push "route 172.16.1.0 255.255.255.0"        #允许客户端访问的内网网段

ifconfig-pool-persist ipp.txt                #地址池记录文件位置,未来让openvpn客户端固定ip地址使用的

keepalive 10 120                             #存活时间,10秒ping一次,120秒如果未收到响应则视为短线

max-clients 100                              #最多允许100个客户端连接

status openvpn-status.log                    #日志位置,记录openvpn状态

log /var/log/openvpn.log                     #openvpn日志记录位置

verb 3                                       #openvpn版本

client-to-client                             #允许客户端与客户端之间通信

persist-key                                  #通过keepalive检测超时后,重新启动VPN,不重新读取

persist-tun                                  #检测超时后,重新启动VPN,一直保持tun是linkup的,否则网络会先linkdown然后再linkup

duplicate-cn                                 #客户端密钥(证书和私钥)是否可以重复

comp-lzo                                     #启动lzo数据压缩格式

4、启动服务端opvenvpn

systemctl start openvpn@server

#设置开机启动
systemctl enable openvpn@server

#查看网段

ip a s tun0

7a2fa9101c384d718a0020ada024eb91.png

5、Linux安装客户端,与服务端不是同一服务器,可以是内网服务器

安装

yum -y install openvpn

#编辑配置文件

vim /etc/openvpn/client.conf

#内容如下,加粗部分需改为服务端公网IP

client

dev tun

proto udp

remote 公网IP 1194

resolv-retry infinite

nobind

ca ca.crt

cert client.crt

key client.key

verb 3

persist-key

comp-lzo

#上传服务端client.key、client.crt、ca.crt到客户端服务器,目录:/etc/openvpn/

#启动客户端,此时客户端ip是根据服务端server 10.8.0.0 255.255.255.0自动分配

systemctl start openvpn@client

#开机自启

systemctl enable openvpn@client

#检查是否连上openvpn服务端,如服务端的ip为:10.8.0.1,在客户端ping这个ip

6、Windows安装客户端amd64.msi

msi安装文件自行下载:OpenVPN-2.6.8-I001-amd64.msi

也可以使用百度网盘:链接: https://pan.baidu.com/s/1JXnFgZXPRz3dpcLIJHxOvw?pwd=bg7w 提取码: bg7w 

直接安装,有两种模式,具体安装哪一种已忘记,可以都试一下,安装后目录如下:

81e76b4a882840b4aaddc322cff97c3c.png

将ca根证书、client.key、client.crt放入config目录

46dd5c9b62d84007bf4f7d7a4cfb54fc.png

编写client.ovpn文件

内容如下:

client

dev tun

proto udp

remote 公网ip 1194        #注意此处更改为openvpn服务端代码

resolv-retry infinite

nobind

ca ca.crt

cert client.crt

key client.key

verb 3

persist-key

comp-lzo

连接测试,双击打开OpenVPN(桌面快捷方式)右下角出现图标,右键连接

可以使用windows客户端,使用vpn分配的对应ip,访问已安装的OpenVPN的Linux服务端或客户端。

7、Windows安装客户端connect.msi(较6操作更便捷)

安装openvpn-connect-3.5.0.3818_signed.msi

链接: https://pan.baidu.com/s/1DWJRufbz_mrol6XFn2dj1g?pwd=xx62 提取码: xx62 

编写client.ovpn文件

内容如下:

client

dev tun

proto udp

remote 公网ip 1194        #注意此处更改为openvpn服务端代码

resolv-retry infinite

nobind

ca ca.crt

cert client.crt

key client.key

verb 3

persist-key

comp-lzo

client.ovpn文件,同级目录需要有ca.crt、client.crt、client.key

上传client.ovpn文件,输入账号密码

8、Mac安装客户端

链接: https://pan.baidu.com/s/1Gpher8QRe5opIjHvOmzx2Q?pwd=wfxw 提取码: wfxw 

下载对应软件地址:https://openvpn.net/,网络可能访问不通,

238fc3b81ea546efa3223cf5b83bec42.png

二、服务端配置用户以及用户固定ip

以上配置,客户端ip为服务端动态分配,多人使用时会经常发生变化,所以为每位同事创建了账号和密码

1、服务端,修改server.conf配置文件

#服务端,修改server.conf配置文件,增加如下配置:

client-config-dir /etc/openvpn/ccd           #允许使用自定义脚本,用户配置账号和指定ip
script-security 3                            #脚本路径
auth-user-pass-verify /etc/openvpn/check.sh via-env #用户密码登陆方式验证
client-cert-not-required
username-as-common-name
 

#编辑/etc/openvpn/check.sh 文件

#!/bin/sh

###########################################################

PASSFILE="/etc/openvpn/openvpnpass"

LOG_FILE="/etc/openvpn/logs/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

#编辑文件/etc/openvpn/openvpnpass里配置用户名和密码

vim /etc/openvpn/openvpnpass

#参考如下,前面为账号名, 后面为密码,使用空格隔开

15c33f98ebc74bceaaf3db40a0919864.png

#在ccd文件夹下创建用户名相同的文件

df041c013639424b8558a564e9c7bcc5.png

#编辑用户名文件,设置ip和网关,前面为ip,后面为网关,需成对配置,参考如下:

ifconfig-push 10.8.0.21 10.8.0.22

#ip和网关的

配置规则如下,不按规则配置会无法使用:

[  1,  2] [  5,  6] [  9, 10] [ 13, 14] [ 17, 18]

[ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]

[ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]

[ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]

[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]

[101,102] [105,106] [109,110] [113,114] [117,118]

[121,122] [125,126] [129,130] [133,134] [137,138]

[141,142] [145,146] [149,150] [153,154] [157,158]

[161,162] [165,166] [169,170] [173,174] [177,178]

[181,182] [185,186] [189,190] [193,194] [197,198]

[201,202] [205,206] [209,210] [213,214] [217,218]

[221,222] [225,226] [229,230] [233,234] [237,238]

[241,242] [245,246] [249,250] [253,254]

2、客户端使用用户名密码登录

#客户端修改client.ovpn配置文件,增加一行如下配置

auth-user-pass                  #用户密码登录是配置

#客户端重新登录opvenvpn,会提示需要输入账号密码

#Linux客户端,先停止服务,停止命令:

systemctl stop openvpn@client

#再启动,或者直接使用restart重启

systemctl start openvpn@client

#会提示输入账号密码,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值