OpenVPN搭建

openVPN简介

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

 

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

 

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

 

搭建环境

Ubuntu 16.04

(root权限)

openvpn服务器

安装OpenVPN

  OpenVPN在Ubuntu的默认仓库中是可用的,所以我们可用使用apt来安装。我们还需安装一个easy-rsa包,这个包可以帮助我们建立一个内部CA(certificate authority)用于使用我们VPN。

更新你的服务器包索引并安装必要的包类型:

sudo apt-get update

sudo apt-get install openvpn easy-rsa

 

现在你的服务器上面有了所需的软件,接下来是相关的配置。

默认已经拥有证书,如果无证书,需要创建证书

把相关证书复制到OpenVPN的目录下面

  开始之前,把我们需要的相关文件复制到/etc/openvpn这个配置目录中去,即把~/openvpn-ca/keys目录下面的ca.crt,ca.key,server.crt,server.key,HMAC签名以及Diffie-Hellman文件复制到/etc/openvpn这个目录下面:

sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn

然后从OpenVPN自带的配置模板中复制配置文件:

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/

 

cd /etc/openvpn/

gzip -d server.conf.gz

(模板中有相应配置和解释,下一小节详细介绍)

修改OpenVPN配置文件(server.conf)

sudo vi /etc/openvpn/server.conf

 

内容如下:

proto udp

dev tap

port 1194

ca ca.crt

cert server.crt

key server.key  # This file should be kept secret

dh dh2048.pem

 

server-bridge 10.8.0.1 255.255.255.0 10.8.0.50 10.8.0.100

;push "route 192.168.207.0 255.255.255.0"

;push "dhcp-option 43 1.1.1.1"

 

verb 3

;mute 20

keepalive 15 30

 

sndbuf 393216

rcvbuf 393216

cipher AES-192-CBC

auth SHA256

fragment 0

 

ifconfig-noexec

duplicate-cn

 

基本配置含义:

  1. proto:openvpn一般使用udp协议进行连接。无需修改
  2. port:默认为端口为1194,无需修改
  3. dev:有tap和tun可选。含义如下:

一个tun设备大多时候,被用于基于IP协议的通讯。一个tap设备允许完整的以太网帧通过Openvpn隧道,因此提供非ip协议的支持,比如IPX协议和AppleTalk协议。再简单的说一下,如果在互联网上使用,那肯定是基于ip协议的,用tun没错,如果是在一个以太网内使用,那么tap可能是一个更好的选择。

  1. ca、cert和key:服务器证书与密钥
  2. dh:Diffie hellman parameters,无需修改
  3. server-bridge:用户连接的ip地址范围
  4. push:向客户端推送路由,以便能够访问服务器。
  5. verb:log打印级别
  6. keepalive:keepalive指令使类似ping的消息在链接上来回发送,以便每一方都知道另一方何时崩溃。每10秒ping一次,如果在120秒的时间段内没有收到ping,则假定远程对等机已关闭。
  7. duplicate-cn:允许多个客户端使用一个证书。
  8. auth和cipther:认证加密算法,使用该配置即可

开启OpenVPNserver

 

$ sudo systemctl start openvpn@server

通过如下命令再次确认OpenVPN服务已经成功地开启了:

$ sudo systemctl status openvpn@server

如果一切正常的话,你的输出应当跟如下类似:

[email protected] - OpenVPN connection to server

 

   Loaded: loaded(/lib/systemd/system/[email protected]; disabled; vendor preset: enabled)

 

   Active: active (running) since Tue 2016-05-03 15:30:05 EDT;47s ago

 

     Docs:man:openvpn(8)

 

          https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage

 

          https://community.openvpn.net/openvpn/wiki/HOWTO

 

  Process: 5852ExecStart=/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/[email protected]

 

           └─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

 

 

 

May 03 15:30:05 openvpn2 ovpn-server[5856]: /sbin/ip addradd dev tun0 local 10.8.0.1 peer 10.8.0.2

 

May 03 15:30:05 openvpn2 ovpn-server[5856]: /sbin/iproute add 10.8.0.0/24 via 10.8.0.2

 

May 03 15:30:05 openvpn2 ovpn-server[5856]: GID set tonogroup

 

May 03 15:30:05 openvpn2 ovpn-server[5856]: UID set tonobody

 

May 03 15:30:05 openvpn2 ovpn-server[5856]: UDPv4 linklocal (bound): [undef]

 

May 03 15:30:05 openvpn2 ovpn-server[5856]: UDPv4 linkremote: [undef]

 

May 03 15:30:05 openvpn2 ovpn-server[5856]: MULTI:multi_init called, r=256 v=256

 

May 03 15:30:05 openvpn2 ovpn-server[5856]: IFCONFIGPOOL: base=10.8.0.4 size=62, ipv6=0

 

