openvpn部署

来源:http://www.cnblogs.com/netonline/archive/2017/08/01/7271401.html
-Advertisement-
Play Games

原文發表於cu:2016-03-29 參考文檔: 一.環境 1. 拓撲示意 2. 環境 Client:Win7 x86_64, 10.19.1.200 Server:CentOS6.7 x86_64,eth0 10.19.1.100,eth0 172.16.1.100 Intranet:172.16 ...


原文發表於cu:2016-03-29

參考文檔:

  1. 安裝:http://qicheng0211.blog.51cto.com/3958621/1575273
  2. 安裝:http://www.ipython.me/centos/centos6-5-build-install-openvpn.html
  3. 安裝:http://my.oschina.net/deepblue/blog/532014?fromerr=DV0DExXF#OSC_h3_15
  4. 配置文件詳解:http://www.360doc.com/content/11/1225/00/4171006_174788280.shtml
  5. 應用場景:http://www.linuxfly.org/post/86/

一.環境

1. 拓撲示意

2. 環境

ClientWin7 x86_64, 10.19.1.200

ServerCentOS6.7 x86_64eth0 10.19.1.100eth0 172.16.1.100

Intranet172.16.1.200

二.部署openvpn server

1. 軟體準備

檢查依賴軟體包與編譯工具,涉及:pam pam-devel openssl openssl-devel make automake autoconf pkgconfig gcc gcc-c++ libtool gettext lzo lzo-devel等,其中pam pam-devel openssl openssl-devel lzo lzo-devel (openvpn數據壓縮使用lzo)必須安裝。

可以使用rpm命令檢查:rpm -qa | grep xxx
如果不存在,可以使用yum安裝:yum install xxx -y

2. 內核支持

1) 檢查CentOS系統內核是否支持tun/tap驅動,

[root@localhost ~]# modinfo tun
filename: /lib/modules/2.6.32-573.el6.x86_64/kernel/drivers/net/tun.ko
alias: char-major-10-200
license: GPL
author: (C) 1999-2004 Max Krasnyansky <[email protected]>
description: Universal TUN/TAP device driver
srcversion: 7E378005ED4D694F19D6024
depends:
vermagic: 2.6.32-573.el6.x86_64 SMP mod_unload modversions

上面返回結果表示內核支持驅動,如果返回error類錯誤表明不支持相應驅動。

2) 確認內核支持驅動後,檢查驅動是否載入,

[root@localhost ~]# lsmod | grep tun
tun 16934 0

如果沒有返回值,表示驅動未載入,通常使用如下命令載入,

[root@localhost ~]# modprobe tun

#也可以使用ls /dev/net/tun檢查文件是否存在判斷tun模塊是否載入。

3. openvpn server安裝

獲取軟體

獲取最新版本的安裝軟體,放置在/usr/local/src/目錄下,

[root@localhost ~]# cd /usr/local/src/
[root@localhost src]# wget https://swupdate.openvpn.org/community/releases/openvpn-2.3.10.tar.gz
[root@localhost src]# wget http://build.openvpn.net/downloads/releases/easy-rsa-2.2.0_master.tar.gz

編譯安裝openvpn伺服器

[root@localhost src]# mkdir /usr/local/openvpn/
[root@localhost src]# tar -zxvf openvpn-2.3.10.tar.gz
[root@localhost src]# cd openvpn-2.3.10
[root@localhost openvpn-2.3.10]# ./configure --prefix=/usr/local/openvpn/
[root@localhost openvpn-2.3.10]# make ; make install

[root@localhost openvpn-2.3.10]# mkdir /usr/local/openvpn/etc/
[root@localhost openvpn-2.3.10]# cp /usr/local/src/openvpn-2.3.10/sample/sample-config-files/server.conf /usr/local/openvpn/etc/
[root@localhost openvpn-2.3.10]# mkdir /etc/openvpn/
[root@localhost openvpn-2.3.10]# ln -s /usr/local/openvpn/etc/server.conf /etc/openvpn/

