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。應用程序將開始在系統托盤中運行。這是你的時鐘附近的區域:

 

右鍵單擊應用程序圖標,將  鼠標懸停在其中一個服務器上,然後單擊“ 連接”。

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