centos 搭建 openvpn server

centos 6.5 安装openvpn
内网IP:10.1××.×.×
外网IP:119.195.xxx.xxx
1、安装前准备
# 关闭selinux
setenforce 0
sed -i '/^SELINUX=/c\SELINUX=disabled' /etc/selinux/config

# 安装openssl和lzo,lzo用于压缩通讯数据加快传输速度
yum -y install openssl openssl-devel
yum -y install lzo

# 安装epel源
rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
sed -i 's/^mirrorlist=https/mirrorlist=http/' /etc/yum.repos.d/epel.repo

2、安装及配置OpenVPN和easy-rsa
# 安装openvpn和easy-rsa
yum -y install openvpn easy-rsa

# 修改vars文件
cd /usr/share/easy-rsa/2.0/
vim vars
# 修改注册信息,比如公司地址、公司名称、部门名称等。××× 下面的随便填 ×××××
export KEY_COUNTRY="CN"
export KEY_PROVINCE="Shandong"
export KEY_CITY="Qingdao"
export KEY_ORG="MyOrganization"
export KEY_EMAIL="[email protected]"
export KEY_OU="MyOrganizationalUnit"
# 初始化环境变量
source vars

# 清除keys目录下所有与证书相关的文件
# 下面步骤生成的证书和密钥都在/usr/share/easy-rsa/2.0/keys目录里
./clean-all

# 生成根证书ca.crt和根密钥ca.key(一路按回车即可)
./build-ca

# 为服务端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次)
./build-key-server server

# 每一个登陆的VPN客户端需要有一个证书,每个证书在同一时刻只能供一个客户端连接,下面建立2份
# 为客户端生成证书和密钥(一路按回车,直到提示需要输入y/n时,输入y再按回车,一共两次)
./build-key jack
./build-key client2

# 创建迪菲·赫尔曼密钥,会生成dh2048.pem文件(生成过程比较慢,在此期间不要去中断它)
./build-dh

# 生成ta.key文件(防DDos攻击、UDP淹没等恶意攻击)
openvpn --genkey --secret keys/ta.key


3、创建服务器端配置文件
# 在openvpn的配置目录下新建一个keys目录
mkdir /etc/openvpn/keys

# 将需要用到的openvpn证书和密钥复制一份到刚创建好的keys目录中
cp /usr/share/easy-rsa/2.0/keys/{ca.crt,server.{crt,key},dh2048.pem,ta.key} /etc/openvpn/keys/

# 复制一份服务器端配置文件模板server.conf到/etc/openvpn/
cp /usr/share/doc/openvpn-2.3.8/sample/sample-config-files/server.conf /etc/openvpn/
################ 查看server.conf里的配置参数 grep '^[^#;]' /etc/openvpn/server.conf

# 编辑server.conf===========server.conf=============================
vim /etc/openvpn/server.conf
port 1194 # 默认端口,可以修改
# 改成tcp,默认使用udp,如果使用HTTP Proxy,必须使用tcp协议
proto tcp
dev tun
# 路径前面加keys,全路径为/etc/openvpn/keys/ca.crt
ca keys/ca.crt
cert keys/server.crt
key keys/server.key  # This file should be kept secret
dh keys/dh2048.pem
# 默认虚拟局域网网段,不要和本地、服务器上的的局域网冲突即可 #
server 10.9.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
# ,读者应该根据自身实际情况进行修改
push "route 10.0.0.0 255.0.0.0"
# 可以让客户端之间相互访问直接通过openvpn程序转发,根据需要设置
client-to-client
# 如果客户端都使用相同的证书和密钥连接VPN,一定要打开这个选项,否则每个证书只允许一个人连接VPN
duplicate-cn
在使用OpenVPN时,有的时候需要使用VPN的DNS,有的时候却需要使用本地网络的DNS。OpenVPN可以在配置中支持DNS设置,如果是server来配置客户端DNS, 需要在配置文件中加入:
push “dhcp-option DNS 202.106.0.20″
push “dhcp-option DNS 8.8.8.8″
keepalive 10 120
tls-auth keys/ta.key 0 # This file is secret
comp-lzo
persist-key
persist-tun
# OpenVPN的状态日志,默认为/etc/openvpn/openvpn-status.log
status openvpn-status.log
# OpenVPN的运行日志,默认为/etc/openvpn/openvpn.log
log-append openvpn.log
# 改成verb 5可以多查看一些调试信息
verb 5

4、配置内核和防火墙,启动服务
# 开启路由转发功能
sed -i '/net.ipv4.ip_forward/s/0/1/' /etc/sysctl.conf (其实是在/etc/sysctl.conf 里加一句:net.ipv4.ip_forward = 1)
sysctl -p

# 配置防火墙,别忘记保存
iptables -I INPUT -p tcp --dport 1194 -m comment --comment "openvpn" -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -o eth0 -j MASQUERADE
/etc/init.d/iptables save
/etc/init.d/iptables restart
再用 iptables -L  看看

# 启动openvpn并设置为开机启动
service openvpn start
chkconfig openvpn on
    5、创建客户端配置文件( linux ) ================================================
# 复制一份client.conf模板命名为client.ovpn
cp /usr/share/doc/openvpn-2.3.8/sample/sample-config-files/client.conf client.ovpn
# 编辑client.ovpn
vim client.ovpn
client
dev tun
# 改为tcp
proto tcp
# OpenVPN服务器的外网IP和端口
remote vpn.domain.com 1194  #vpn服务器外网ip
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
# client1的证书
cert client1.crt
# client1的密钥
key client1.key

# 去掉前面的注释
tls-auth ta.key 1
comp-lzo
verb 3
up /etc/openvpn/update-resolv-conf   #下面这两句 可以 让 服务器推送的 DNS 地址到本地的/etc/resolv.conf ,当断开连接时,又会自动从 /etc/resolv.conf 清除
down /etc/openvpn/update-resolv-conf #
-------------------------------------------------------
库户端 需要复制 client1.crt , client1.key ,  ca.crt , client.conf (  client.ovpn for windows )
到 /etc/openvpn/ 目录下 ,然后执行:
$ sudo openvpn  --config client.conf  --script-security 2 #启动openvpn 客户端

u Apr 14 11:36:04 2016 ERROR: Linux route add command failed: external program exited with error status: 2
Thu Apr 14 11:36:04 2016 Initialization Sequence Completed
看到上面的就说明成功连接到openvpn 服务器了,就可以上谷歌了 ,,上面的ERROR 忽略就行。


===============下面是windows 客户端配置=======================
# 编辑client.ovpn
vim client.ovpn
client
dev tun
# 改为tcp
proto tcp
# OpenVPN服务器的外网IP和端口
remote vpn.domain.com 1194  #vpn服务器外网ip
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
# client1的证书
cert client1.crt
# client1的密钥
key client1.key

# 去掉前面的注释
tls-auth ta.key 1
comp-lzo
verb 3
dhcp-option DNS 202.106.0.20 # 这两个可以解析域名,浏览不了网页
dhcp-option SNS 8.8.8.8





--------------------------------------the following are question:solution --------------------------------------
问题:MULTI: bad source address from client [192.168.1.224], packet dropped
解决方法:
在openvpn servers 端 加入如下iptables 规则:
# iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -o eth0 -j MASQUERADE
# /etc/init.d/iptables save # 保存 规则
# /etc/init.d/iptables restart 重启iptables

2.---------------Openvpn – MULTI: bad source address from client –
-----------------solution:(add the following two line into server.conf,and restart openvpn)
client-config-dir ccd
route 192.168.1.0 255.255.255.0
××××××××××××××××××××××××××××××××××××
-

猜你喜欢

转载自jacklin2015.iteye.com/blog/2290944