#將openvpn伺服器端配置文件複製到/usr/local/openvpn/etc/,併在/etc/openvpn/目錄下建立軟連接

部署easy-rsa

使用easy-rsa製作CA證書、服務端證書以及客戶端證書,openvpn 2.3以上版本的源碼包不再含easy-rsa。

[root@localhost src]# tar -zxvf easy-rsa-2.2.0_master.tar.gz
[root@localhost src]# mv easy-rsa-2.2.0_master /usr/local/openvpn/easy-rsa

#easy-rsa不用安裝,解壓之後複製到相應目錄即可 (此處變更了目錄名)。

製作證書 (CA證書,服務端證書及客戶端證書)

配置PKI

[root@localhost src]# cd /usr/local/openvpn/easy-rsa/easy-rsa/2.0/
[root@localhost 2.0]# chmod +x vars
[root@localhost 2.0]# vim vars
修改: export KEY_SIZE=1024 為 export KEY_SIZE=2048
#對性能有一定影響,酌情處理。

如下 (標紅的地方為需要修改的值,69/70/73/74行註釋):
64 export KEY_COUNTRY="CN"
65 export KEY_PROVINCE="XX"
66 export KEY_CITY="XXX"
67 export KEY_ORG="XXX"
68 export KEY_EMAIL="[email protected]"
69 #export [email protected]
70 #export KEY_CN=changeme
71 export KEY_NAME="EasyRsa"
72 export KEY_OU="XXX"
73 #export PKCS11_MODULE_PATH=changeme
74 #export PKCS11_PIN=1234
#證書變數修改後,生成服務端ca證書時,這裡的配置會作為預設配置;也可以使用export修改變數。
#其實vars文件不修改也可以,主要涉及變數,酌情處理。

#建立openssl軟鏈接
[root@localhost 2.0]# ln -s openssl-1.0.0.cnf openssl.cnf

#使變數生效
[root@localhost 2.0]# source ./vars 

生成證書

清空原有證書

#慎用,特別在非首次操作時,會清除%easy-rsa%/2.0/keys/下的所有已經生成的證書
[root@localhost 2.0]# ./clean-all

生成服務端ca證書

#預設配置已修改,可以一直回車
[root@localhost 2.0]# ./build-ca

生成服務端密鑰證書

# server是自定義的伺服器名, 可以一直回車,直到提示輸入"y/n"時,輸入"y"再按回車;"A challenge password []: " 處可以自定義密碼,與後面生成客戶端證書保持一致即可
[root@localhost 2.0]# ./build-key-server server 

生成diffie hellman參數

#生成dh2048.pem文件,用於增強openvpn安全性。
[root@localhost 2.0]# ./build-dh 

生成客戶端證書

# client是自定義的客戶端名,可以一直回車,直到提示輸入"y/n"時,輸入"y"再按回車;"A challenge password []: " 處與服務端保持一致即可
[root@localhost 2.0]# ./build-key client 

生成ta.key文件

#防DDos攻擊、UDP淹沒等惡意攻擊
[root@localhost 2.0]# /usr/local/openvpn/sbin/openvpn --genkey --secret keys/ta.key 

 

在%easy-rsa%/2.0/keys/目錄下是生成的各類證書,將ca.crt,client.crtclient.key,ta.key,發送到客戶端備用。

4. openvpn server配置部署

[root@localhost 2.0]# cd /usr/local/openvpn/etc/
[root@localhost etc]# vim server.conf        #紅色標註為本次生效的服務端配置

# 定義openvpn監聽的IP地址,預設註釋掉,如果伺服器是單網卡的可不註明,伺服器多網卡時建議註明
local 10.19.1.100

# 定義openvpn服務進程埠,預設1194
port 1194

# TCP or UDP,在不使用http proxy時建議採用udp,有其他機制可以保證傳輸的可靠性,且降低DDoS攻擊的可能性
proto udp

