[攻略] 自己的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