Ubuntu16.04 x64服務器安裝配置OpenVPN教程

前提

  • 一個有公網IP的服務器,請看教程
  • 服務器系統爲Ubuntu16.04 x64
  • 確保完成教程當中3點必須做的事

內容簡介

OpenVPN在服務器端的安裝,密鑰文件的配置和生成,密鑰文件分發,Linux以及Android下OpenVPN客戶端設置與運行。另外如果習慣英文教程的朋友請移步這裏,感謝原作者Justin Ellingwood!這篇博文基本上就是一翻譯。


第1步
以非root的身份鏈接到服務器,並且更新一下軟件源,並且安裝openvpn和easy-rsa。openvpn不用多說,easy-rsa是實現文件加密

sudo apt-get update
sudo apt-get install openvpn easy-rsa


第2步
OpenVPN是需要證書頒發機構CA,而這個CA就需要藉助剛剛安裝的easy-rsa咯。首先,

cd

將服務器的操作目錄轉移到這個身份的根目錄~/。之後,

make-cadir ~/openvpn-ca
cd ~/openvpn-ca

建立一個文件夾專門放easy-rsa的模板。我們之後就會在這個模板裏面進行客製化CA操作。


第3步
客製化需要改編的文件:~/openvpn-ca/vars,因爲我們當前的工作目錄就是~/openvpn-ca,所以只需要。

nano vars

通過ctrl + w這個命令我們可以用關鍵詞搜索文件中的位置。第一個需要搜索的是“export KEY_COUNTRY=”US””,找到這一串默認的

export KEY_COUNTRY=”US”
export KEY_PROVINCE=”CA”
export KEY_CITY=”SanFrancisco”
export KEY_ORG=”Fort-Funston”
export KEY_EMAIL=”[email protected]
export KEY_OU=”MyOrganizationalUnit”

按照我們各自的實際情況來改,給一個例子:

export KEY_COUNTRY=”US”
export KEY_PROVINCE=”NY”
export KEY_CITY=”New York City”
export KEY_ORG=”DigitalOcean”
export KEY_EMAIL=”[email protected]
export KEY_OU=”Community”

可以照着這個自己改。這些都是一些爲生成CA添加的附加信息。除此之外,緊跟這這段,加一句export KEY_NAME="server"。然後ctrl + x保存關閉文件。然後

source vars

讓系統重新加載一下剛纔修改好的 vars。之後如果系統中原來已經有了一些密鑰文件放在~/openvpn-ca/keys的話,推薦將他們刪除,對應的命令是

./clean-all


第4步
客製化結束之後真正使用easy-rsa生成CA文件
首先保證工作目錄爲~/openvpn-ca,之後生成CA

./build-ca

在這步的過程中會有提示我們一些關於CA附加信息的確認問題,我們直接回車就可以,一路回車到底。完成!恭喜你,已經生成了用於授權密鑰的CA辣!


第5步
生成server端使用的密鑰。
rsa其實是一個加密算法,easy-rsa就是實現這個算法的一款linux程序,所以繼續用easy-rsa去生成密鑰,然後再添加給openvpn。那可以理解爲上一步生成CA就是爲了密鑰而準備的,前續工作。
運行:

./build-key-server server

注意這裏的參數server是對應我們第三步中,export KEY_NAME="server"這個密鑰名稱的。所以之前其實你想叫啥都可以,只要兩個地方統一就好。但是下面的教程都是按照叫做server來寫的,所以爲了方便就叫它server吧。依然,這個build過程會問很多問題,都回車enter或者y就好了。其中有一個問題是要我們給一個challenge password,不用擔心它,也直接回車就好。
下一步是生成用於密鑰交換的dh密鑰,以及將我們這步產生的ta.key配置給openvpn

./build-dh
openvpn –genkey –secret keys/ta.key


第6步
生成client端使用的密鑰。因爲這步我們可能會重複很多次,openvpn支持多用戶共同使用,所以首先保證我們已經做了

cd ~/openvpn-ca
source vars

然後生成client的密鑰,這裏我們給進的參數client1是給client密鑰的名稱,隨便取辣,不過鑑於這是我們第一次生成client密鑰,就不妨叫它client1吧,好記。

./build-key client1

同樣的,這一步也會有問這問那,直接enter或者y


第7步
配置openvpn,首先將之前生成的keys目錄下的文件拷貝到openvpn下:

cd ~/openvpn-ca/keys
sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn

注意這裏的server.crt以及server.key都是與第4步中你的選擇相一致的,如果你選擇取別的名字就需要自己改過來。然後將openvpn自帶的一個預定義配置解壓出來供我們之後更改,這樣就不用從頭寫了。

gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

然後開始修改這個配置,依舊用nano打開它。

sudo nano /etc/openvpn/server.conf

找到tls-auth,將這行最前面的;去掉解除註釋。另外在它下面加上key-direction 0,長成這樣:

tls-auth ta.key 0 # This file is secret
key-direction 0

找到cipher,選擇cipher AES-128-CBC這種加密密碼。同樣的也是把它前面的;去掉。另外在它下面加上auth SHA256,指定TLS的授權算法。

cipher AES-128-CBC
auth SHA256

找到user和group,將它們的;去掉。

user nobody
group nogroup

爲了讓我們所有的網絡請求都通過vpn流轉,我們必須給client一個OpenDNS,以及設置openvpn流轉方式。找到redirect-gateway,去掉;。

push “redirect-gateway def1 bypass-dhcp

找到dhcp-option,去掉兩行的;。

push “dhcp-option DNS 208.67.222.222”
push “dhcp-option DNS 208.67.220.220”