# 設置路由模式,tap是橋接模式,通過軟體在系統中模擬出一個tap設備,該設備是一個二層設備,同時支持鏈路層協議;tun是路由模式,通過軟體在系統中模擬出一個tun路由,tun是ip層的點對點協議
dev tun

# 設置SSL/TLS root certificate (ca), 即生成的證書,採用絕對路徑
ca /usr/local/openvpn/easy-rsa/easy-rsa/2.0/keys/ca.crt
cert /usr/local/openvpn/easy-rsa/easy-rsa/2.0/keys/server.crt
key /usr/local/openvpn/easy-rsa/easy-rsa/2.0/keys/server.key # This file should be kept secret

# 設置Diffie hellman parameters,採用絕對路徑
dh /usr/local/openvpn/easy-rsa/easy-rsa/2.0/keys/dh2048.pem

# 為客戶端分配地址和掩碼,".1"這個地址會留給伺服器端TUN/TAP設備
server 172.16.99.0 255.255.255.0

# 維持客戶端與虛擬IP的對應表,方便客戶端再次連接時獲得同樣的IP,預設路徑同server.conf同目錄
ifconfig-pool-persist /usr/local/openvpn/etc/ipp.txt

# 推送網段路由到客戶端,這裡針對上面拓撲圖的Intranet
push "route 192.168.10.0 255.255.255.0"

# 如果客戶端"Thelonious"後端還有1個網段,服務端需要將此網段註入本地路由表,作為客戶端後端網路訪問的回程路由;同時在ccd/Thelonious文件中寫入"iroute 192.168.40.128 255.255.255.248",ccd目錄預設與server.conf同目錄
;client-config-dir ccd
;route 192.168.40.128 255.255.255.248

# 如果客戶端"Thelonious" (假設的1個名字) 需要1個固定ip,可以在ccd/Thelonious文件中寫入"ifconfig-push 10.9.0.1 255.255.255.252"
;client-config-dir ccd
;route 10.9.0.0 255.255.255.252

# 修改客戶端網關,預設禁用
;push "redirect-gateway def1 bypass-dhcp"

# 推送dns信息
;push "dhcp-option DNS 208.67.222.222"
;push "dhcp-option DNS 208.67.220.220"

# 允許openvpn客戶端之間互通,預設禁止
client-to-client

# 允許多客戶端採用1個客戶端證書,預設1個證書同時只能1個客戶端連接,多客戶端同時連接需生成多個客戶端證書
duplicate-cn

# 設置服務端檢測的間隔和超時時間,10s檢測1次,120s超時
keepalive 10 120

# ta.key文件增強安全性,防DDos攻擊、UDP淹沒等惡意攻擊,預設不開啟;此key文件在服務端/客戶端各1份,服務端參數為"0",客戶端參數為"1"
tls-auth /usr/local/openvpn/easy-rsa/easy-rsa/2.0/keys/ta.key 0 # This file is secret

# 數據採用lzo壓縮傳輸
comp-lzo

# 設置允許同時連接的最大客戶端數
max-clients 10

# nobody賬戶連接,增強安全性
user nobody
group nobody

# 通過keepalive檢測超時後,重新啟動VPN,不重新讀取keys,保留第一次使用的keys
persist-key
# 通過keepalive檢測超時後,重新啟動VPN,一直保持tun或tap設備是linkup,否則網路連接會先linkdown然後linkup
persist-tun

# 設置openvpn狀態日誌
status /usr/local/openvpn/etc/openvpn-status.log

# 設置日誌文件
log /usr/local/openvpn/etc/openvpn.log
# 設置運行日誌文件,一般禁用,在openvpn啟動錯誤時可打開定位
;log-append /usr/local/openvpn/etc/openvpn.log

# 日誌級別
verb 3

5. 啟動openvpn server

#從解壓的源碼文件中複製openvpn的啟動腳本到/etc/init.d/目錄,啟動腳本根據系統選擇,centos選擇rhel
#添加openvpne到服務管理中並設置開機啟動
[root@localhost ~]# cp /usr/local/src/openvpn-2.3.10/distro/rpm/openvpn.init.d.rhel /etc/init.d/openvpn
[root@localhost ~]# chkconfig --add openvpn
[root@localhost ~]# chkconfig --level 35 openvpn on

