如何在Centos 7安裝openVPN

我們將在Centos 7安裝及配置OpenVPN 服務,並共使用Windows Client連接OpenVPN。
OpenVPN是一個open source的VPN應用程式(服務),允許使用者通過Internet 安全的建立連線至Private Network。
詳細的介紹可以參考其官網:OPENVPN
事情準備:
  1. CentOS 7 環境
  2. root權限帳號
  3. 固定IP (如果有Domain或SubDomain是更好的選擇)
在安裝之前需要先安裝Extra Packages for Enterprise Linux (EPEL) repository,因為OpenVPN並不包含在CentOS的 repository,EPEL是一個很受歡迎的repository.
yum install epel-release

一. 安裝Open VPN

使用Easy RSA來產生SSL Key當做VPN安全連線使用。
yum install openvpn easy-rsa -y

二. 設定Open VPN

copy一個sample的設定檔來當做預設的config檔案。
cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn
nano /etc/openvpn/server.conf

A.查看dh的檔案是否為dh2048.pem,筆者安裝時預設已由原本的dh1024.pem改成dh2048.pem了,所以並不需要更動。

dh dh2048.pem

B. 如果想要上網均由vpn server端出去的話,把下面redirect-gateway這行mark拿掉,再加上push remote-gateway 主機ip

push “redirect-gateway def1 bypass-dhcp”
push “remote-gateway vpn_server_ip”
push “route 10.8.0.0 255.255.255.0”

C. push dbcp的DNS Service,給client使用的dns,這裡使用Google’s public DNS server

push “dhcp-option DNS 8.8.8.8”
push “dhcp-option DNS 8.8.4.4”

D. 我們希望執行OpenVPN後沒有任何權限

user nobody
group nobody

三. 建立 Keys and Certificates

使用Easy RSA來建立keys and Certificates,其它vars的修改部份,並不一定要跟著修改,只是在建立Keys and Certificates都要重新輸入一次

A. 建立一個目錄來存放建立的資料

mkdir -p /etc/openvpn/easy-rsa/keys

B. 把建立key and certificate的script copy過來

cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa

C. 修改vars預設值

nano /etc/openvpn/easy-rsa/vars
內容請依實際狀況填寫,建立時也可再行修改
其中
KEN_NAME :請填入server
KEN_CN : 填入domain或是subdoman

# 這些欄位是預設的
# 這些資料將放入certificate裡
# 建議不要任意的不填入留空白
export KEY_COUNTRY=”TW”
export KEY_PROVINCE=”TW”
export KEY_CITY=”Taipei”
export KEY_ORG=”Yslifes”
export KEY_EMAIL=”your@email”
export KEY_OU=”Community”
# X509 Subject Field
export KEY_NAME=”server”
export KEY_CN=your.domain.com

D. 刪除OpenVPN原本的openSSL設定, 防止一些不可預期的加載事件發生,copy一個easy rsa預設的openSSL設定檔來使用

cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf

E. 進入easy RSA目錄,並把預設值載入

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

F. 開始建立Server 端Key及Certificate

一直按enter就可以了,如果遇到yes/No選項時,請選擇y
./clean-all
./build-ca
./build-key-server server
./build-dh

G. 把產生的Key及Certificate copy到OpenVPN目錄

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

F. 建立client 的Keys與Certificate

cd /etc/openvpn/easy-rsa
./build-key client

四. 設定防火牆及Routing

網路上很多資料都是使用iptables來設定,而非使用Centos 7新的firewall Firewalld來做設定,筆者主要是用firewalld,所以iptables並沒有實際測試過

甲. iptables方法如下:

A. 停用firewalld並安裝啟用iptabls

yum install iptables-services -y
systemctl mask firewalld
systemctl enable iptables
systemctl stop firewalld
systemctl start iptables
iptables –flush

B. 設定一個routing給OpenVPN的subnet

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables-save > /etc/sysconfig/iptables

乙. firewalld方法如下:

firewall-cmd –add-service openvpn
firewall-cmd –permanent –add-service openvpn
firewall-cmd –list-services
output:
success
success
dhcpv6-client openvpn ssh
firewall-cmd –add-masquerade
firewall-cmd –permanent –add-masquerade
firewall-cmd –query-masquerade
output:
success
success
yes
 ps.如果設定後無法使用internet,只可以連線private network的話可以增加或修改一個檔案/etc/firewalld/direct.xml
<?xml version="1.0" encoding="utf-8"?>
<direct>
  <rule priority="0" table="filter" ipv="ipv4" chain="POSTROUTING">-table nat -jump MASQUERADE --source 10.8.0.0/24 --out-interface eth0</rule>  
</direct>

然後reload firewalld

firewall-cmd --reload

 


甲,乙均需設定

編輯/etc/sysctl.conf
net.ipv4.ip_forward = 1
然後restart network
systemctl restart network.service

五. 設定為開機使啟動,並啟用OpenVPN服務

systemctl -f enable [email protected]
systemctl start [email protected]

六. 設定Windows Client

A. 安裝OpenVPN GUI 程式

請自行下載適合的版本並安裝

B. 下載Key和Certificate到指定目錄 ex.?C:\Program Files\OpenVPN\keys

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

C. 新增連線設定檔

C:\Program Files\OpenVPN\config
新增檔案client.ovpn
內容如下:
client
dev tun
proto udp
remote serverip?1194
resolv-retry infinite
nobind
persist-key
persist-tun
# redirect-gateway autolocal
cipher AES-256-CBC
# 如果需要啟動壓縮功能,可以在server.conf裡把comp-lzo mark拿掉
# comp-lzo
redirect-gateway def1
verb 3
ca ../keys/path/ca.crt
cert ../keys/path/client.crt
key ../keys/path/client.key
# push “route 10.8.0.0 255.255.255.0”
# push “redirect-gateway”

D. 啟動OpenVPN GUI程式,連線就可以了

openvpngui
以預設值來說
client ip : ?10.8.0.6
server ip : 10.8.01
問題
執行時可能無法執行,這時候可以查看syslog或是在server.conf裡log-append 加上/var/log/openvpn.log,再執行,然後查看log
如果出現
Options error: –explicit-exit-notify cannot be used with –mode server
Use –help for more information.
則把server.conf的explicit-exit-notify 1 mark掉

One thought to “如何在Centos 7安裝openVPN”

  1. 謝謝您寫的非常清楚。如果安裝時 easy-esa 不是 2.0 而是有 3, 3.0, 3.03 三個目務,該用那一個呢? 而且沒有 vars 這個檔案可以編輯,是否自建?

發表迴響