一、服务端配置

1、 安装依赖包和openvpn

yum install openssl openssl-devel lzo lzo-devel pam pam-devel automake pkgconfig  -y

yum install openvpn

 

2、生成服务器、客户端证书

#2.3版本需要独立下载个easy-rsa,该包用来制作ca证书,服务端证书,客户端证书

wget -c   https://github.com/Open×××/easy-rsa/archive/master.zip

unzip master.zip

mv easy-rsa-master easy-rsa

cp -rf  easy-rsa /etc/openvpn

cd   /etc/openvpn/easy-rsa/easyrsa3

cp vars.example vars  #一般情况下,默认的配置可以满足需求,也可以根据需要修改

./easyrsa init-pki   #建立一个空的pki结构,生成一系列的文件和目录

./easyrsa build-ca   #创建ca  密码 和 cn那么需要记住

./easyrsa gen-req server   nopass  #创建服务端证书  common name 最好不要跟前面的cn那么一样

./easyrsa sign server   server   #签约服务端证书

./easyrsa gen-dh  #创建Diffie-Hellman

 

#下面是客户端的证书

#首先创建一个工作的目录

cd /home/

mkdir client && cd   client

cp -R ~/easy-rsa/ ./   #这是解压过的easy-rsa 而不是生成了服务端证书的easy-rsa

cd easy-rsa/easyrsa3/

cp vars.example vars

 

#开始生成

./easyrsa init-pki

./easyrsa gen-req estate   nopass #用自己的名字,如果创建了密码需要记住, cn name是用来区分客户端的,在对客户端做一些控制的时候会有用

 

#现在客户端的证书要跟服务端的交互,也就是签约,这样这个用户才能使用此vpn

#切换到server证书目录下

cd /etc/openvpn/easy-rsa/easyrsa3/  

./easyrsa import-req   /home/client/easy-rsa/easyrsa3/pki/reqs/estate.req esate   #导入req

./easyrsa sign client esate  #用户签约,根据提示输入服务端的ca密码

根据以上操作形成以下文件:

CA证书与私钥

/etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt

/etc/openvpn/easy-rsa/easyrsa3/pki/private/ca.key

服务端证书与私钥

/etc/openvpn/easy-rsa/easyrsa3/pki/private/server.key

/etc/openvpn/easy-rsa/easyrsa3/pki/issued/server.crt

客户端证书与私钥

/etc/openvpn/easy-rsa/easyrsa3/pki/issued/estate.crt

/home/client/easy-rsa/easyrsa3/pki/private/estate.key

DHM

/etc/openvpn/easy-rsa/easyrsa3/pki/dh.pem

 

3、配置openvpn

3.1 将服务端证书与私钥和CA证书复制到/etc/openvpn/server目录

cd   /etc/openvpn/easy-rsa/easyrsa3/pki

cp  ./private/server.key /etc/openvpn/server

cp ./issued/server.crt  /etc/openvpn/server

cp  ./ca.crt /etc/openvpn/server

cp  ./dh.pem /etc/openvpn/server

 

3.2 server端配置

vim /etc/openvpn/server.conf  

local 0.0.0.0

port 1174  #监听端口

proto udp

dev tun

ca /etc/openvpn/server/ca.crt

cert   /etc/openvpn/server/server.crt

key   /etc/openvpn/server/server.key  # This   file should be kept secret

dh /etc/openvpn/server/dh.pem

server 10.8.0.0 255.255.255.0   #分配给客户端的IP段

ifconfig-pool-persist ipp.txt

push "route   192.168.1.0 255.255.255.0"   #增加内网访问的路由

client-config-dir ccd    #指定客户端的IP,根据客户端的common name 匹配ccd目录下的文件名,并读取文件相关内容

duplicate-cn

keepalive 10 120

cipher AES-256-CBC

persist-key

persist-tun

status openvpn-status.log

log         /var/log/openvpn.log

verb 3

explicit-exit-notify 1

 

4.3 控制客户端IP

控制common name为estate的客户端IP地址,其他common name随机分配

cat  /etc/openvpn/ccd/estate

ifconfig-push 10.8.0.5 10.8.0.6          

或者写成以下方式:

ifconfig-push 10.8.0.200 255.255.255.0

 

特别注意: 
ifconfig-push中的每一对IP地址表示虚拟客户端和服务器的IP端点。它们必须从连续的/30子网网段中获取(这里是/30表示xxx.xxx.xxx.xxx/30,即子网掩码位数为30),以便于与Windows客户端和TAP-Windows驱动兼容。明确地说,每个端点的IP地址对的最后8位字节必须取自下面的集合:

[1,2] [5, 6] [9, 10] [13,   14] [17, 18] [ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38] [ 41, 42] [ 45,   46] [ 49, 50] [ 53, 54] [ 57, 58] [ 61, 62] [ 65, 66] [ 69, 70]   [ 73, 74] [ 77, 78] [ 81, 82] [ 85, 86] [   89, 90] [ 93, 94] [ 97, 98] [101,102] [105,106]   [109,110] [113,114] [117,118] [121,122]   [125,126] [129,130] [133,134] [137,138] [141,142] [145,146] [149,150]   [153,154] [157,158] [161,162] [165,166] [169,170]   [173,174] [177,178] [181,182] [185,186]   [189,190] [193,194] [197,198] [201,202]     [205,206] [209,210] [213,214] [217,218] [221,222] [225,226] [229,230]   [233,234] [237,238] [241,242] [245,246] [249,250] [253,254]

 

4、开启×××服务器路由转发功能

echo 1 > /proc/sys/net/ipv4/ip_forward

/sbin/iptables -t nat -A   POSTROUTING -o eth0 -j MASQUERADE

iptables -L -n -t nat   #查看NAT表,其他表有filter、mangle

 

5、客户端访问控制(在服务端配置,以控制10.8.0.5为例)

#只转发217的80和443端口,其他都拒绝

iptables -A FORWARD -i tun0   -s 10.8.0.5 -d 192.168.1.217 -p tcp --dport    80 -j ACCEPT

iptables -A FORWARD -i tun0   -s 10.8.0.5 -d 192.168.1.217 -p tcp --dport    443 -j ACCEPT

iptables -A FORWARD -i tun0   -s 10.8.0.5 -j DROP


6、启动openvpn

systemctl restart openvpn@server.service


二、客户端配置

client      

dev tun

proto udp

remote vpn公网地址 1174   #vpn外网地址

resolv-retry infinite

nobind

persist-key

persist-tun

ca   /Users/mac/Downloads/openssl/key/ca.crt      #相应的证书

cert   /Users/mac/Downloads/openssl/estate/estate.crt

key   /Users/mac/Downloads/openssl/estate/estate.key

remote-cert-tls server

cipher AES-256-CBC

verb 3