#添加openvpn執行文件的軟鏈接
[root@localhost ~]# ln -s /usr/local/openvpn/sbin/openvpn /usr/sbin/openvpn

[root@localhost ~]# service openvpn start

三.部署openvpn

1. 啟動系統(內核)路由轉發功能

[root@localhost ~]# sed -i '/net.ipv4.ip_forward/s/0/1/' /etc/sysctl.conf
[root@localhost ~]# sysctl -p

如果是centos7,/etc/sysctl.conf為空文件,可以在/etc/sysctl.conf文件中添加如下內容並立即使能路由轉發功能:
net.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0

2. 配置iptables

#允許客戶端訪問伺服器udp 1194埠,與server.conf文件中採用的協議有關
#源地址為openvpn虛擬網段的ip nat為eth1網口ip實現內網穿透;當然,如果Intranet需要訪問openvpn虛擬網段,需要在Intranet內部或邊界設置回程路由
#如果iptables提示nat有問題,可能是因為nat模塊沒有載入,可以通過"modprobe iptable_nat"命令載入nat模塊,再通過"lsmod | grep nat"命令確認其是否正確載入到內核
#切記保存rules到/etc/sysconfig/iptables文件,可以使用cat檢查文件
[root@localhost ~]# iptables -I INPUT -m state --state NEW -m udp -p udp --dport 1194 -j ACCEPT
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 172.16.99.0/24 -o eth1 -j MASQUERADE
[root@localhost ~]# service iptables save

四.部署openvpn client for windows

1. 下載軟體

下載地址 (xp, x86_64位環境):http://swupdate.openvpn.org/community/releases/openvpn-install-2.3.10-I002-x86_64.exe

下載地址 (vista and later, x86_64位環境):https://swupdate.openvpn.org/community/releases/openvpn-install-2.3.10-I603-x86_64.exe

2. 安裝openvpn客戶端

安裝openvpn-install-2.3.10-I603-x86_64.exe,其中要求安裝虛擬tap網卡,同意"安裝"。

 

3. 配置客戶端

證書準備

下載伺服器端%easy-rsa%/2.0/keys/目錄下是生成的證書,涉及ca.crt,client.crtclient.key,ta.key,存放到openvpn安裝目錄的config\目錄。

# ta.key非必須證書,主要增強安全性

openvpn client配置部署

進入openvpn安裝目錄,複製 sample-config\client.ovpn 文件到 config\ 目錄,是否修改文件名酌情處理。

文本文件打開client.ovpn,註意與伺服器端的配置對應即可。

##############################################
client
dev tun
proto udp
remote 10.19.1.100 1194
# 不停的嘗試解析伺服器端的主機名,對於非永久連接到internet的設備有用
resolv-retry infinite
# 客戶端不需要綁定1個埠號
Nobind
# nobody賬號僅適用linux系統,這裡是否註釋不影響連接性
user nobody
group nobody
persist-key
persist-tun
# 可以不使用絕對路徑,預設路徑同*.ovpn相同的config目錄
ca ca.crt
cert client.crt
key client.key
remote-cert-tls server
# ta.key,伺服器與客戶端各保存1份,伺服器端參數為"0",客戶端參數為"1"
tls-auth ta.key 1
comp-lzo
verb 3

啟動OpenVPN GUI

啟動openvpn客戶端,通過以下三種方式檢查openvpn連接狀態:

客戶端cmd下查看網卡ip ipconfig /all

在客戶端cmd下查看路由表: route print

在客戶端cmdping Intranet

#ping Intranet時,註意伺服器端iptables中原生有1rule禁止icmp包轉發 (-A FORWARD -j REJECT --reject-with icmp-host-prohibited),可以註釋此條rule,然後重啟iptables


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...