人人FED

专注于前端技术

史上坑最少的openVPN搭建

为什么要搭建vpn

  • 单独购买vpn服务器的成本比较高,可以在公司现有的服务器上搭建vpn服务
  • 可以在任何有网络的地方访问到公司资源,比使用跳板机和高端口访问要安全
  • 爱折腾的小伙伴可以搭建vpn来满足自己的技术需求

选择

  • vpn种类有这么多,有PPTP协议,有L2TP协议, 有OpenVPN 如何进行选择?
    首先先看下对比:https://cn.giganews.com/vyprvpn/compare-vpn-protocols.html
  • 看了上面的对比之后,选择了OpenVPN做为首选的vpn协议,还有一个最主要的原因是安装方法比较简单。

下面开始介绍如何一步一步搭建vpn (centos版本):

centos安装服务端

  • 我的服务器是centos 6.8版本的,亲测6.4无法安装openvpn,亲测5不能运行安装脚本
  • 服务器并且拥有固定的内网ip, 和一个外网ip
  • 然后在网上找了一大坨安装文档,第一感觉是太复杂,后面发现在github上有一键安装的脚本:https://github.com/Nyr/openvpn-install
  • 果断clone之,然后把shell放到服务器上进行执行,(1)输入ip地址:由于服务器上只能获得到内网ip,所以这里填写内网ip,(2)输入端口,有默认端口:1194(首先确保该端口已经允许访问,我安装的时候因为1194未开放,所以导致客户端无法连接vpn)(3)如果有外网ip,并且和内网ip不一致,程序会提示要你输入外网ip,输入回车就可以了,否则没有这一步。
  • 安装完成以后会生成一个.ovpn结尾的文件,这个文件是给客户端使用的。
  • 看一下1194端口是否被启动(netstat -anp | grep 1194),如果启动了就证明openvpn的服务端顺利启动了,接下来就是安装客户端了。

安装客户端

  • mac用户请自行下载Tunnerblick,安装完成之后,将服务端生成的rrjf.ovpn文件导入(此文件名是我自己设定的)。
  • windows用户请下载OpenVPN,安装完成之后将rrjf.ovpn复制到OpenVPN的安装目录的config中,例如:“C:\Program Files\OpenVPN\config”。导入完成之后,以“管理员身份运行”即可。
  • 启动openvpn的客户端进行连接(无法连接原因如下:1、udp方式不允许,可修改为tcp方式 2、上面的默认端口未开放,更换开放的端口)
  • 顺利的话就应该可以通过内网ip进行访问服务器了。

设置用户名/密码登录即User/Pass登录

  • 修改openvpn的配置文件,即安装目录里面的server.conf,在配置文件里面添加如下几行:

        auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env

        client-cert-not-required

        username-as-common-name

        script-security 3

  • 添加完毕之后请重启openvpn服务,sercice openvpn restart (不同的centos系统,命令不一样,具体请自行百度)
  • 添加验证脚本checkpsw.sh,下载后添加到步骤一第一行你设定的目录中。注意修改PASSFILE、LOG_FILE这两个参数,PASSFILE路径保持和server.conf在同一级目录即可,LOG_FILE这个参数推荐使用默认参数
  • chmod +x /etc/openvpn/checkpsw.sh,# 给脚本添加执行权限
  • mkdir -p /var/log/openvpn   touch /var/log/openvpn/openvpn-password.log # 创建目录以及日志文件,用来记录用户名密码认证产生的日志
  • echo “test 123456” >>/etc/openvpn/psw-file   chmod 400 /etc/openvpn/psw-file       # 创建用户名密码文件,并修改权限
  • 修改客户端文件 注释掉cert和key(客户端不需要crt和key文件,但是需要服务器的CA证书);cert eva.crt  ;key eva.key(如果在客户端配置中没有找到则不用修改)在最后一行添加如下内容  auth-user-pass

过程中遇到的坑

  • 使用client去连接server端发现能够连上vpn,但是连不上internet。是因为此脚本默认的dns是读取服务器上/etc/resolv.conf的内容,如果安装完毕之后不能上网,自行修改server.conf为如下即可   (push “dhcp-option DNS 8.8.8.8”  push “dhcp-option DNS 8.8.4.4”)。
  • udp方式无法连接,采用的tcp方式。原因未知,可能是防火墙问题
  • 日志写入问题 checkpsw.sh 脚本是用来读取用户名和密码以及写入登录日志,当一切都搞定之后发现无法写入日志,修改权限即可(因为不知道当前操作用户,所以赋予了最高权限)

目录: 基础技术

8 回复

  1. 终于能用了。。。

    我们公司是udp协议不能用,换tcp协议就Ok了

  2. 卧槽!找遍全网只有你这个帮到我了!!!!!!

  3. 你好,checkpsw脚本我下载不了 所以我在百度找到了一个使用,但是一直提示我账号或密码错误,请问可以加你联系方式帮我解决吗 谢谢

  4. 你好,checkpsw.sh脚本我下载不了 所以我在百度找到了一个使用,但是一直提示我账号或密码错误,请问可以加你联系方式帮我解决吗 谢谢

  5. checkpsw.sh这个脚本下不了啊

  6. 我的OpenVPN连接成功,但访问不走VPN,后来在Server配置中添加了客户端默认路由,然后,就本地连不上外网了,但VPN显示正常,还是连不上服务器内网IP

  7. windows server 怎么安装openvpn?感觉都是centos的?

Trackbacks

  1. 2017-09-26 前端日報 - 程序員的後花園

mr li进行回复 取消回复

邮箱地址不会被公开。 必填项已用*标注