May 03 15:30:05 openvpn2 ovpn-server[5856]: IFCONFIG POOLLIST

 

May 03 15:30:05 openvpn2 ovpn-server[5856]:Initialization Sequence Completed

 

 

你可以通过如下命令来确认OpenVPN tun0接口是否可用

 

 

$ ip addr show tun0       #tap配置显示tap0

你应该可以看到一个配置接口:

4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP>mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100

 

    link/none

 

    inet 10.8.0.1peer 10.8.0.2/32 scope global tun0

 

       valid_lftforever preferred_lft forever

 

 

如果一切运行正常,将OpenVPN设置为开机自启动:

 

$ sudo systemctl enable openvpn@server

 

使用ifconfig查看接口是否启动。未启动调用

sudo ifconfig tap0 10.8.0.1 netmask 255.255.255.0 up

手动创建接口

此时客户端就可以与服务器连接。

注意:

       如果是tap模式,openvpnserver需要dhcpserver,为客户端分配IP地址。(dhcpserver的dns一定要配置,不然无法访问外网)

NAT

因为tap0接口和外网通信,需要进行nat转发。

方法如下:

      以下请参考《鸟哥的Linux私房菜》:

http://cn.linux.vbird.org/linux_server/0250simple_firewall_5.php

DMZ功能实现。

            主要用在openvpn客户机想要架设可以让 Internet 存取的服务器,原理图如下:

      https://images2015.cnblogs.com/blog/378619/201702/378619-20170216090650972-1096667267.png

    如上图所示,假设内部主机 192.168.1.210 启动了 WWW 服务,这个服务的端口为80 , 外部主机 (61.xx.xx.xx) 要如何连接到我的内部服务器呢?这就涉及到Linux NAT 服务器端口映射了。

   1)外部主机想要连接到192.168.1.210上的 WWW 服务,必须要先连接到我们的 NAT 服务器上头,即使用网址http://public ip 访问;

   2)NAT服务器分析出请求包访问的端口为80,则将目标IP由public ip改成192.168.1.210,并且将包的信息记录下来。

   3)包经过路由后,来到private接口,然后经由内网转发到192.168.1.210,之后等待192.168.0.210服务器响应

   4)192.168.0.210接收到NAT转发过来的请求,并作出响应,响应传送到192.168.1.2(NAT服务器)

   5)NAT服务器经过路由判断,来到NAT postrouting链,将来源IP由192.168.1.210改为public ip,最后传送到外部主机

   NAT主机的路由设定:

    iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.210
    iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.210 -j SNAT --to-source 192.168.1.2

    查看设定:

    iptables -t nat -L -n

    清除设定:

    iptables -F

    iptables -X

 

客户端(创建配置文件):

这一步,我们建立一个更加容易生成客户端所需配置文件的系统。

 

1.创建客户端配置目录结构

  在你的home目录下面创建一个目录结构来保存客户端的相应配置文件:

$ mkdir -p ~/client-configs/files

由于客户端的配置目录里面将包含客户端的密钥,所以我们应该对这个目录进行权限的锁定:

 

$ chmod 700 ~/client-configs/files

 

2.创建基本的配置文件

  这一步,我们将OpenVPN自带的客户端配置模板复制到我们刚刚创建的客户端配置目录中作为一个客户端的基本配置文件:

$ cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf     ~/client-configs/client.conf

首先,找到remote指令,这条指令用于指定OpenVPN服务器所在的地址,这个地址应当是你的OpenVPN所在的服务器的公网IP地址。如果你改变了OpenVPN监听的端口,那么把1194换成你所设置的端口:

 

 

remote server_IP_address 1194

 

proto udp

 

dev tap

 

user nobody

 

group nogroup

 

ca ca.crt

 

cert client.crt

 

key client.key

 

 

cipher AES-128-CBC

 

auth SHA256

 

remote-cert-tls server

 

将client.conf修改为client.ovpn

 

client.ovpn和证书留用

 

 

一定要选

 

 

windows客户端

Windows 10,8,7和Vista:

https://swupdate.openvpn.org/community/releases/openvpn-install-2.4.5-I601.exe

Windows XP:

http://swupdate.openvpn.org/community/releases/openvpn-install-2.3.14-I002-i686.exe

 

证书管理必选,否则无法使用证书

将证书和client.ovpn文件放到C:/ Program Files / OpenVPN / config / 

注意:OpenVPN GUI应用程序仅支持/ config中最多50个配置文件/文件夹。因此,您只需将少量配置文件复制到该文件夹​​。由于每个文件代表一个服务器,因此您必须事先知道要连接的服务器。安装完成后,您可以轻松地在复制的服务器之间切换。

 

管理员权限运行openvpn。应用程序将开始在系统托盘中运行。这是你的时钟附近的区域:

 

右键单击应用程序图标,将  鼠标悬停在其中一个服务器上,然后单击“ 连接”。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章