改vpn端口和傳輸層協議爲tcp,找到port改爲你想要用的端口,找到proto改爲tcp

port 12345
proto tcp

最後如果你在第4步中把key_name叫成了其他名字而不是server,那麼需要找到cert和key,將cert和key改爲你自己叫得名字。這裏我們貼出原來默認的server.crt 與 server.key。

cert server.crt
key server.key

保存並且關閉nano。


第8步
允許系統進行ip包轉發, 打開/etc/sysctl.conf

sudo nano /etc/sysctl.conf

找到net.ipv4.ip_forward,將前面的#去掉,也是取消註釋的意思。

net.ipv4.ip_forward=1

保存關閉nano,並且重新讓系統讀取一遍這個文件

sudo sysctl -p

接下來找到VPS的公共網絡接口,複製它。

ip route | grep default

在輸出中的dev後面那個就是公共網絡接口,例如 wlp11s0就是。

default via 203.0.113.1 dev wlp11s0 proto static metric 600

打開/etc/ufw/before.rules,隨便在哪裏添加一下OpenVPN的防火牆規則。繼續用上面這個wlp11s0的例子。

*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/8 -o wlp11s0 -j MASQUERADE
COMMIT

保存關閉。

打開/etc/default/ufw,找到DEFAULT_FORWARD_POLICY,將它改爲:

DEFAULT_FORWARD_POLICY=”ACCEPT”

保存關閉。

設置ufw ,允許OpenVPN的端口和使用的tcp協議,保證ufw允許ssh。並且重啓。XXXXX是我們在第7步中設置的端口。

sudo ufw allow XXXXX/tcp
sudo ufw allow OpenSSH
sudo ufw disable
sudo ufw enable


第9步
開啓VPS的OpenVPN服務,並設置開機自動啓動。

sudo systemctl start openvpn@server
sudo systemctl enable openvpn@server


第10步
OpenVPN的服務器端的設置就搞定辣!接下來是client的內容。當然之前也用了easy-rsa去生成client的密鑰。創建一個OpenVPN的client文件夾,然後設置爲只有我們這個用戶可以讀,可以寫,可以允許。然後將OpenVPN提供的關於client的設置拷貝進去,之後用nano打開這個設置,準備修改。

mkdir -p ~/client-configs/files
chmod 700 ~/client-configs/files
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
nano ~/client-configs/base.conf

找到remote,將後面的ip和端口設置爲自己的VPS的公網IP(VPS_IP_address)以及,我們在第7步中設置的端口(XXXXX)。

remote VPS_IP_address XXXXX

找到proto,改爲tcp

proto tcp

找到user和group,去掉前面的;

user nobody
group nogroup

找到ca ca.crt,cert client.crt,key client.key,將他們最前面加上#註釋掉。
找到tls-auth,在它下面加上key-direction 1,長成這樣:

key-direction 1

找到cipher,選擇cipher AES-128-CBC這種加密密碼。同樣的也是把它前面的;去掉。另外在它下面加上auth SHA256,指定TLS的授權算法。

cipher AES-128-CBC
auth SHA256

然後再任意地方加上三行代碼,在linux安裝OpenVPN時會用到。

# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf

保存關閉。


第11步
建立client.opvn生成bash file.

nano ~/client-configs/make_config.sh

將下面內容複製進去。

#!/bin/bash

# First argument: Client identifier

KEY_DIR=~/openvpn-ca/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf

cat ${BASE_CONFIG} \
<(echo -e ‘<ca>’) \
${KEY_DIR}/ca.crt \
<(echo -e ‘</ca>\n<cert>’) \
${KEY_DIR}/${1}.crt \
<(echo -e ‘</cert>\n<key>’) \
${KEY_DIR}/${1}.key \
<(echo -e ‘</key>\n<tls-auth>’) \
${KEY_DIR}/ta.key \
<(echo -e ‘</tls-auth>’) \
> ${OUTPUT_DIR}/${1}.ovpn

保存關閉。設置執行權限:

chmod 700 ~/client-configs/make_config.sh

生成client的OpenVPN文件,注意裏面的參數client1是我們在第6步中定的名字。

./make_config.sh client1

ok!在~/client-configs/files文件夾下面有一個client1.ovpn文件了,這個就是我們client需要的唯一一個文件了!到這裏我們所有OpenVPN的設置都完成了。下面是具體如何操作。


安卓系統:
下載OpenVPN Connect這款軟件。將client1.ovpn從遠程VPS用sftp命令下載到本地電腦:

sftp yourname@VPS_IP:client-configs/files/client1.ovpn ~/

再用數據線將這個文件傳到安卓設備。然後打開OpenVPN Connect,點擊右上角的三個點,選擇import,然後選擇import profile from SD card。接下來找到剛剛傳的client1.ovpn。之後點擊connect就可以用辣


Ubuntu
同樣將client1.ovpn從遠程VPS用sftp命令下載到本地電腦:

sftp yourname@VPS_IP:client-configs/files/client1.ovpn ~/

更新軟件源,然後安裝OpenVPN。

sudo apt-get update
sudo apt-get install openvpn

然後檢查是否本地有/etc/openvpn/update-resolv-conf這個文件存在,如果不存在則跳過這點,反之打開client1.ovpn,找到script-security,刪除三個#。

nano client1.ovpn

刪除#後是這樣的。

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

保存關閉。
然後在本地運行OpenVPN

sudo openvpn –config client1.ovpn


恭喜,這麼長的教程居然被你看完了,真不簡單。希望能成功配置上OpenVPN。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章