- 01
- 10月
本文介绍如何在 CentOS 6 系统下安装 OpenVPN 服务器。
目录
1 环境检测
要使用 OpenVPN 需要检测 tun/tap 是否可用:
cat /dev/net/tun
若 tun 可用你会看到下面的信息:
cat: /dev/net/tun: File descriptor in bad state
2 安装 OpenVPN
默认情况下 CentOS 的 yum 源是没有 OpenVPN 的,需要添加第三方仓库才能安装。安装 EPEL(Extra Packages for Enterprise Linux) 这个东西后, yum 源里面就有 OpenVPN 了。
2.1 安装 EPEL
32位系统:
wget http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
64位系统:
wget http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm
2.2 安装 RPMForge
当然,你也可以使用另一个第三方仓库来安装 OpenVPN。
32位系统:
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.i686.rpm
rpm -Uvh rpmforge-release*
64位系统:
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
rpm -Uvh rpmforge-release*
2.3 安装 OpenVPN
yum install openvpn -y
3 使用 easy-key 生成密钥和证书
CentOS 6 系统升级后,如果安装的是 OpenVPN 2.3 版本,则不包含 easy-key ,需要另外安装。
cd /tmp
wget https://github.com/downloads/OpenVPN/easy-rsa/easy-rsa-2.2.0_master.tar.gz
tar -xvf easy-rsa-2.2.0_master.tar.gz
cp /tmp/easy-rsa-2.2.0_master/easy-rsa/ /etc/openvpn/
这里需要做一个小小的改动,把:
export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
改为:
export KEY_CONFIG=/etc/openvpn/easy-rsa/2.0/openssl-1.0.0.cnf
下面我们开始生成证书:
cd /etc/openvpn/easy-rsa/2.0
chmod 755 *
source ./vars
./clean-all
生成 CA 证书(这步可以一路按回车):
./build-ca
Country Name: may be filled or press enter
State or Province Name: may be filled or press enter
City: may be filled or press enter
Org Name: may be filled or press enter
Org Unit Name: may be filled or press enter
Common Name: your server hostname
Email Address: may be filled or press enter
生成服务端密钥和证书( key server ):
./build-key-server server
前面的选项和 ./build-ca 相同,但请注意下面的信息(注意最后那两个输入 y 的选项):
Common Name: server
A challenge password: leave
Optional company name: fill or enter
sign the certificate: y
1 out of 1 certificate requests: y
生成 Diffie Hellman (时间稍微有点长):
./build-dh
4 配置 OpenVPN
编辑 /etc/openvpn/server.conf ,加入下面的内容:
port 1194 #- port
proto udp #- protocol
dev tun
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
reneg-sec 0
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
plugin /usr/share/openvpn/plugin/lib/openvpn-auth-pam.so /etc/pam.d/login #- Comment this line if you are using FreeRADIUS
#plugin /etc/openvpn/radiusplugin.so /etc/openvpn/radiusplugin.cnf #- Uncomment this line if you are using FreeRADIUS
client-cert-not-required
username-as-common-name
server 10.8.0.0 255.255.255.0
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
keepalive 5 30
comp-lzo
persist-key
persist-tun
status 1194.log
verb 3
注解
dh1024.pem 如果找不到需要改为 dh2048.pem 。
5 配置路由并启动 OpenVPN
5.1 关闭 SELinux
临时关闭:
echo 0 > /selinux/enforce
长期关闭:
编辑 /etc/selinux/config 修改 SELINUX 值为 disabled :
SELINUX=disabled
5.2 启用 IP 路由转发功能
编辑 /etc/sysctl.conf 文件并把 net.ipv4.ip_forward 值设为 1.
net.ipv4.ip_forward = 1
然后执行下面的命令使刚才的设置生效:
sysctl -p
5.3 启动 OpenVPN
service openvpn start
chkconfig openvpn on
5.4 路由转发规则
开放 1194 端口并添加路由转发规则:
iptables -A INPUT -p udp --dport 1194 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source 123.123.123.123
注解
123.123.123.123 是 VPS 的公网 IP 。
若 FORWARD chain 被 DROP ,则需要增加下面两个规则:
iptables -A FORWARD -s 10.8.0.0/24 -j ACCEPT
iptables -A FORWARD -d 10.8.0.0/24 -j ACCEPT
6 客户端登录
OpenVPN 需要下载专门的客户端,这在官网就可以下载。
一般有两种登录方式: 用户名密码登录和证书登录。
6.1 用户名密码登录
创建用户:
useradd username -s /bin/false
passwd username
删除用户:
userdel username
创建 server.ovpn 配置文件,并添加如下内容:
client
dev tun
proto udp
remote 123.123.123.123 1194 # - Your server IP and OpenVPN Port
resolv-retry infinite
nobind
tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
persist-key
persist-tun
ca ca.crt
auth-user-pass
comp-lzo
reneg-sec 0
verb 3
123.123.123.123 是 VPS 公网 IP 。
登录时需要把 ca.crt 和 server.ovpn 拷贝到 OpenVPN 客户端配置文件目录里。
参考文档: