Thursday, June 20, 2019

CentOS 7安裝配置OpenVPN Server

這篇文章描述了如何在CentOS 7 服務器上安裝與配置OpenVPN服務器,以及如何編寫客戶端連接到新建立的OpenVPN服務器上所需的配置文件。

由於OpenVPN Server不在默認源中,所以需要安裝Extra Packages for Enterprise Linux (EPEL) 倉庫,其中包含有OpenVPN的包。

1 添加EPEL源

wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh epel-release-latest-7.noarch.rpm

2 安裝OpenVPN

首先從EPEL安裝OpenVPN:

yum install openvpn -y

從示例配置文件複製一份配置文件到/etc/openvpn

cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn

打開/etc/openvpn/server.conf編輯:

vim /etc/openvpn/server.conf

取消以下5個語句的注釋:

push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
user nobody
group nobody

3 使用easy-rsa生成證書及密鑰

完成了對於配置文件的修改之後,我們接下來生成keys和certificates.

由於OpenVPN-2.3.2中沒有了示例的easy-rsa相關文件,我們首先需要安裝它:

yum install easy-rsa

將相關文件複製到OpenVPN的配置目錄:

cp -R /usr/share/easy-rsa/ /etc/openvpn

現在有關的文件都在/etc/openvpn/easy-rsa/2.0/這個目錄中。

3.1 調整easy-rsa密鑰生成配置

首先需要修改的是vars文件

vim /etc/openvpn/easy-rsa/2.0/vars

將以下這些值修改成你自己的值:

export KEY_COUNTRY="US"
export KEY_PROVINCE="NY"
export KEY_CITY="New York"
export KEY_ORG="Organization Name"
export KEY_EMAIL="[email protected]"
export KEY_CN=droplet.example.com
export KEY_NAME=server
export KEY_OU=server

另外這中間還有KEY_SIZE,可以自己修改,不過需要與之後的配置文件對應,默認為1024

export KEY_SIZE=1024

修改完成之後,執行source ./vars, 清空目錄並生成Certificate Authority(CA):

cd /etc/openvpn/easy-rsa/2.0
source ./vars

3.2 生成密鑰

3.2.1 生成CA, 服務器證書及密鑰

在/etc/openvpn/easy-rsa/2.0目錄中執行:

./clean-all
./build-ca

執行完成之後在/etc/openvpn/easy-rsa/2.0/keys目錄中產生了CA,接下來為服務器生成密鑰:

./build-key-server server

有了服務器密鑰,再生成Diffie Hellman key exchange文件,這裡生成的長度由之前的KEY_SIZE決定:

./build-dh

執行完成會產生dh1024.pem (如果你的KEY_SIZE = 2048,這裡產生的文件是dh2048.pem)

將四個所需文件複製到OpenVPN配置目錄中去:

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

3.2.2 生成客戶端證書和密鑰

在/etc/openvpn/easy-rsa/2.0/目錄中執行:

./build-key client

會在目錄中產生客戶端所需的證書和密鑰

4 配置路由並啟動OpenVPN Server
4.1 防火牆配置

在CentOS 7中,iptables防火牆已經被firewalld所取代,需要使用如下方法:

首先啟動firewalld

systemctl status firewalld.service

查看有哪些服務已經在列表中允許通過:

# firewall-cmd --list-services
dhcpv6-client http https ssh

可以看到已經有了dhcpv6-client, http, https, ssh四項,接下來添加openvpn:

# firewall-cmd --add-service openvpn
success
# firewall-cmd --permanent --add-service openvpn
success

檢查一下:

# firewall-cmd --list-services
dhcpv6-client http https openvpn ssh

最後添加masquerade:

# firewall-cmd --add-masquerade
success
# firewall-cmd --permanent --add-masquerade
success

以下命令用於確認masquerade是否添加成功:

# firewall-cmd --query-masquerade
yes

4.2 允許IP轉發

在sysctl中開啟IP轉發

vim /etc/sysctl.conf

# Controls IP packet forwarding
net.ipv4.ip_forward = 1

4.3 啟動OpenVPN服務

啟動OpenVPN服務器並添加自動啟動項:

sysctl -p
systemctl start [email protected]
systemctl enable [email protected]

至此服務端搭建完成。

5 OpenVPN客戶端配置文件

取回之前生成的位於/etc/openvpn/easy-rsa/2.0/keys中的三個文件:

ca.crt
client.crt
client.key

在你的客戶端創建一個文件client.ovpn, 將這三個文件與其放在同一目錄中,編輯client.ovpn內容如下:

client
dev tun
proto udp
remote xxx.xxx.xxx.xxx 1194
resolv-retry infinite
nobind
persist-key
persist-tun
comp-lzo
verb 3
ca ca.crt
cert client.crt
key client.key

將其中的xxx.xxx.xxx.xxx替換為你的服務器地址,如果端口、證書、密鑰不同的話修改相應的項即可

OpenVPN客戶端 For Windows:Private Tunnel OpenVPN Connect
OpenVPN客戶端 For macOS:Private Tunnel
OpenVPN客戶端 For Android:Private Tunnel OpenVPN Connect
OpenVPN客戶端 For iOS:Private Tunnel OpenVPN Connect

參考文章:
https://www.digitalocean.com/community/tutorials/how-to-setup-and-configure-an-openvpn-server-on-centos-7
https://www.vultr.com/docs/installing-openvpn-on-centos-7

Related Post

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.