看板 KanColle 關於我們 聯絡資訊
延續前文:[攻略] 自己的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 [email protected] 如果沒有任何反應就是開成功了。 為了要讓它能夠每次開機都自動啟動,要啟用它: root@xxx:/etc/openvpn# systemctl enable [email protected] (先前疏忽了,忘了這部分,非常抱歉) 接著為了要讓連線能透過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 存檔後讓它可以被執行 root@xxx:~# chmod 0700 /etc/network/if-up.d/iptables 然後修改 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架設教學至此,感謝收看;有問題歡迎發表推文或來信。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.217.55 ※ 文章網址: https://www.ptt.cc/bbs/KanColle/M.1434186790.A.FC9.html
angel84326: 樓下老馬克 06/13 17:13
yukicon: 提問,所以這樣可以多人共用一個VPS? 06/13 17:21
VPS當然可以,猜測你想說的是VPN? VPN的話我在伺服器端的設定檔寫了一行「duplicate-cn」,可以讓同組key同時多人連線
Davinais: Linux很有趣的,導致我家裡電腦一半以上都是linux... 06/13 17:24
yukicon: 我的意思是,設一個OPEN VPN,多個帳號? 唉,不知道該 06/13 17:54
yukicon: 正確的表達,就是甲乙丙三人分別用不同的ID通過VPS 06/13 17:55
yukicon: 使用VPN 06/13 17:55
如果要帳號密碼會嚴重降低安全性 如果希望有多組key發配給不同的人 可以在產生的地方 ./build-key-pass <任何名稱> 假設取叫 test 好了 ./build-key-pass test 然後後面就自行把client代換成test (test.crt test.key test.ovpn) 可以用一樣的方法製作多組key分別給甲乙丙
Hevak: 推有提到route的部份,一直常有人問 06/13 18:14
※ 編輯: Akaz (140.112.217.55), 06/14/2015 05:08:19
qooLD: 感謝原po 雖然一知半解但是還是架完了www 06/14 12:16
※ 編輯: Akaz (140.112.217.55), 06/20/2015 13:59:29