1.环境:

一台H3C路由器接入外网,有公网IP,内网一台linux(CentOS7.0)做OpenVPN服务器,路由器配了静态NAT。(如果IP紧张,也可以做端口映射。)

2.目标:

证书认证的内网OpenVPN。

3.步骤:

OpenVPN服务器:

1.CentOS7采用了最新的firewalld机制替代了iptables(默认iptables服务未安装),为了方便使用一下命令直接关掉。

systemctl stop firewalld

systemctl disable firewalld

systemctl stop iptables(CentOS7默认没启用iptables) 所需软件(软件后续更新链接):

https://static.saintic.com/download/thirdApp/OpenVPN/openvpn-2.1_rc21.tar.gz

https://static.saintic.com/download/thirdApp/OpenVPN/openvpn-2.1_rc21_eurephia.patch

2.安装软件生成证书

yum -y install pam-devel openssl-devel lzo-devel automake gcc gcc-c++ patch

yum install -y pkcs11-helper pkcs11-helper-devel

过程:(先同步时间!ntpdate ntp.pool.org)

tar zxf openvpn-2.1_rc19.tar.gz ; cd openvpn-2.1_rc19

patch -p1 < ../openvpn-2.1_rc21_eurephia.patch

./configure && make && make install

cd easy-rsa/2.0/

vim vars ; source ./vars ##修改默认国家、组织、邮件等,可不修改

./clean-all

./build-ca ##创建根证书,可以加上--batch免交互确认

./build-key-server server ##创建服务器证书,可以加上--batch免交互确认(./build-key-server --batch server)

./build-dh ##使用DH加密

./build-key client ##创建客户端证书,可以加上--batch免交互确认或使用./pkitool client

cd keys

mkdir /etc/openvpn

cp ca.crt ca.key dh1024.pem server.key server.crt client.* ../../../sample-config-files/server.conf /etc/openvpn

cp ../../../sample-scripts/openvpn.init /etc/init.d/openvpn

chkconfig --add openvpn

chkconfig openvpn on

3.修改配置文件/etc/openvpn/server.conf

;local

port 1194

proto udp

dev tun

ca ca.crt

cert server.crt

key server.key

dh dh1024.pem

server 192.168.234.0 255.255.255.0

ifconfig-pool-persist ipp.txt

push “route 192.168.1.0 255.255.255.0” ##向客户端推送内网网段

push “route 192.168.234.0 255.255.255.0” ##推送VPN网段

push “dhcp-option DNS 192.168.1.153” ##推送首选DNS,可以多个

push “dhcp-option DNS 114.114.114.114”

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

duplicate-cn

keepalive 10 120

comp-lzo

user nobody ##默认的程序用户,建议以低权限账户运行

group nobody

persist-key

persist-tun

status openvpn-status.log

log openvpn.log

verb 3

4.开启转发,并关闭防火墙和 SELinux

vim /etc/sysctl.conf #修改net.ipv4.ip_forward = 0

net.ipv4.ip_forward = 1

sysctl -p ##让sysctl.conf生效

vim /etc/sysconfig/selinux

SELINUX=disabled

reboot #修改了SELinux需要reboot,临时禁用SELinux使用setenforce 0

5. iptables转发规则

    centos7,需要安装iptables的服务, yum install iptables-services -y

    需要所有流量通过vpn出口时server.conf添加一条 push "redirect-gateway def1 bypass-dhcp",添加iptables规则, iptables -t nat -A POSTROUTING -s 192.168.234.0/24 -o 出口网卡 -j MASQUERADE

6.H3C路由器:

添加一条VPN内网路由,下一跳指向OpenVPN服务器!

客户端配置:

win7 win8安装https://static.saintic.com/download/thirdApp/OpenVPN/openvpn-install-2.3.6-I601-x86_64.exe

winxp安装https://static.saintic.com/download/thirdApp/OpenVPN/openvpn-2.0.9-gui-1.0.3-install-FOR_-XP.exe

将./build-key client这一步产生的client.crt client.key ca.crt复制到客户端安装目录下的config/

将安装目录下的sample-config/client.ovpn复制到config/下,修改其中的remote VPN-SERVER-IP Port,即remote OpenVPN服务器IP 端口(默认是1194)

然后以管理员身份启动OpenVPN GUI,避免无法创建路由问题。


附录一个一键部署openvpn的脚本:

https://github.com/staugur/scripts/blob/master/services/openvpn.sh

# 自行下载,可能需要根据注释修改些变量。

# 脚本并没有一键完成所有,您还要按需配置。


·End·