如何在Ubuntu 16 04上设置OpenVPN
在本文中,我们将学习如何在UbuntuLinux上配置OpenVPN服务器。是的,我们可以使用VPN(虚拟专用网络)来做到这一点,该VPN允许您从不受信任的网络私有安全地连接到工作场所。例如,如果您在旅馆或咖啡厅中,并希望使用智能手机或笔记本电脑通过Wi-Fi网络安全,安全地访问工作环境
OpenVPN是功能齐全的开源安全套接字层(SSL)VPN解决方案,可适应多种配置。
安装OpenVPN
要开始安装,我们需要一台具有非root用户并具有sudo特权的Ubuntu计算机,
使用“sudo”用户登录到Ubuntu计算机,并继续以下步骤。
由于Ubuntu的默认存储库中提供了OpenVPN,我们需要更新服务器,并且我们将安装easy-rsa软件包以获取用于我们的VPN服务器的内部CA(证书颁发机构)。
$ sudo apt-get update
更新服务器后,我们将安装OpenVPN和easy-rsa
$ sudo apt-get install openvpn easy-rsa
设置CA目录
OpenVPN是TLS/SSLVPN。这意味着它将使用证书来加密服务器和客户端之间的数据流量。要发布受信任的证书,我们将建立我们自己的简单证书颁发机构(CA)。
我们将使用make-cadir命令将easy-rsa模板目录复制到我们的主目录中
$ sudo make-cadir ~/openvpn-ca
将目录更改为新创建的目录以开始配置CA
$ cd ~/openvpn-ca
配置CA变量
我们需要编辑目录中“vars”文件中的值。打开文件以立即编辑。
$ source vars
我们将找到一些可以调整的变量,以确定应该如何创建我们的证书。在此演示中,我们将更改其中的一些。
我们将找到一些设置来设置新证书的默认设置,如下所示
. . . export KEY_COUNTRY="US" export KEY_PROVINCE="CA" export KEY_CITY="SanFrancisco" export KEY_ORG="Fort-Funston" export KEY_EMAIL="me@myhost.mydomain" export KEY_OU="MyOrganizationalUnit" . . .
根据您所在的地区和要求编辑值。以下是用于演示目的的信息。
. . . # These are the default values for fields # which will be placed in the certificate. # Don't leave any of these fields blank. export KEY_COUNTRY="in" export KEY_PROVINCE="AP" export KEY_CITY="Hyderabad" export KEY_ORG="RIG" export KEY_EMAIL="ckadarla@rigaps.com" export KEY_OU="Resource Infomatics Group" # X509 Subject Field . . .
We will also edit the KEY_NAME value which is just below this section, for demo purpose we will call as vpn_server export KEY_NAME="vpn_server" Save the file and close it.
建立CA(证书颁发机构)
我们可以使用在easy-ras实用程序中设置的变量来构建我们的证书颁发机构,更改为在先前步骤中创建的CA目录,然后提供我们编辑的vars文件。
$ cd ~/openvpn- ca$ source vars$ ./clean-all $ ./build-ca
这将创建根证书和带有证书的授权键。只需按ENTER键,因为我们已经在vars文件中提供了信息。
Country Name (2 letter code) [US]: State or Province Name (full name) [NY]: Locality Name (eg, city) [New York City]: Organization Name (eg, company) [DigitalOcean]: Organizational Unit Name (eg, section) [Community]: Common Name (eg, your name or your server's hostname) [DigitalOcean CA]: Name [server]: Email Address [admin@email.com]: Creating the Server Certificate, Key and Encryption Files. We will create the Server Certificate, Key and Encryption and also some additional files used for the encryption process. We can use the below command to generate key certificate and key pair. $ ./build-key-server serverCountry Name (2 letter code) [in]: State or Province Name (full name) [ap]: Locality Name (eg, city) [Hyderabad]: Organization Name (eg, company) [rigaps]: Organizational Unit Name (eg, section) [RIGAPS]: Common Name (eg, your name or your server's hostname) [server]: Name [RIGAPS_EasyRSA]: Email Address [ckadarla@rigaps.com]: Please enter the following 'extra' attributesto be sent with your certificate request A challenge password []: An optional company name []: Using configuration from /home/ubuntu/openvpn-ca/openssl-1.0.0.cnf Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows countryName : PRINTABLE:'in' stateOrProvinceName : PRINTABLE:'ap' localityName : PRINTABLE:'Hyderabad' organizationName : PRINTABLE:'rigaps' organizationalUnitName: PRINTABLE:'RIGAPS' commonName : PRINTABLE:'server' name : T61STRING:'RIGAPS_EasyRSA' emailAddress : IA5STRING:'ckadarla@gmail.com' Certificate is to be certified until Jun 4 10:03:24 2026 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
通过按ENTER键接受默认值。直到最后也不要输入设置密码。
我们可以生成Diffie-Hellman键以与键交换一起使用。
$ ./build-dh $./build-dh Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time ............................................................................................................+................++*++* We will generate HMAC Signature to strengthen the servers TLS integrity verfication. $ openvpn --genkey --secret keys/ta.key
生成客户端证书和键对
我们将使用以下命令生成客户端键和证书,让我们将client1视为演示客户端–
$ cd ~/openvpn-ca $ source vars $ ./build-key client1
配置OpenVPN服务
我们可以使用刚生成的凭据和文件来配置OpenVPN
将文件复制到OpenVPN目录
由于我们需要将所有生成的文件复制到/etc/openvpn
$ cd ~/openvpn-ca/keys $ sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
然后,我们需要将示例配置文件复制并解压缩到该目录中。
$ gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
我们需要修改服务器配置文件
$ sudo nano /etc/openvpn/server.conf
需要取消注释某些指令“redirect-gateway”
…。推送“重定向网关def1旁路dhcp”…。推送“dhcp-optionDNS208.67.222.222”推送“dhcp-optionDNS208.67.220.220”…tls-authta.key0#此文件是秘密的
…。
并添加以下行
key-direction 0 ....
最后,通过删除“;”取消注释下面的行
user nobody group nogroup
保存并关闭文件
设置服务器网络配置
由于我们需要调整服务器上的某些设置,因此需要联网以路由OpenVPN流量。
允许服务器上的IP转发
我们将允许服务器转发传入的流量,这是VPN服务器设置的重要步骤。
为此,我们需要修改/etc/sysctl.conf文件。
$ sudo nano /etc/sysctl.conf
找到net.ipv4.ip_forward行,并删除“#”以取消注释该行
Net.ipv4.ip_forward=1
保存文件
要在当前会话中应用更改,请使用以下命令
$ sudo sysctl –p
启动并启用OpenVPN服务
我们必须在服务器上启动OpenVPN服务,为此,我们将使用配置文件作为配置文件在/etc/openvpn/server.conf上服务器上的变量的实例来启动OpenVPN服务器。启动服务器时,在命令末尾添加@server
$ sudo systemctl start openvpn@server
我们可以使用以下命令检查服务状态
$ sudo systemclt status openvpn@server
$ openvpn@server.service - OpenVPN connection to server Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled) Active: active (running) since Tue 2016-06-06 13:30:05 EDT; 37s ago Docs: man:openvpn(8)https://community.openvpn.net/openvpn/wiki/Openvpn23ManPagehttps://community.openvpn.net/openvpn/wiki/HOWTO Process: 5852 ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/%i.conf --writepid /run/openvpn/%i.pid (code=exited, sta Main PID: 5856 (openvpn) Tasks: 1 (limit: 512) CGroup: /system.slice/system-openvpn.slice/openvpn@server.service └─5856 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/server.pid June 06 13:30:40 openvpn2 ovpn-server[5856]: /sbin/ip addr add dev tun0 local 192.168.0.1 peer 192.168.0.2 June 06 13:30:40 openvpn2 ovpn-server[5856]: /sbin/ip route add 192.168.0.0/24 via 192.168.0.2 June 06 13:30:40 openvpn2 ovpn-server[5856]: GID set to nogroup June 06 13:30:40 openvpn2 ovpn-server[5856]: UID set to nobody June 06 13:30:40 openvpn2 ovpn-server[5856]: UDPv4 link local (bound): [undef] June 06 13:30:40 openvpn2 ovpn-server[5856]: UDPv4 link remote: [undef] June 06 13:30:40 openvpn2 ovpn-server[5856]: MULTI: multi_init called, r=256 v=256 June 06 13:30:40 openvpn2 ovpn-server[5856]: IFCONFIG POOL: base=192.168.0.4 size=62, ipv6=0 June 06 13:30:40 openvpn2 ovpn-server[5856]: IFCONFIG POOL LIST June 06 13:30:40 openvpn2 ovpn-server[5856]: Initialization Sequence Completed
我们可以使用以下命令检查OpenVPNtun0接口
$ ip addr show tune0 4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100 link/none inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0 valid_lft forever preferred_lft forever
现在,我们将服务设置为在启动时自动启动。
$ sudo systemctl enable openvpn@server
创建客户端配置
我们需要创建客户端主目录来存储文件
$ mkdir –p ~/clients/files
出于安全原因,我们需要更改文件夹权限,因为此文件夹包含客户端计算机的键
$ chmod 7000 ~/clients/files
创建客户端基础配置
我们可以使用样本客户端配置来将文件复制到当前位置。
$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client/base.conf
使用任何文本版本打开配置文件
$vi〜/client/base.conf
我们需要更改文件中的某些更改,在文件中搜索远程
……. Remote server_IP_Address 1194 (Here we needed to add our public IP address) …. user nobody group nogroup (Here we needed to un-comment the above lines) …. # ca ca.crt # cert client.crt # key client.key (We needed to comment the above lines in the configuration file) …. …. Key-direction 1 (We needed to add the key-direction to the file at the end) Save the file
生成用于创建配置文件的脚本
我们将创建一个简单的脚本来生成证书,键和加密文件,并编译在步骤前编辑的基本配置。使用以下代码创建文件
$ nano ~/client/generate_config.sh KEY_DIR=~/openvpn-ca/keys OUTPUT_DIR=~/client-configs/files BASE_CONFIG=~/client-configs/base.conf cat ${BASE_CONFIG} \ <(echo -e '<ca>') \ ${KEY_DIR}/ca.crt \ <(echo -e '</ca>\n<cert>') \ ${KEY_DIR}/${1}.crt \ <(echo -e '</cert>\n<key>') \ ${KEY_DIR}/${1}.key \ <(echo -e '</key>\n<tls-auth>') \ ${KEY_DIR}/ta.key \ <(echo -e '</tls-auth>') \ > ${OUTPUT_DIR}/${1}.ovpn
创建文件后,我们需要使该文件可执行
$ chmod 7000 ~/client/generate_config.sh
生成客户端配置文件
我们将使用以下命令为client1生成客户端证书和键
$ cd ~/clients $ ./generate_config.sh client1
如果所有脚本运行良好,我们将在〜/client/files目录中拥有一个client.ovpn文件。
我们需要使用WinSCP将客户端文件传输到客户端计算机,这里我们使用Windows计算机作为客户端
在Windows上安装客户端配置
我们需要在Windows计算机上下载OpenVPN软件,并且需要将.ovpn即client1.ovpn文件复制到c:\ProgramFiles\OpenVPN\config
注意-我们需要在具有管理员权限的Windows机器上运行OpenVPNGUI,这意味着以管理员身份运行。
OpenVPN打开后,它将启动连接并最小化到系统托盘,然后右键单击OpenVPNapplet图标,然后选择client1并选择Connect。
我们可以使用任何客户端OSx,Andriod和IOS。等连接到服务器
我们需要生成客户端证书和键对,为每个设备生成客户端配置文件。
完成此配置和设置后,我们可以安全地连接到办公室或环境,以保护身份不受窥探者和检查者的侵害。