10/13/2017

VMware 搭建 OpenVPN service 平台 Linux

由於 VPN 架設環境依賴網路,通常自家建立都是使用分享器內建功能,提供國外使用者連線至國內使用

但是要連線至國外使用,VPN Server 必須建立在國外的網路節點提供跨國服務

但很多提供 VPN 都必須付費使用服務,而且因為提供非常多人使用同一節點,導致尖峰時段非常不穩定

高額的費用,不如自己租用國外 VPS 來建立屬於自己的 VPN 服務,也能讓親朋好友一起使用並分擔費用

首先,在租用國外 VPS 之前,必須先注意提供 VPS 商家有哪些國家的節點,並且測試回應值

通常大部分的人都是連去日本,所以這邊介紹一些有提供日本節點的 VPS 商家

Amazon EC2、Linode、Vultr、ConoHa

在來是有提供台灣節點的 VPS 商家

Google GCE

 

所以我們使用 VMware 來模擬 VPS 的最低規格

VMware 虛擬機建立及作業系統安裝,可參考 VMware 搭建 Web Server service 平台 Linux LNMP

客體虛擬機器 ( Guest ) 規格簡述

處理器:1 Core
記憶體:1 GB
硬碟:20 GB
網路:橋接介面卡

 

作業系統安裝完成,登入後,更新系統
yum update -y

更新完成後,重新啟動
reboot


安裝 VM 增強套件之前,如果要使用 PPPoE 連線
要先安裝 rp-pppoe 套件設置連線後才能安裝 VM 增強套件,套件包含 net-tools 會與 rp-pppoe 衝突
CentOS PPPoE撥接上網設定方式 ISP中華電信

安裝 VM 增強套件
yum install open-vm-tools -y
systemctl start vmtoolsd 啟動
systemctl enable vmtoolsd 開機自動啟動


安裝防火牆
yum install firewalld -y
systemctl start firewalld 啟動
systemctl enable firewalld 開機自動啟動
firewall-cmd --permanent --add-service=https 開啟 443 port
firewall-cmd --permanent --add-masquerade 開啟 IP 偽裝
firewall-cmd --reload 更新防火牆
firewall-cmd --permanent --zone=public --list-all 查看防火牆設定


CentOS 默認套件庫,沒有 OpenVPN 套件,所以要安裝 Enterprise Linux (EPEL) 套件庫
yum install epel-release -y


安裝 OpenVPN 及 easy-rsa 套件
yum install openvpn easy-rsa -y


將 OpenVPN 範例 server.conf 複製到自己的配置文件
cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn


編輯 server.conf 配置文件
vi /etc/openvpn/server.conf

port 443
proto tcp
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
duplicate-cn
tls-auth ta.key 0
user nobody
group nobody
;explicit-exit-notify 1

建立放置密鑰的目錄,複製 easy-rsa 套件的範例到自己的配置文件
mkdir -p /etc/openvpn/easy-rsa/keys
cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa
cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf


設置證書資訊,部分資訊,請自行設置,這裡是範例,CITY=城市、ORG=公司、OU=部門
vi /etc/openvpn/easy-rsa/vars

export KEY_COUNTRY="TW"
export KEY_PROVINCE="Taiwan"
export KEY_CITY="NTPC"
export KEY_ORG="Rainssn Inc."
export KEY_EMAIL="Rainssn@rainssn.com"
export KEY_OU="TD"
export KEY_NAME=""

製作 CA 證書及伺服器密鑰,這裡是範例 password 及 name 請自行設置
cd /etc/openvpn/easy-rsa
source ./vars
./clean-all
./build-ca
./build-key-server server

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y

製作 dh 2048 位元加密,複製 dh 加密、CA 證書、伺服器證書密鑰到自己的配置文件
./build-dh
cd /etc/openvpn/easy-rsa/keys
cp dh2048.pem ca.crt server.crt server.key /etc/openvpn


製作客戶端密鑰,這裡是範例 password 及 name 請自行設置
cd /etc/openvpn/easy-rsa
./build-key client

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y

製作 ta 密鑰
cd /etc/openvpn/
openvpn --genkey --secret ta.key


 

