ubuntu部署VPN中openvpn(上)

2021-06-30 18:17:11 浏览数 (1)

一.简介

如果在一个非信任网络下比如旅社或者咖啡店的WiFi网络下,想要通过你的智能手机或者笔记本电脑安全地访问互联网,那么VPN可以满足你的要求。VPN(VirtualPrivate Network)允许你私有地(privately)安全地(securely)穿过非信任的网络,就好像为你建立了一条专属网络。你的数据流量到达VPN服务器之后,VPN服务器继续将你的网络流量送达目的地。

如果配合HTTPS连接,这个方案可以让你的无线登录和数据传输变得安全。VPN可以让你克服地理限制和审查(比如克服大陆的GFW),保护你的本地位置信息等。

OpenVPN是一个全功能的开源安全套接字层(SSL)VPN解决方案,它包含大量的配置信息。在这篇教程里,我们将在一个公网服务器(本文的服务器为Ubuntu16.04)上面安装一个OpenVPN服务器然后进行相应的配置,使得Windows,OS X,IOS以及Android客户端能够访问它。

二.部署

初始配置

1.执行脚本 wget https://git.io/vpn -O openvpn-install.sh && bash openvpn-install.sh

2.Ubuntu的默认仓库就有openvpn的包,但要更新一下才行。还需安装一个easy-rsa包,这个包可以建立一个内部CA证书系统,帮助VPN进行认证。 apt-get update apt-get install openvpn easy-rsa

安装CA

1.建立CA目录,OpenVPN是一个TLS/SSLVPN,这意味着它需要使用证书来在客户端和服务器之间加密数据。为了发布可信的证书,我需要建立我们自己的简单CA

复制easy-rsa临时目录到家目录 make-cadir ~/openvpn-ca

2.配置CA变量 cd ~/openvpn-ca

将最后几行更改,改成其它的,不要空着 vim vars

代码语言:javascript复制
exportKEY_COUNTRY="US"
exportKEY_PROVINCE="CA"
exportKEY_CITY="SanFrancisco"
exportKEY_ORG="Fort-Funston"
exportKEY_EMAIL="me@myhost.mydomain"
exportKEY_OU="MyOrganizationalUnit"

例如这样

代码语言:javascript复制
export KEY_COUNTRY="CN"
export KEY_PROVINCE="GD"
export KEY_CITY="ShanTou City"
export KEY_ORG="STU"
export KEY_EMAIL="qfuqin@163.com"
export KEY_OU="University"

更改KEY_NAME的值,这里设置为server,其它值也可以

代码语言:javascript复制
export KEY_NAME="server"

3.用easy-rsa包来制作CA cd ~/openvpn-ca source vars

提示如下则正确 NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/sammy/openvpn-ca/keys

进入CA环境 ./clean-all

开始制作根证书颁发机构密钥(rootcertificate authority key )和证书(certificate),由于我们刚刚填了vars文件,证书制作所需要变量的值都会自动填充,制作过程中你只需要回车来确认就行 ./build-ca

制作服务端所需要的证书,这些证书就像传统的用于加密过程的文件一样。通过键入如下命令来生成服务端所需的证书,server就是KEY_NAME的值。默认回车,最后2个需要按Y ./build-key-server server

为服务器生成加密交换时的Diffie-Hellman文件,需要等几分钟 ./build-dh

生成一个HMAC签名来增强服务器的TLS完整性验证能力 openvpn --genkey --secret keys/ta.key

4.制作Client端的Certificate 客户端的相关证书可以在客户端的机器上面生成,为了简单起见,这里在服务器上面来生成客户端的相关证书,然后再把服务器上生成的客户端证书下载到本地客户端上面。我们用client1来命名我们的第一个证书/密钥对,用build-key命令来生成没有密码情况下的凭证,并且用于自动连接 cd ~/openvpn-ca source vars ./build-key client1

配置OpenVPN服务器

1.把相关文件复制到/etc/openvpn这个配置目录中去 cd ~/openvpn-ca/keys cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn

2.修改配置文件 cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn cd /etc/openvpn/ gzip -d server.conf.gz vim /etc/openvpn/server.conf

代码语言:javascript复制
tls-auth ta.key 0 #去掉注释
key-direction 0 #添加
cipher AES-128-CBC #去掉注释
auth SHA256 #添加
server 10.8.0.0 255.255.255.0 #添加,虚拟网段
user nobody #去掉注释
group nogroup #去掉注释

3.调整网络服务,增加内核转发 vim /etc/sysctl.conf

代码语言:javascript复制
net.ipv4.ip_forward=1

生效 sysctl -p

4.配置防火墙,查看网卡名,默认eth0 ip route | grep default

修改防火墙文件,在最开头注释后面 添加如下部分 /etc/ufw/before.rules

代码语言:javascript复制
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0(changeto the interface you discovered!)
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -jMASQUERADE #这里为配置文件设置的虚拟网段
COMMIT
# END OPENVPN RULES

配置防火墙默认允许转发包,DROP改成ACCEPT vim /etc/default/ufw

代码语言:javascript复制
DEFAULT_FORWARD_POLICY="ACCEPT"

5.调整防火墙本身,以允许流量到OpenVPN,如果更改了配置文件中端口号,这里需要对应 ufw allow 1193/udp ufw allow OpenSSH

重启防火墙,到这里我们的服务器可以正确地处理OpenVPN流量了 ufw disable ufw enable

6.开启OpenVPN服务 在systemd单元文件的后面,我们通过指定特定的配置文件名来作为一个实例变量来开启OpenVPN服务,我们的配置文件名称为/etc/openvpn/server.conf,所以我们在systemd单元文件的后面添加@server来开启OpenVPN服务 systemctl start openvpn@server systemctl status openvpn@server

查看tun是否启动 ip addr show tun0

一切正常后,设置开机启动 systemctl enable openvpn@server

0 人点赞