CentOS6.7安装OpenVPN服务端

本文主要讲述如何在Linux(以CentOS6.7为例)环境中搭建VPN(OpenVPN)服务器。

OpenVPN基本介绍:

OpenVPN是开源的VPN守护进程(daemon),easy-RSA提供一些简易的CA证书工具。

VPN原理:

简单讲就是客户端主机A通过与vpn服务器B建立连接(可以是TCP也可以是UDP),通过vpn客户端在客户端主机A上创建一个虚拟网卡a(VPN客户端与VPN服务器端连接建立后形成),这个虚拟网卡a通过VPN服务器开放的端口与VPN服务器B上的另一块虚拟网卡b(VPN服务启动后形成)建立所谓的“私有连接”通道,在连接成功后,根据VPN服务器B上的配置,在客户端主机A上建一条路由,根据这一条路由使得客户机A想访问某些特定网络(特定网络可以有多条)时就走这条VPN通道,实现网络VPN实际上就是一个代理的作用,相当于一个踏板。

搭建实验环境:

实验环境可以通过VMware等虚拟化软件软件模拟,OpenVPN服务端可以单网卡也可以双网卡,单网卡无非就是在原先网卡的基础上配置一个虚拟网卡,此处以双网卡为例。

实验环境拓扑图如下:

(1)VPN客户端A:

Windows 8 + OpenVPN 2.3.4 x86_64-w64-mingw32 [SSL (OpenSSL)] [LZO] [PKCS11] [IPv6] built on Jun  5 2014

网卡1:192.168.1.228

(2)VPN服务器B:

CentOS release 6.7 (Final)

Linux localhost.localdomain 2.6.32-573.3.1.el6.x86_64 #1 SMP Thu Aug 13 22:55:16 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

OpenVPN版本:OpenVPN 2.3.8 (git source)

网卡1:192.168.1.182

网卡2:10.20.0.129

(3)服务器C(用于进一步测试VPN连通性):

网卡1:192.168.1.113(假设没有此地址,此地址与本次实验无关,之所以列出是为了不使读者阅读下面的内容时感到困惑)

网卡2:10.20.0.130

OpenVPN安装步骤:

S1.安装基本软件包,用于编译安装openvpn和解决openvpn相关的依赖包

yum -y install gcc gcc-c++    
yum -y install autoconf     
yum -y install automake     
yum -y install libtool     
yum -y install gettext     
yum -y install lzo lzo-devel     
yum -y install pam-devel

S2.从github获得OpenVPN的源码,选择一个稳定版本的分支,生成configure等文件,编译安装

git clone [email protected]:OpenVPN/openvpn.git    
git checkout -b 2.3 remotes/origin/release/2.3     
autoreconf -i -v -f     
./configure --prefix=/usr/local/openvpn     
make     
make install

S3.配置OpenVPN服务端

S3.1配置OpenVPN

cp distro/rpm/openvpn.init.d.rhel /etc/init.d/openvpn    
ln -s /usr/local/openvpn/sbin/openvpn /usr/sbin/openvpn     
mkdir /usr/local/openvpn/etc     
ln -s /usr/local/openvpn/etc /etc/openvpn     
cp sample/sample-config-files/server.conf /etc/openvpn/

S3.2编辑OpenVPN主配置文件,上一步的配置文件sample-config中的注释能帮助你很好的理解每一个字段的内容,在此就不详细讲解了,一看就懂。

vim /etc/openvpn/server.conf    
    # grep -v ^# /etc/openvpn/server.conf | grep -v ^$ | grep -v ^\;     
    port 1194     
    proto udp     
    dev tun     
    ca ca.crt     
    cert server.crt     
    key server.key  # This file should be kept secret     
    dh dh2048.pem     
    server 10.8.0.0 255.255.255.0     
    ifconfig-pool-persist ipp.txt     
    push "route 10.20.0.0 255.255.255.0"  
    push "dhcp-option DNS 114.114.114.114"     
    push "dhcp-option DNS 8.8.4.4"     
    client-to-client     
    duplicate-cn     
    keepalive 10 120     
    comp-lzo     
    persist-key     
    persist-tun     
    status openvpn-status.log     
    log         openvpn.log     
    verb 3

S4.配置OpenVPN服务器和客户端证书,使客户端通过证书登录OpenVPN

S4.1从github获得easy-RSA的源码,用于生成服务端、客户端证书,可以用openssl工具单独生成

cd    
git clone [email protected]:OpenVPN/easy-rsa.git     
git checkout -b 2.x remotes/origin/release/2.x     
cd easy-rsa/easy-rsa/2.0/

S4.2编辑证书配置信息