啟用 IP 轉發
vi /etc/sysctl.conf

net.ipv4.ip_forward = 1

sysctl -p[/code]


重啟網路,啟動 OpenVPN 服務
systemctl restart network.service
systemctl start openvpn@server
systemctl enable openvpn@server


 

OpenVPN Client 客戶端證書密鑰製作

需要使用到 OpenVPN Server 下列 4 個檔案

客戶端證書密鑰
/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/client.crt
/etc/openvpn/easy-rsa/keys/client.key
/etc/openvpn/ta.key

OpenVPN Client 建立 client.ovpn 配置文件
vi client.ovpn


將客戶端證書密鑰嵌入配置文件中
client
dev tun
dev-node jvpn
proto tcp
remote your_server_ip 443
resolv-retry infinite
nobind
user nobody
group nobody
persist-key
persist-tun
remote-cert-tls server
verb 3
key-direction 1
route-method exe
route-delay 2
tun-mtu 1450

<ca>
-----BEGIN CERTIFICATE-----
# 插入 ca.crt 的 key values
-----END CERTIFICATE-----
</ca>

<cert>
-----BEGIN CERTIFICATE-----
# 插入 client.crt 的 key values
-----END CERTIFICATE-----
</cert>

<key>
-----BEGIN PRIVATE KEY-----
# 插入 client.key 的 key values
-----END PRIVATE KEY-----
</key>

<tls-auth>
-----BEGIN OpenVPN Static key V1-----
# 插入 ta.key 的 key values
-----END OpenVPN Static key V1-----
</tls-auth>

將客戶端證書密鑰配置文件,打包壓縮 ovpn.tar.gz 傳給 OpenVPN Client 客戶端使用
tar zcvf ovpn.tar.gz ca.crt client.crt client.key ta.key client.ovpn


連線的客戶端將介面卡(TAP-Windows Adapter)名稱改為 jvpn

 




 

如果您不想全部流量都經過 OpenVPN 可以這樣設定
vi /etc/openvpn/server.conf

port 443
proto tcp

# Fantasy Earth ZERO 幻想戰記
push "route 61.70.0.0 255.255.0.0"
push "route 66.171.0.0 255.255.0.0"
push "route 101.79.0.0 255.255.0.0"
push "route 104.25.0.0 255.255.0.0"
push "route 104.115.0.0 255.255.0.0"
push "route 125.209.0.0 255.255.0.0"
push "route 164.70.0.0 255.255.0.0"
push "route 121.94.173.104 255.255.255.255"

# DMM 網頁遊戲
push "route 202.6.246.0 255.255.255.0"
push "route 203.209.152.0 255.255.255.0"

# Black Desert 黑色沙漠
push "route 203.141.243.0 255.255.255.0"
push "route 203.141.243.139 255.255.255.255"
push "route 122.129.232.0 255.255.255.0"
push "route 122.129.238.54 255.255.255.255"
push "route 203.141.243.76 255.255.255.255"
push "route 203.141.0.0 255.255.0.0"
push "route 66.171.0.0 255.255.0.0"
push "route 52.33.196.199 255.255.255.255"
push "route 103.4.0.0 255.255.0.0"
push "route 122.129.0.0 255.255.0.0"

# NEXON 網路遊戲
push "route 106.186.17.205 255.255.255.255"
push "route 59.128.0.0 255.255.0.0"
push "route 118.159.0.0 255.255.0.0"
push "route 210.237.148.0 255.255.255.0"
push "route 124.146.170.0 255.255.255.0"
push "route 122.129.232.0 255.255.255.0"
push "route 203.141.243.0 255.255.255.0"
push "route 119.235.0.0 255.255.0.0"
push "route 111.87.0.0 255.255.0.0"

;push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
duplicate-cn
tls-auth ta.key 0
compress lz4-v2
push "compress lz4-v2"
user nobody
group nobody
;explicit-exit-notify 1

關閉全部流量經過 dhcp,改由附加路由表的方式

開啟 lz4-v2 壓縮演算法,並附加給客戶端

 

沒有留言:

張貼留言