https://hackmd.io/s/r1KhasxVG
OpenVPN設定筆記
tags: openvpn vpn
說明
建立一個OpenVPN服務,讓使用者可以利用他當作跳板上網。簡單說就是用來翻牆啦。因為只是翻牆而已,所以沒有額外加強安全性。如有需要,請自行參考文末的參考文件。
注意,每個參考網頁上的操作步驟順序都有些微不一樣,建議先完整看完之後在進行操作,以免混亂。(沒錯我就是搞混了一下子 囧a)
基本環境
Ubuntu 16.04
Iptables-persistent
OpenVPN & easy-rsa
Server端設定
安裝所需套件
apt install openvpn easy-rsa
註:本文所有指令皆是在root權限下執行。
設定server.conf
複製server.conf
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server.conf
編輯server.conf
##以下只列出有修改的部份
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
## /etc/openvpn/easy-rsa/是我們等下會建立的目錄,這個可以依照自己需求修改。
建立所需金鑰
執行make-cadir產生存放認證金鑰的目錄,並切換過去,在裡面建立openssl-1.0.0的連結。
make-cadir /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa/
ln -s openssl-1.0.0.cnf openssl.cnf
這個指令是安裝easy-rsa後會出現的指令。easy-rsa是一個用來產生CA認證的工具,屬於OpenVPN專案之一。
編輯/etc/openvpn/easy-rsa/vars
export KEY_COUNTRY=”TW”
export KEY_PROVINCE=”TW”
export KEY_CITY=”Kaohsiung”
export KEY_ORG=”Kaohsiung”
export KEY_EMAIL=”me@myself.mydomain”
export KEY_OU=”MyCompany”
基本上就依照實際狀況設定,這樣之後要新增server/client的金鑰共同部份就可以直接用預設值,不須重複輸入。
初始化/etc/openvpn/easy-rsa/環境
source ./vars
./clean-all
在執行這段時,系統會出現警告,說明執行這個指令會把原先放在/etc/openvpn/easy-rsa/keys/的資料給清掉。就清掉吧。
建立CA和Diffie-Hellman PEM
cd /etc/openvpn/easy-rsa/
source ./vars
./build-ca
./build-dh
執行/bulid-dh會需要一段時間,一些網頁上會用openssl來建立,此文件統一都用easy-rsa處理金鑰相關訊息。
建立server端所需金鑰
cd /etc/openvpn/easy-rsa/
source ./vars
./build-key-server server
基本上都按照剛剛建立的預測值,再依照自己需求做增減。
以上建立的金鑰檔,路徑位置要跟server.conf裡的設定要一樣。
建立client端所需金鑰
每一個client都有自己的金鑰,基本上OpenVPN預設值是一組金鑰在同一時間內,只允許一個連線,就像BBS一樣。
建立一個名為client1的一組金鑰
cd /etc/openvpn/easy-rsa/
source ./vars
./build-key client1
(or)
./build-key-pass client1
##這個指令會要你輸入密碼,之後使用這組金鑰建立連線時,系統會要求你輸入密碼,算是第二城保護
其他client端金鑰依此類推。
如果需要刪除client端金鑰
cd /etc/openvpn/easy-rsa/
source ./vars
./revoke-full client2
這樣一來,client2這組金鑰就無法使用了。
啟用OpenVPN服務
systemctl enable openvpn.service
systemctl start openvpn.service
啟用後,可以用netstat -tulnp | grep 1194看1194 port有無listen,或是ifconfig看有沒有OpenVPN建立的網路界面:tunXXX
開通防火牆及IP forward功能。
使用VPN服務需要啟動以下功能:
IP forwarding
防火牆允許VPN連線
防火牆開通NAT功能
設定IP forwarding
vim /etc/sysctl.conf
net.ipv4.ip_forward=1 ## 這行取消註解。
sysctl --system
可以下以下指令看有無生效:sysctl -a或sysctl -p
安裝Iptables-persistent並先啟用
apt install iptables-persistent
systemctl enable netfilter-persistent
systemctl start netfilter-persistent
先啟用的原因:如果先把設定檔寫好再啟動,如果選項沒選好,Iptables-persistent會把原先寫好的設定給洗掉。
設定相關防火牆規則
vim /etc/iptables/
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.8.0.0/24 -o ens160 -j MASQUERADE
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i ens160 -p udp -m state --state NEW -m udp --dport 1194 -j ACCEPT
-A INPUT -i tun+ -j ACCEPT
-A FORWARD -i tun+ -j ACCEPT
-A FORWARD -i tun+ -o ens160 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i ens160 -o tun+ -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o tun+ -j ACCEPT
COMMIT
nat部份是設定NAT功能,這樣才有辦法再從OpenVPN server連到網際網路。
filter部份就是允許OpenVPN相關封包連線。tun+是OpenVPN server產生的網路界面。ens160是server上的網卡名稱,請按照實際機器名稱做相對硬的修改。
重啟Iptables-persistent
systemctl restart netfilter-persistent
註:以上設定是針對OpenVPN設置,實際狀況還要加上其他設定,例如允許SSH,阻擋ICMP,等等。
下以下指令可以檢查規則有無生效:iptables-save
以上設定完後可以重啟機器,之後就可以就可準備client的部份。
Client端設定
以上已經建立名為client1的金鑰,現在就要把這金鑰打包給client端。
client上會需要的檔案。
client1.ovpn
ca.crt
client1.crt
client1.key
在server端打包所需檔案
從預設檔複製出client1.ovpn
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn/easy-rsa/keys/client.ovpn
vim /etc/openvpn/easy-rsa/keys/client.ovpn
remote 192.0.2.0 1194 ##OpenVPN Server的連線IP
user nobody
group nogroup ##有些作業系統會禁止使用root權限執行程式。
ca ca.crt
cert client1.crt
key client1.key
##如果這三個檔案跟.ovpn放同一個目錄下,就不用額外設定路徑。不一樣就社路徑吧。
以上只列出需要修改的部份,其餘自己再研究吧。基本上就是增加安全性的設置。
打包檔案
tar -C /etc/openvpn/easy-rsa/keys -cvzf /etc/openvpn/client1.tar.gz {ca.crt,client1.crt,client1.key,client.ovpn,ta.key}
這個就把這個壓縮檔送到client端
client端啟用連線(Linux端)
安裝OpenVPN並解壓縮檔案
apt install openvpn
tar zxvf client1.tar.gz
啟動連線
cd /{PATH}/client1/
sudo openvpn client1.ovpn ##一定得用sudo權限
如果沒有錯誤訊息,就表示設定成功了。嘿嘿嘿可以進DMM…玩Kancolle啦!
參考資料
基本上都是參考這個文件。另外這篇還有說明一些更安全的設定。
https://medium.com/linode-cube/set-up-o ... 3b7ec7e465
./build-dh參考網頁
https://www.linode.com/docs/networking/ ... -debian-7/
./build-key-pass參考網頁
https://www.digitalocean.com/community/ ... untu-16-04
官方文件,還有怎麼刪除client的key。
https://openvpn.net/index.php/open-sour ... tml#revoke
防火牆設定參考
https://arashmilani.com/post?id=53
Client(Linux)連線方式說明
https://blog.longwin.com.tw/2010/11/ubu ... -set-2010/
OpenVPN Server
WARNING: cannot stat file 'ta.key'
https://www.reddit.com/r/OpenVPN/commen ... ile_takey/
server.conf
代碼: 選擇全部
openvpn --genkey --secret ta.key /etc/openvpn/ta.key
代碼: 選擇全部
tls-auth /etc/openvpn/ta.key