[攻略] 自己的VPN自己架:OpenVPN架設篇

作者: Akaz (Akaz)   2015-06-13 17:13:04
延續前文:[攻略] 自己的VPN自己架:基礎建設篇 #1LUM6Das
這次的圖會比較少,因為大部分都是照著指令就可以了。
四、OpenVPN簡介
OpenVPN是一個開放原始碼、跨平台的VPN實作。
雖然連線需要額外的客戶端軟體,但目前幾乎所有平台上都已經有OpenVPN的客戶端。
OpenVPN的優點:
1.使用CA(數位憑證)做身分驗證,目前除了誘騙使用者自己開門外沒有破門方法。
2.使用OpenSSL加密,可以自行更換加密演算法。
預設使用BlowFish做為Cipher(這個有點難解釋 有興趣的朋友可以自己Google),
BlowFish至今沒有被攻破的紀錄(理論上不可行)。
在常用的VPN方案中擁有最高的安全性。
3.在走UDP的時候(預設)擁有常用VPN方案中僅次於PPTP的速度。
OpenVPN的缺點:
1.需要客戶端軟體。
2.我想不到了,歡迎補充。
五、OpenVPN架設
首先安裝OpenVPN。
因為後面會有一些問題,所以這邊不用sudo,直接進root做。
xxx@xxx:~$ sudo su -
root@xxx:~# apt-get -y install openvpn
安裝好之後我們要先使用附帶安裝的easy-rsa生成OpenVPN所需要的數位憑證。
root@xxx:~# cd /etc/openvpn
root@xxx:/etc/openvpn# mkdir -p easy-rsa
root@xxx:/etc/openvpn# cp /usr/share/easy-rsa/* easy-rsa/
root@xxx:/etc/openvpn# cd easy-rsa
編輯easy-rsa裡面的vars這個檔案。
root@xxx:/etc/openvpn/easy-rsa# nano vars
裡面應該有一段長這樣:
http://i.imgur.com/3IrhxPL.png
其實不改也可以,總之這段不可以有任何一個為空。
http://i.imgur.com/Ic2wzjW.png
改完以後Ctrl+X、Y、Enter存檔。
然後把vars加到系統的參數中。
root@xxx:/etc/openvpn/easy-rsa# . ./vars ←注意前面有多一個點
root@xxx:/etc/openvpn/easy-rsa# ./clean-all
接下來產生憑證。
root@xxx:/etc/openvpn/easy-rsa# ./build-ca
會問你一些東西,因為剛才已經在vars裡面設定好了所以一直Enter就可以了。
root@xxx:/etc/openvpn/easy-rsa# ./build-key-server server
也是一直Enter,後面會出現一個幾個額外的東西,可以不用管它們,直接留空。
最後會有兩個問題,要打上y,不能直接Enter。
http://i.imgur.com/WFDxeQQ.png
然後產生DH(這個也有點難解釋)。
root@xxx:/etc/openvpn/easy-rsa# ./build-dh
會跑出很多'.'和'+',需要一段時間,請耐心等候。
以上是伺服器端的憑證,現在要製作客戶端的。
這邊有分歧路線:
1.生成有密碼的憑證:建議
這樣生成的憑證在每次連線的時候都會額外詢問密碼。
root@xxx:/etc/openvpn/easy-rsa# ./build-key-pass client
Enter PEM pass phrase: (打上你要的密碼)
Verifying - Enter PEM pass phrase: (再一次)
後面與build-key-server操作相同。
2.生成沒有密碼的憑證:不建議
root@xxx:/etc/openvpn/easy-rsa# ./build-key client
和build-key-server操作完全相同。
接著要編寫伺服器端的設定檔。首先回到/etc/openvpn。
root@xxx:/etc/openvpn/easy-rsa# cd ..
因為字太多了所以我還是放在codepad.org:http://codepad.org/xWE6zhtI
(已更正,原先的版本少了一行)
把這些設定值寫在server.conf裡面。
root@xxx:/etc/openvpn# nano server.conf
然後先建好用來分配ip的文件檔。
root@xxx:/etc/openvpn# touch ipp.txt
現在可以打開OpenVPN的伺服器端了。
root@xxx:/etc/openvpn# systemctl start openvpn@server.service
如果沒有任何反應就是開成功了。
為了要讓它能夠每次開機都自動啟動,要啟用它:
root@xxx:/etc/openvpn# systemctl enable openvpn@server.service
(先前疏忽了,忘了這部分,非常抱歉)
接著為了要讓連線能透過VPS往外走,要修改一部分的系統設定。
首先暫時關閉 fail2ban。
root@xxx:~# systemctl stop fail2ban.service
這邊可能會需要數十秒的時間。
關閉 fail2ban 後修改 iptables 的設定值。
root@xxx:~# iptables -t nat -A POSTROUTING -s 192.168.100.0/24
-o eth0 -j MASQUERADE
(縮成一行 -o前面要空格)
為了讓重新開機後 iptables 能夠自動載入,要把這行設定存下來:
root@xxx:~# iptables-save > /etc/iptables.save
root@xxx:~# nano /etc/network/if-up.d/iptables
編輯這個檔案如下:
#! /bin/sh
iptables-restore < /etc/iptables.save
然後修改 IP forwarding 規則。
root@xxx:~# nano /etc/sysctl.conf
在檔案的最後加上
net.ipv4.ip_forward=1
(前面不要加#)
存檔後重新載入剛剛修改的設定檔。
root@xxx:~# sysctl -p
最後重新打開 fail2ban。
root@xxx:~# systemctl start fail2ban.service
六、連線至OpenVPN
在這邊建議先下載OpenVPN和任意FTP軟體(將以FileZilla示範)。
OpenVPN:https://openvpn.net/index.php/open-source/downloads.html
  FileZilla:https://filezilla-project.org/download.php?type=client
首先先把連線需要的憑證下載下來。
root@xxx:/etc/openvpn# apt-get -y install zip
root@xxx:/etc/openvpn# mkdir -p client
root@xxx:/etc/openvpn# cp easy-rsa/keys/ca.crt client/
root@xxx:/etc/openvpn# cp easy-rsa/keys/client.crt client/
root@xxx:/etc/openvpn# cp easy-rsa/keys/client.key client/
root@xxx:/etc/openvpn# zip -r client.zip client/
root@xxx:/etc/openvpn# cp client.zip ~xxx ←xxx請代換成之前建立的使用者
root@xxx:/etc/openvpn# chown xxx:xxx ~xxx/client.zip ←同上
接著打開FileZilla,點擊左上角的「站台管理員」,然後點「新增站台」。
http://i.imgur.com/1tkLqDL.png
http://i.imgur.com/ZcxNvl5.png
在右半邊,主機填上你的VPS的IP,協定選擇SFTP,
登入型式選擇詢問密碼並打上VPS的使用者名稱。
http://i.imgur.com/6EZteYJ.png
然後按連線。打上密碼後會有個類似PieTTY第一次連線時的東西,點選確認。
http://i.imgur.com/lR8EHhM.png
在左邊找到OpenVPN的安裝目錄。(應該會在C:\Program Files\OpenVPN)
進到其中的config資料夾並把client.zip拉到左邊。
下載完就可以關掉FileZilla了。
到C:\Program Files\OpenVPN\config裡面,首先解壓縮client.zip,
並把client資料夾裡的三個檔案拉到config裡面。
在config裡面新增一個文件名為client.ovpn,
內容還是字很多所以一樣貼在codepad.org:http://codepad.org/AmiYEbhd
<ip>請換成你的VPS的IP,如果你的OpenVPN安裝位置不同也請自行依格式修改。
另外有關 routing 的部分:
1.設定DNS:建議但非必須,改成中華DNS亦可
dhcp-option DNS 8.8.8.8
dhcp-option DNS 8.8.4.4
2.所有流量都通過VPN
redirect-gateway def1
3.只讓dmm流量過VPN:不可和2並用
route 203.209.0.0 255.255.0.0
route 203.104.0.0 255.255.0.0
4.讓ptt流量不過VPN(懶人法,直接讓112流量不過VPN):要和2並用
route 140.112.0.0 255.255.0.0 net_gateway
其中 2 或 3 至少要存在一個才能順利連上 DMM。
接著打開OpenVPN GUI,預設安裝的話你應該能在桌面上找到捷徑。
http://i.imgur.com/7O7bNu7.png
打開後應該能在螢幕右下角找到OpenVPN GUI。設定正確的話點兩下就會開始連線。
http://i.imgur.com/r0w2UYB.png
產生客戶端憑證時如果有設定密碼它就會詢問你密碼。
http://i.imgur.com/kZiEmcN.png
打上密碼後,稍微等一下,連線成功的話視窗就會自己消失到右下角。
想要中斷連線的話再把視窗點出來按斷線即可。
然後就可以上去戳艦娘啦!
http://i.imgur.com/En1alnj.png
啊,只是隻...什麼你說馬克撈到了?
七、雜談/廢話
發了基礎建設篇後有些板友提醒安全性的部分,非常感謝。
其實我一直很難拿捏的是想要盡量簡單但同時也要有足夠的安全性,
於是就變成這樣不上不下,但普遍的安全性來說已經OK了。
也有板友覺得有專業知識再做較好。
我個人的觀點是,有的話很好,沒有的話照著做也可以完成;
當然在管理上可能有些不易,但我認為是可以克服的。Linux很有趣的,真的
小弟高中是文組,大學讀資工,也是從照著做開始慢慢學起來的。
回歸到VPN,起初我自己也是使用PPTP VPN,因為它架設非常之簡單,
但因為某大網路長城過於強大,有時候會導致連線極度不穩定,
後來還是改用穿透性較強且安全性較高的OpenVPN。
目前在強大的網路長城(應該沒有對岸那個強就是了)下沒有任何使用上的問題。
也因為PPTP的穿透性較弱,經板友來信告知與我個人測試後,
確定ConoHa阻擋掉GRE協定,導致PPTP在ConoHa無法架設(OpenVPN沒問題),
要租用ConoHa的板友請再三考慮。
再次提醒,設置密碼時,
請使用大小寫字母、數字、底線、問號等符號混雜的密碼,且避開既有單詞。
一切的加密都防止不了密碼被暴力破解。
本次VPN架設教學至此,感謝收看;有問題歡迎發表推文或來信。
作者: angel84326 (吹雪本命!)   2014-06-13 17:13:00
樓下老馬克
作者: yukicon (長門控)   2015-06-13 17:21:00
提問,所以這樣可以多人共用一個VPS?
作者: Davinais (水靈流喵)   2015-06-13 17:24:00
Linux很有趣的,導致我家裡電腦一半以上都是linux...
作者: yukicon (長門控)   2015-06-13 17:54:00
我的意思是,設一個OPEN VPN,多個帳號? 唉,不知道該正確的表達,就是甲乙丙三人分別用不同的ID通過VPS使用VPN
作者: Hevak (Arthow Eshes)   2015-06-13 18:14:00
推有提到route的部份,一直常有人問
作者: qooLD (遺忘之都)   2015-06-14 12:16:00
感謝原po 雖然一知半解但是還是架完了www

Links booklink

Contact Us: admin [ a t ] ucptt.com