Linux上的OpenVPN服务器设置

时间:2020-03-21 11:46:29  来源:igfitidea点击:

我们将在Debian Wheezy VM上设置OpenVPN服务器。

安装OpenVPN服务器

安装OpenVPN和OpenSSL软件包:

# apt-get update && apt-get install openvpn openssl liblzo2-2 lzop

公钥基础结构设置

创建一个目录来存储日志:

# mkdir /var/log/openvpn

创建一个单独的目录来保存脚本,证书和密钥,以确保在更新OpenVPN软件包时不会丢失对脚本的任何更改:

# mkdir /etc/openvpn/easy-rsa

复制示例目录中的所有内容:

# cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa/

检查OpenSSL版本

# openssl version
OpenSSL 1.0.1e 11 Nov 2013
# dpkg -s openssl | grep -i version
Version: 1.0.1e-2

[编辑:2014年4月]此版本的OpenSSL受Heartbleed错误的影响。

适当修改配置文件

强制OpenVPN使用OpenSSL 1.0:

# vim /etc/openvpn/easy-rsa/vars
 #comment out the line below
 #export EASY_RSA="`pwd`" 
 export EASY_RSA="/etc/openvpn/easy-rsa"
 #comment out the line below
 #export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA`
 export KEY_CONFIG="$EASY_RSA/openssl-1.0.0.cnf"
 export KEY_SIZE=1024 #change RSA key to 2048 if paranoid
 #set some applicable values
 export KEY_COUNTRY="GB"
 export KEY_PROVINCE="London"
 export KEY_CITY="London"
 export KEY_ORG="Example"
 export KEY_EMAIL="Hyman@theitroad"

生成主证书颁发机构(CA)证书和密钥

# cd /etc/openvpn/easy-rsa
# source vars 
# ./clean-all
# ./build-ca

创建服务器证书

# ./build-key-server deb-server

生成Diffie Hellman参数(如果使用2048键大小,则可能需要很长时间):

# ./build-dh

证书和密钥已在子目录“/etc/openvpn/easy-rsa/keys”中生成。
常见的做法是将它们复制到'/etc/openvpn'中:

# cd /etc/openvpn/easy-rsa/keys 
# cp ./deb-server.crt ./deb-server.key ./ca.crt ./dh1024.pem /etc/openvpn

创建客户证书

我们将为用户Sandy生成证书:

# cd /etc/openvpn/easy-rsa
# source vars
# ./build-key sandy

使用安全方法(即SCP)将以下文件复制到Sandy的计算机上:

/etc/openvpn/ca.crt
/etc/openvpn/easy-rsa/keys/sandy.crt
/etc/openvpn/easy-rsa/keys/sandy.key

客户端证书和密钥仅在客户端计算机上是必需的,因此一旦复制就可以将其从服务器中删除:

# rm /etc/openvpn/easy-rsa/keys/sandy.crt
# rm /etc/openvpn/easy-rsa/keys/sandy.key

OpenVPN服务器配置

我们需要首先复制默认服务器配置文件:

# cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn

解压缩:

# gunzip /etc/openvpn/server.conf.gz

打开并修改服务器的配置文件,使其看起来像这样:

# cat /etc/openvpn/server.conf
#listen on IPv4
local 0.0.0.0
#we use a non-default port
port 11194
#UDP protocol chosen for better protection against DoS attacks and port scanning
proto udp
#using routed IP tunnel
dev tun
#full paths to keys and certificates
ca /etc/openvpn/ca.crt
cert /etc/openvpn/deb-server.crt
key /etc/openvpn/deb-server.key
dh /etc/openvpn/dh1024.pem
#set OpenVPN subnet
server 10.26.0.0 255.255.255.0
#maintain a record of client-to-virtual-IP-address
ifconfig-pool-persist ipp.txt
#ping every 10 seconds, assume that remote peer is down if no ping received during 60
keepalive 10 60
#cryptographic cipher, must be the same (copied) on the client config file as well
cipher AES-256-CBC
#enable compression on VPN link
comp-lzo
max-clients 10
#downgrade daemon privileges (non-Windows only)
user nobody
group nogroup
#try to preserve some state across restarts
persist-key
persist-tun
#log files
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
log-append /var/log/openvpn/openvpn.log
#log file verbosity
verb 3

启动OpenVPN服务器

注意:必须在防火墙上打开UDP端口11194,否则客户端将无法连接。

启用内核模块:

# modprobe tun

启动OpenVPN服务:

# service openvpn start

如果打开,请检查OpenVPN tun接口:

# ifconfig tun
tun0

Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00

inet addr:10.26.0.1  P-t-P:10.26.0.2  Mask:255.255.255.255

UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:100

RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

注意:OpenVPN服务器始终使用客户端网络中的第一个可用IP地址,并且只有该IP可以ping通。
当我们为客户端网络掩码配置了/24时,将使用.1地址(在本例中为10.26.0.1)。
我们在上面的ifconfig输出中看到的P-t-P地址通常不回答ping请求。

服务器现在应该在UDP 11194端口上侦听:

# netstat -nlup
Active Internet connections (only servers)
Proto Recv-Q Send-Q  Local Address   Foreign Address  State PID/Program name
udp   0

0

0.0.0.0:11194   0.0.0.0:*

29821/openvpn

就这样,OpenVPN服务器已经配置好了。
现在,我们可以继续进行操作,并在Sandy的计算机上设置OpenVPN Linux客户端。