vim vars    
    # grep -v ^# vars | grep -v ^$     
    export EASY_RSA="`pwd`"     
    export OPENSSL="openssl"     
    export PKCS11TOOL="pkcs11-tool"     
    export GREP="grep"     
    export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`     
    export KEY_DIR="$EASY_RSA/keys"     
    echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR     
    export PKCS11_MODULE_PATH="dummy"     
    export PKCS11_PIN="dummy"     
    export KEY_SIZE=2048     
    export CA_EXPIRE=3650     
    export KEY_EXPIRE=3650     
    export KEY_COUNTRY="CN"     
    export KEY_PROVINCE="Shandong"     
    export KEY_CITY="Qingdao"     
    export KEY_ORG="51devops"     
    export KEY_EMAIL="[email protected]"     
    export KEY_OU="chris"     
    export KEY_NAME="EasyRSA"

S4.3.生成服务器证书,包括CA和Server证书

source vars     
./clean-all     
./pkitool --initca     
./pkitool --server server     
./build-dh

S4.4.生成客户端证书

# ./pkitool client-christhinkt430     
./pkitool --pkcs12 client-christhinkt430
\cp -f keys/ca.crt /etc/openvpn/    
\cp -f keys/server.crt /etc/openvpn/     
\cp -f keys/server.key /etc/openvpn/     
\cp -f keys/dh2048.pem /etc/openvpn/

S5.启动OpenVPN服务,准备测试

开启内核转发参数:

vim /etc/sysctl.conf
net.ipv4.conf.default.accept_source_route = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.ip_forward = 1

配置iptables内网转发并启动OpenVPN服务

iptables -I INPUT -m state --state NEW -m udp -p udp --dport 1194 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth1 -j MASQUERADE
service iptables save || iptables-save > /etc/sysconfig/iptables
service openvpn start

如果iptables提示nat有问题(具体问题当时没有截图和文字记录),可能是因为模块没有加载,可以通过“modprobe iptable_nat”命令加载nat模块,再通过“lsmod  | grep nat”命令确认它已经正确加载到内核中。

此处额外列一下iptables文件(/etc/sysconfig/iptables)的内容,以便于参考:

# Generated by iptables-save v1.4.7 on Tue Sep 15 09:50:41 2015   
*filter    
:INPUT ACCEPT [95751:71225675]    
:FORWARD ACCEPT [2:120]    
:OUTPUT ACCEPT [18830:1205082]    
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT    
-A INPUT -p icmp -j ACCEPT    
-A INPUT -i lo -j ACCEPT    
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT    
-A INPUT -p udp -m state --state NEW -m udp --dport 1194 -j ACCEPT    
#-A INPUT -j REJECT --reject-with icmp-host-prohibited    
#-A FORWARD -j REJECT --reject-with icmp-host-prohibited    
COMMIT    
# Completed on Tue Sep 15 09:50:41 2015    
# Generated by iptables-save v1.4.7 on Tue Sep 15 09:50:41 2015    
*nat    
:PREROUTING ACCEPT [8758:1233668]    
:POSTROUTING ACCEPT [467:144522]    
:OUTPUT ACCEPT [466:144462]    
-A POSTROUTING -s 10.8.0.0/24 -o eth1 -j MASQUERADE    
COMMIT    
# Completed on Tue Sep 15 09:50:41 2015

查看OpenVPN服务器B上的日志

OpenVPN服务器B上的网卡信息

OpenVPN 服务器上显示的Client连接日志信息

服务器B上的网卡和IP信息

OpenVPN客户端上的IP信息(上面显示子网掩码为255.255.255.252先可以忽略,不影响连接)

S6.将S4.4步骤中生成的客户端证书传输到Windows客户端上,配置Windows的OpenVPN客户端使之能连接OpenVPN服务器

客户端的证书同样也在/root/easy-rsa/easy-rsa/2.0/keys路径下,只需要client-christhinkt430.p12这个证书即可。

Windows如何安装将证书放到OpenVPN安装路径下的config文件夹下即可,并创建一个.ovpn的配置文件。配置文件内容如下:

remote 192.168.1.182 1194 udp   
persist-key    
tls-client    
pull    
dev tun    
persist-tun    
comp-lzo adaptive    
nobind    
pkcs12 client-christhinkt430.p12

用管理员权限打开OpenVPN客户端,选择“connect”即可,如果连接成功,会有如下提示信息,原先的灰色小图标也会变成绿色。

此时就可以连接OpenVPN服务器后端的内网地址了,如下图所示,表示连接成功。

简单总结:

配置OpenVPN的一些难点或技巧:

1.如果不翻墙,获取OpenVPN安装包和文档支持比较困难,可以通过github的方式解决,要通过合适的branch选择合适的release以及客户端等

2.iptables防火墙的POSTROUTING、MASQUERADE需要理解,它的原理就是通过SNAT将某一段网络的地址转化(封装、伪装)成某一个网卡上的地址,以达到内网穿透的目的

例如iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth1 -j MASQUERADE,它的意思是源地址为10.8.0.0/24网段时,将这些地址伪装成eth1网卡的地址,实现内网穿透,例如10.8.0.6(OpenVPN客户端地址)这个地址要访问10.20.0.130(服务器B地址)时,实际是通过10.20.0.129(OpenVPN服务器eth1的地址)这个地址出去的。

最后列举一些可供参考的文章:

1.Linux下OpenVPN配置  http://blog.chinaunix.net/uid-26835604-id-3484906.html    
2.iptables中SNAT、DNAT和MASQUERADE的含义 http://blog.csdn.net/jk110333/article/details/8229828    
3.Ubuntu Simple Client Configuration https://help.ubuntu.com/lts/serverguide/openvpn.html#openvpn-simple-client-configuration

tag: Linux配置OpenVPN,Linux安装OpenVPN,OpenVPN配置,OpenVPN防火墙配置,CentOS编译安装OpenVPN

--end--

时间: 2024-10-13 06:22:36

CentOS6.7安装OpenVPN服务端的相关文章

Centos6.6 安装rsync服务端

一.介绍 在工作中经常遇到代码分发,或者是资料备份,都会用到rsync,配置不算复杂,仅做下记录,安装环境如下: 1) Centos6.6 2) rsync-3.0.6-12.el6.x86_64 3) Server IP: 192.168.19.128; Client IP: 192.168.19.145 二.安装 $ yum install -y rsync xinetd$ setenforce 0 或者 echo "SELINUX=disabled" >/etc/selin

WIN2003 设置 OPENVPN 服务端

服务器端 安装openvpn 在这里http://swupdate.openvpn.org/community/releases/openvpn-install-2.3.4-I004-i686.exe下载openvpn 在服务器安装时记得勾选红框中的两个选项 安装完成后 编辑C:\Program Files (x86)\OpenVPN\easy-rsa目录下的vars.bat.sample文件,修改如下内容 然后切换到如下目录 cd /D C:\Program Files (x86)\OpenV

centos6.3安装openvpn客户端

centos6.3安装openvpn客户端 Centos 默认是没有提供Openvpn的,而且在yum 的源里面也没有openvpn ,如果想使用yum安装的话要首先安装EPEL这个东西.www.2cto.com Shell代码 wget http://apt.sw.be/redhat/el6/en/i386/rpmforge/RPMS/rpmforge-release-0.5.2-2.el6.rf.i686.rpm Shell代码 rpm -Uvh rpmforge-release-0.5.2

CentOS 7.0版本下安装SVN服务端示例

一.安装部署环境 VMBox虚拟机.CentOS 7系统.4G内存.20Gb存储空间 二.基础环境建立 1.安装VMBox虚拟机: 2.启动VMBox虚拟机,安装CentOS系统[安装过程略,注意root密码]. 3.启动CentOS系统,并登录root账号. 三.CentOS配置工程 配置CentOS网络,虚拟机CentOS可以访问外网.该步骤必须先配置DNS,否则联网更新.下载操作将会报错. 查询网络配置文件所在位置及名称:cd /etc/sysconfig/network-scripts/

cacti 自动化安装cacti服务端

#!/bin/bash # 脚本名称:自动化安装cacti服务端 # 脚本作者:昨夜星辰 # 注意事项: # 1. 该脚本适用于entOS 6.2 32位系统: # 2. 如果你已经安装了MySQL和Apache,那么该脚本可能不适用: # 3. 该脚本没有为MySQL服务的root账号设置密码,为了您的MySQL服务安全,建议您执行完该脚本后手动设置一下密码: # 4. 为了方便,该脚本没有修改cacti的默认数据库用户账号和密码,如果您只是为了测试或者学习,那么您可以不用理会,但是,如果您希

一键自动化安装mysql服务端

声明 作者:昨夜星辰 博客:http://yestreenstars.blog.51cto.com/ 本文由本人创作,如需转载,请注明出处,谢谢合作! 目的 一键自动化安装mysql服务端. 环境 OS: CentOS 6.2 32 mysql: 5.6.20 配置 #!/bin/bash # Script Name: One-key Automatic Install MySQL server # Author: yestreenstars # Create Time: 2014-08-18

CentOS 7.4安装telnet服务端

CentOS 7.4安装telnet服务端 安装xinetd服务 # yum -y install xinetd 安装telnet-server # yum -y install telnet-server telnet 修改telnet-server配置文件 [[email protected] ~]# cat /etc/xinetd.d/telnet # default: yes # description: The telnet server servestelnet sessions;

[Centos]openvpn 服务端的安装(easy-rsa3)

VPN在办公和fan墙领域有着广泛的应用,  我们小办公网最近可能会用到,先学学来着 vpn的server需要有公网ip,客户端可以在多种环境下使用 概念 PKI:Public Key Infrastructure 公钥基础设施 CA: Certificate Authority  pki的核心 https://github.com/OpenVPN/easy-rsa/tree/master/doc  这里有些简单的概念介绍 实验环境 虚拟机环境下 centos6.6 网卡 eth0 Link e

centos6.6 yum安装telnet服务端和客户端

查看telent是否安装: rpm -qa | grep telnet 查看yum源上telnet有哪些软件可安装: yum search telnet telnet服务端:telnet-server telnet客户端:telnet 安装 注意,需要root权限来安装 yum -y install telnet-server yum -y install telnet 安装服务端之后其他设备就可以telnet这台设备了(这台设备有telnet服务) 安装服务端之后这台设备就可以telnet其他