1. yum安装openvpn (亲测环境Centos 6.8)
- 配置yum源
1.卸载之前安装的epel rpm -e epel-release 2.下载阿里提供的epel wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-6.repo yum clean all yum makecache 3.更改阿里云源 rm -rf /etc/yum.repos.d/* wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-6.repo http://mirrors.aliyun.com/repo/Centos-6.repo yum repolist 已加载插件:fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.aliyun.com * epel: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.aliyun.com yum install -y epel-release
2.时间同步
yum -y install ntpdate ntpdate time.windows.com
3.安装openvpn
yum install -y openvpn easy-rsa 初始化服务端 cp /usr/share/doc/openvpn-2.3.11/sample/sample-config-files/server.conf /etc/openvpn/ cp -r /usr/share/easy-rsa/2.0/* /etc/openvpn/ 注:(openvpn-2.3.11这个目录是以当前openvpn版本命名的) 配置PKI cd /etc/openvpn/ vim vars 找到”export KEY_SIZE=”这行,根据情况把1024改成2048或者4096 再定位到最后面,会看到类似下面这样的 export KEY_COUNTRY=”US” export KEY_PROVINCE=”CA” export KEY_CITY=”SanFrancisco” export KEY_ORG=”Fort-Funston” export KEY_EMAIL=”me@myhost.mydomain“ 更改为: xport KEY_COUNTRY=”CN” export KEY_PROVINCE=”SH” export KEY_CITY=”Shanghai” export KEY_ORG=”xxx” export KEY_EMAIL=”xxx@xxx.cn“ 注:在后面生成服务端ca证书时,这里的配置会作为缺省配置 做SSL配置文件软链: ln -s openssl-1.0.0.cnf openssl.cnf 修改vars文件可执行并调用 chmod +x vars
产生证书
source ./vars
- NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/keys
注:也就是如果执行./clean-all,就会清空/etc/openvpn/keys下所有文件
配置证书
1.清空原有证书 ./clean-all 注:下面这个命令在第一次安装时可以运行,以后在添加完客户端后慎用,因为这个命令会清除所有已经生成的证书密钥,和上面的提示对应 2.生成服务器端ca证书 ./build-ca (一路回车即可)
产生服务器证书
./build-key-server openvpn 生成服务器端密钥证书, 后面这个openvpn就是服务器名,也可以自定义,可以随便起,但要记住,后面要用到
生成DH验证文件
./build-dh 生成diffie hellman参数,用于增强openvpn安全性
生成客户端证书
./build-key wanglei
生成ta.key文件
openvpn --genkey --secret /etc/openvpn/keys/ta.key
编辑服务配置文件
vim /etc/openvpn/server.conf 注:可按照默认模板配置,本例为自定义配置文件: # 设置监听IP,默认是监听所有IP ;local a.b.c.d # 设置监听端口,必须要对应的在防火墙里面打开 port 1194 # 设置用TCP还是UDP协议? ;proto tcp proto tcp # 设置创建tun的路由IP通道,还是创建tap的以太网通道,由于路由IP容易控制,所以推荐使用tunnel; # 但如果如IPX等必须使用第二层才能通过的通讯,则可以用tap方式,tap也就是以太网桥接 ;dev tap dev tun # 这里是重点,必须指定SSL/TLS root certificate (ca), # certificate(cert), and private key (key) # ca文件是服务端和客户端都必须使用的,但不需要ca.key # 服务端和客户端指定各自的.crt和.key # 请注意路径,可以使用以配置文件开始为根的相对路径, # 也可以使用绝对路径 # 请小心存放.key密钥文件 ca keys/ca.crt cert keys/openvpn.example.com.crt key keys/openvpn.example.com.key # This file should be kept secret # 指定Diffie hellman parameters. (默认是2048,如果生成ca的时候修改过dh参数“export KEY_SIZE”则改为对应的数字) dh keys/dh2048.pem # 配置VPN使用的网段,OpenVPN会自动提供基于该网段的DHCP服务,但不能和任何一方的局域网段重复,保证唯一 server 10.20.0.0 255.255.255.0 # 维持一个客户端和virtual IP的对应表,以方便客户端重新连接可以获得同样的IP ifconfig-pool-persist ipp.txt # 为客户端创建对应的路由,以另其通达公司网内部服务器 # 但记住,公司网内部服务器也需要有可用路由返回到客户端 ;push "route 192.168.20.0 255.255.255.0" push "route 10.X.0.0 255.255.0.0" (X按照机房网段修改) # 若客户端希望所有的流量都通过VPN传输,则可以使用该语句 # 其会自动改变客户端的网关为VPN服务器,推荐关闭 # 一旦设置,请小心服务端的DHCP设置问题 ;push "redirect-gateway def1 bypass-dhcp" # 用OpenVPN的DHCP功能为客户端提供指定的DNS、WINS等 ;push "dhcp-option DNS 208.67.222.222" ;push "dhcp-option DNS 208.67.220.220" # 默认客户端之间是不能直接通讯的,除非把下面的语句注释掉 client-to-client # 下面是一些对安全性增强的措施 # For extra security beyond that provided by SSL/TLS, create an "HMAC firewall" # to help block DoS attacks and UDP port flooding. # # Generate with: # openvpn --genkey --secret ta.key # # The server and each client must have a copy of this key. # The second parameter should be 0 on the server and 1 on the clients. ; tls-auth ta.key 0 # This file is secret (这句要注释掉) # 使用lzo压缩的通讯,服务端和客户端都必须配置 comp-lzo # 输出短日志,每分钟刷新一次,以显示当前的客户端 status /var/log/openvpn/openvpn-status.log # 缺省日志会记录在系统日志中,但也可以导向到其他地方 # 建议调试的使用先不要设置,调试完成后再定义 log /var/log/openvpn.log log-append /var/log/openvpn.log # 设置日志的级别 # # 0 is silent, except for fatal errors # 4 is reasonable for general usage # 5 and 6 can help to debug connection problems # 9 is extremely verbose verb 3
启动服务
service openvpn start chkconfig openvpn on(开机启动)
开启路由转发功能
找到net.ipv4.ip_forward = 0 (改为1) sysctl -p
设置路由转发
iptables -t nat -A POSTROUTING -s 10.20.0.0/24 -o eth0 -j MASQUERADE
客户端配置
- 将服务器端生成的key(ca.crt,client.crt,client.key,ta.key)下载到本地。
- 进入客户端OpenVPN目录,将sample-config下的client.ovpn文件复制到config目录
client端做相应的修改: client dev tun proto udp remote xxx.xxx.xxx.xxx 1194 ca ca.crt cert xxx.crt key xxx.key ; tls-auth ta.key 0 (这句要注释掉) comp-lzo persist-key persist-tun
将key和新建的client.ovpn放到C:/Program Files/OpenVPN/config目录下,到桌面双击openvpn图标即可。
openvpn 设置用户名密码登录
- 修改主配置文件
vim /etc/openvpn/server.conf 添加: auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env client-cert-not-required username-as-common-name
checkpsw.sh脚本编写
#!/bin/sh ########################################################### # checkpsw.sh (C) 2004 Mathias Sundman# # 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/psw-file" 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
添加权限
chmod +x checkpsw.sh
注:需根据openvpn路径来设置脚本中 PASSFILE ,LOG_FILE是指定OPENVPN密码文件日志
准备用户名密码认证文件
vim /etc/openvpn/psw-file wanglei 123456 chmod 400 psw-file chown nobody:nobody psw-file
在客户端注释掉 crt key 两个证书密钥,并且加上
auth-user-pass
转载请注明:暖风 » Centos 搭建 OpenVPN