原文發表於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
參考文檔:
- 安裝:http://qicheng0211.blog.51cto.com/3958621/1575273
- 安裝:http://www.ipython.me/centos/centos6-5-build-install-openvpn.html
- 安裝:http://my.oschina.net/deepblue/blog/532014?fromerr=DV0DExXF#OSC_h3_15
- 配置文件詳解:http://www.360doc.com/content/11/1225/00/4171006_174788280.shtml
- 應用場景:http://www.linuxfly.org/post/86/
一.環境
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.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.crt,client.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.crt,client.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;
在客戶端cmd下ping Intranet。
#ping Intranet時,註意伺服器端iptables中原生有1條rule禁止icmp包轉發 (-A FORWARD -j REJECT --reject-with icmp-host-prohibited),可以註釋此條rule,然後重啟iptables。